実現したいこと
Python+Seleniumでwebページからファイルをダウンロードしたい
前提
Seleniumでwebページにアクセスして、そのページ内にあるダウンロードリンクを取得まではいくのですが、
driver.getでそのダウンロードurlにアクセスできない。
エラーは発生せず、ただダウンロードができていない。
発生している問題・エラーメッセージ
エラーメッセージ なし
該当のソースコード
python
1from selenium import webdriver 2from selenium.webdriver.chrome.service import Service as ChromeService 3from webdriver_manager.chrome import ChromeDriverManager 4from selenium.webdriver.chrome.options import Options 5from selenium.webdriver.common.by import By 6from time import sleep 7 8options = webdriver.ChromeOptions() 9options.add_argument('--headless') 10options.add_argument('--disable-gpu') 11options.add_argument('--no-sandbox') 12options.add_argument('--disable-dev-shm-usage') 13options.add_argument('--remote-debugging-port=9222') # option設定 headless 軽量化 14options.add_experimental_option("prefs", {"download.default_directory": r'G:\マイドライブ\download' }) # option設定 ダウンロード保存先 15driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()),options=options) 16 17driver.get('https://www.naaim.org/programs/naaim-exposure-index/') 18sleep(10) 19elem = driver.find_element(By.CSS_SELECTOR,'* strong > a') 20link = elem.get_attribute('href') 21driver.get(link) 22driver.quit()
試したこと
link = elem.get_attribute('href') で正しいurlは取得できています。(そのurlにアクセスするとダウンロードが始まります。)
補足情報(FW/ツールのバージョンなど)
手元の環境ですと、sleep を入れることでダウンロードが完了しました。(もっと適切な方法があるとは思いますが。。。)
driver.get(link)
sleep(10)
driver.quit()
ご返信ありがとうございます。私の環境だと、そちらを試しても、変化はありませんでした。
headlessを外すとうまくいったのですが、headlessをつけると、ダウンロードファイルが保存先にありませんでした…
一応書いておきますと、こちらの環境は以下の通りです。
Ubuntu Linux 22.04, Google Chrome 110.0.5481.177, ChromeDriver 110.0.5481.77
こちらでは headless モードであってもなくても sleep を入れないとダウンロードされません。
解決いたしました。
どうやら、ヘッドレスだとセキュリティの関係で、ダウンロードできない場合があるようです。
参照 https://isgs-lab.com/183/
いくつか処理を施すことで無事ダウンロードできました。
ご協力ありがとうございました!

回答2件
あなたの回答
tips
プレビュー


