Python+selenium自动下载xml或exe文件

本文介绍了用 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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值