我正在尝试使用Selenium在Chrome中下载文件。我发现无头Chrome默认情况下不允许下载文件,并应用了workaround。但是,实施变通方法会导致某些文件在Chrome中生成Failed - Download Error
。
driver.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command')
params = {'cmd': 'Page.setDownloadBehavior', 'params': {'behavior': 'allow', 'downloadPath': abs_path}}
driver.execute('send_command', params)
以下是我的代码:
chrome_options = webdriver.ChromeOptions()
prefs = {
"download.prompt_for_download": False, # allow automatic downloads
"plugins.always_open_pdf_externally": True, # allow download of pdf instead of open in plugin
"download.default_directory": path,
"safebrowsing.enabled": False # allow download of .msi, .exe files, etc.
}
chrome_options.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command')
params = {'cmd': 'Page.setDownloadBehavior', 'params': {'behavior': 'allow', 'downloadPath': path}}
driver.execute('send_command', params)
for url in file_urls: # file_urls here is a list of download links
driver.get(url)
在搜索Download error
的常见原因后,我排除的是:
删除解决方法后,所有文件都可以按正常方式下载,但我无法以无头模式下载。任何建议都会有所帮助。
其他信息:
ChromeDriver版本:2.40.565498
Chrome版本:67.0.3396.87
答案 0 :(得分:0)
您可以尝试disabling security,也许可以使用
我建议不要以无头模式运行,我们也在Linux服务器中运行selenium,并且我们选择使用单独的selenium docker容器(Web服务器)并创建远程驱动程序,而不是本地驱动程序:
检查this page以获取更多信息
在安装docker之后,您可以使用此命令启动硒
docker run -d -p 4444:4444 -v /dev/shm:/dev/shm --network host selenium/standalone-chrome:3.141.59-neon
确保具有--network host
,以便可以从4444
访问localhost
端口。之后,您只需执行以下操作即可创建一个远程驱动程序
from selenium import webdriver
driver = webdriver.Remote(command_executor = exec_path or 'http://localhost:4444/wd/hub'))
这样,您就不必担心硒中的任何东西,而将精力集中在您的项目上