投稿に基づいて here および here chromeファイルをダウンロードできるようにSeleniumのwebdriverを使用しようとしています。これまでのコード
from Selenium import webdriver
from Selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("--disable-extensions")
chrome_options.add_experimental_option("profile.default_content_settings.popups", 0)
chrome_options.add_experimental_option("download.Prompt_for_download", "false")
chrome_options.add_experimental_option("download.default_directory", "/tmp")
driver = webdriver.Chrome(chrome_options=chrome_options)
ただし、これだけでも次のエラーが発生します。
WebDriverException: Message: unknown error: cannot parse capability: chromeOptions
from unknown error: unrecognized chrome option: download.default_directory
(Driver info: chromedriver=2.24.417424 (c5c5ea873213ee72e3d0929b47482681555340c3),platform=Linux 4.10.0-37-generic x86_64)
それでこれを修正する方法は?この「機能」を使用する必要がありますか?もしそうなら、どのように正確に?
これを試して。 Windowsで実行
( Seleniumでファイルのダウンロードを制御する方法Python Chromeのバインディング )
from Selenium import webdriver
from Selenium.webdriver.chrome.options import Options
options = Options()
options.add_experimental_option("prefs", {
"download.default_directory": r"C:\Users\xxx\downloads\Test",
"download.Prompt_for_download": False,
"download.directory_upgrade": True,
"safebrowsing.enabled": True
})
WebDriverを使用して任意のファイル(画像)を保存する最も簡単な方法は、ファイルを保存するJavaScriptを実行することだと思います。設定は一切必要ありません!
このライブラリ FileSaver.js を使用して、目的の名前でファイルを簡単に保存します。
from Selenium import webdriver
import requests
FILE_SAVER_MIN_JS_URL = "https://raw.githubusercontent.com/eligrey/FileSaver.js/master/dist/FileSaver.min.js"
file_saver_min_js = requests.get(FILE_SAVER_MIN_JS_URL).content
chrome_options = webdriver.ChromeOptions()
driver = webdriver.Chrome('/usr/local/bin/chromedriver', options=chrome_options)
# Execute FileSaver.js in page's context
driver.execute_script(file_saver_min_js)
# Now you can use saveAs() function
download_script = f'''
return fetch('https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-logo.svg?v=a010291124bf',
{{
"credentials": "same-Origin",
"headers": {{"accept":"image/webp,image/apng,image/*,*/*;q=0.8","accept-language":"en-US,en;q=0.9"}},
"referrerPolicy": "no-referrer-when-downgrade",
"body": null,
"method": "GET",
"mode": "cors"
}}
).then(resp => {{
return resp.blob();
}}).then(blob => {{
saveAs(blob, 'stackoverflow_logo.svg');
}});
'''
driver.execute_script(download_script)
# Done! Your browser has saved an SVG image!
いくつかのヒント:
クロムとクロムドライバーは同じバージョンである必要があります。
通常、chromeパッケージにはchromedriverが含まれている必要があります。インストールディレクトリで見つけることができます。 ubuntu/debianを使用している場合は、_dpkg -L chromium-chromedriver
_を実行します。
正しいChrome設定の構成
satishが言ったように、options.add_experimental_option("prefs", ...)
を使用してSelenium + chromeを設定します。ただし、構成は時間とともに変更される場合があります。 最新で実行可能な設定を取得するための適切な方法は、chrome config dirで確認することです。たとえば、
~/.config/chromium/Default/Preferences
_の実際の設定を確認してください私の場合、コードは次のとおりです。
_from Selenium import webdriver
from Selenium.webdriver.common.desired_capabilities import DesiredCapabilities
options = webdriver.ChromeOptions()
options.gpu = False
options.headless = True
options.add_experimental_option("prefs", {
"download.default_directory" : "/data/books/chrome/",
'profile.default_content_setting_values.automatic_downloads': 2,
})
desired = options.to_capabilities()
desired['loggingPrefs'] = { 'performance': 'ALL'}
driver = webdriver.Chrome(desired_capabilities=desired)
_
例外から、chromedriver=2.24.417424
を使用しています。
使用しているSeleniumとChromeブラウザのバージョンは何ですか?
私は次のコードを試しました:
そしてそれは動作します:
from Selenium import webdriver
download_dir = "/pathToDownloadDir"
chrome_options = webdriver.ChromeOptions()
preferences = {"download.default_directory": download_dir ,
"directory_upgrade": True,
"safebrowsing.enabled": True }
chrome_options.add_experimental_option("prefs", preferences)
driver = webdriver.Chrome(chrome_options=chrome_options,executable_path=r'/pathTo/chromedriver')
driver.get("urlFileToDownload");
Chromedriverでサポートされているブラウザを使用していることを確認してください( here から、Chrome v52-54
である必要があります)。