Python+selenium自动下载xml或exe文件
- 2019 年 12 月 5 日
- 筆記
本文介绍了用 Python + selenium 的方式从网络上自动下载xml/exe文件。
笔者最近在写一个小工具,需要从pubmed
上批量下载包含文献信息的xml
文件。很明显,这是一个爬虫任务,笔者选用了python
+selenium
的组合。代码写好后运行一切都很顺利,直到最后Chrome出现了警告信息,提示我是否要保留文件:

用Chrome下载一般的文件,如txt文件是不会有警告的,但是如xml、exe等类型的文件就会有警告。这样看上去可能是一种安全策略
。虽然这个警告信息只需要点击一下就可以让程序继续运行,但是点击操作需要人工介入,这个程序就不能算作“全自动”了。最好能避开这个警告,让文件直接下载。
笔者开始上网搜寻避开警告信息的办法,经过试验可以成功运行的代码如下[1]:
from selenium import webdriver from selenium.webdriver.chrome.options import Options # 设置chrome的下载参数。 download_dir = "/path/to/your/download/dir" chrome_options = Options() chrome_options.add_experimental_option("prefs", { "download.default_directory": download_dir, "download.prompt_for_download": False, }) browser = webdriver.Chrome(chrome_options=chrome_options) # 让chrome可以自动下载文件的最关键命令 browser.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command') params = {'cmd': 'Page.setDownloadBehavior', 'params': {'behavior': 'allow', 'downloadPath': download_dir}} command_result = browser.execute("send_command", params)
一些可以让低版本的Chrome/chromedriver自动下载xml/exe文件的方法一旦升级到最新版的Chrome就不管用了。比如设置下面这些参数,都达不到效果:
prefs = {"profile.default_content_settings.popups": 0, "safebrowsing.enabled": True} chrome_options.add_experimental_option("prefs", prefs)
最关键的还是browser.command_executor._commands
那三句命令!
笔者的Chrome版本是78.0.3904.108,chromedriver的版本是77.0.3865.40。
当然,网上还有通过判断文件已下载大小的变化来实现下载xml/exe文件的,因为实现起来麻烦还是不推荐了[2]。
参考: [1]https://blog.csdn.net/weixin_41812940/article/details/82423892 [2]https://segmentfault.com/a/1190000018538071?utm_source=tag-newest