因此,使用selenium通过无头镀铬下载文件的问题似乎仍然是一个问题,因为asked here一个月前没有答案。但我不明白他们是如何实现bug线程中的js。我可以添加一个选项或当前修复此问题吗?位于here的原始错误页面 我所有的东西都是截至今天10/22/17的最新信息
在python中:
from selenium import webdriver
options = webdriver.ChromeOptions()
prefs = {"download.default_directory": "C:/Stuff",
"download.prompt_for_download": False,
"download.directory_upgrade": True,
"plugins.always_open_pdf_externally": True
}
options.add_experimental_option("prefs", prefs)
options.add_argument('headless')
driver = webdriver.Chrome(r'C:/Users/aaron/chromedriver.exe', chrome_options = options)
# test file to download which doesn't work
driver.get('http://ipv4.download.thinkbroadband.com/5MB.zip')
如果删除无头选项,这没有问题。
我尝试下载的实际文件是位于.aspx网址的PDF。我正在通过执行.click()来下载它们,除了没有无头版本之外,它的效果很好。 hrefs是javascript do_postback脚本。
答案 0 :(得分:1)
我相信现在Chromium支持这个feature(当你链接到错误票证时),它会落入chromedriver团队以增加对该功能的支持。有一个开放的票证here,但它目前似乎没有高优先级。请各位需要此功能的人给它+1!
答案 1 :(得分:0)
为什么不找到锚点href,然后使用get request下载文件。这样它将在无头模式下工作,并且速度会快得多。我在C#中做到了。
def download_file(url):
local_filename = url.split('/')[-1]
# NOTE the stream=True parameter
r = requests.get(url, stream=True)
with open(local_filename, 'wb') as f:
for chunk in r.iter_content(chunk_size=1024):
if chunk: # filter out keep-alive new chunks
f.write(chunk)
#f.flush() commented by recommendation from J.F.Sebastian
return local_filename
答案 2 :(得分:0)
对于那些没有上面链接的铬票的人或者没有找到解决方案。这对我有用。 Chrome已更新至v65,chromedriver / selenium从4/16/18开始都是最新的。
prefs = {'download.prompt_for_download': False,
'download.directory_upgrade': True,
'safebrowsing.enabled': False,
'safebrowsing.disable_download_protection': True}
options.add_argument('--headless')
options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome('chromedriver.exe', chrome_options=options)
driver.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command')
driver.desired_capabilities['browserName'] = 'ur mum'
params = {'cmd': 'Page.setDownloadBehavior', 'params': {'behavior': 'allow', 'downloadPath': r'C:\chickenbutt'}}
self.driver.execute("send_command", params)
如果您在下载时遇到错误文件路径太长错误,请确保donwload路径没有尾随空格或斜杠\或反斜杠。路径也必须仅使用反斜杠。我不知道为什么。