Ale*_*lex 14 python selenium google-chrome
根据这里和这里的帖子,我试图在selenium中使用chrome 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)
Run Code Online (Sandbox Code Playgroud)
但仅这一点会导致以下错误:
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)
Run Code Online (Sandbox Code Playgroud)
那么如何解决这个问题呢?我必须使用这种"能力"的东西吗?如果是这样,怎么样?
Sat*_*ish 18
试试这个.在Windows上执行
(如何使用Chrome中的Selenium Python绑定控制文件下载)
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
})
Run Code Online (Sandbox Code Playgroud)
小智 5
一些技巧:
铬和 chromedriver 应该有相同的版本。
通常chromium包里面应该有chromedriver,你可以在安装目录中找到它。如果您使用的是 ubuntu/debian,请执行dpkg -L chromium-chromedriver.
拥有正确的 Chrome 首选项配置。
正如 Satish 所说,用于options.add_experimental_option("prefs", ...)配置 selenium+chrome。但有时配置可能会随着时间而改变。获得最新且可行的首选项的最佳方法是在chromium 配置目录中检查它。
例如,
~/.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)
Run Code Online (Sandbox Code Playgroud)
我认为使用 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!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33354 次 |
| 最近记录: |