问题
selenium自动化操作页面跳转到外部应用程序进行下载等操作,各种窗口处理方式无法解决
原因
该窗口属于浏览器窗口,与访问页面无关(已经脱离页面操作层面)
解决
selenium启动浏览器时,对浏览器进行相关窗口设置
解决方式
1、打开应用程序前,打开浏览器开发者模式-network-all
2、触发打开外部应用程序出现窗口,查看红色的报错的请求
3、复制窗口的域名(如图https://apps.apple.com),复制红色报错请求的url协议名称(如图macappstores)
使用如下代码
python
chrome_options = webdriver.ChromeOptions()
prefs = {
"protocol_handler": {
# 该方法会允许启动,执行中会把本地外部应用唤起。不影响自动化执行,可视化执行时一定程度影响视野
"allowed_origin_protocol_pairs": {
# 域名即窗口显示的域名
# macappstores属于协议名称,从network抓包即可看到。ture表示允许启动,false表示禁止启动(会出现弹窗确认)
"https://apps.apple.com": {"macappstores": True, "itms-appss": True},
"https://itunes.apple.com": {"itms-appss": True}
},
# 以下方法测试不可用,查找原因需要更新selenium至最新版本(未实验)
# 该方法理论可以直接不启动应用程序,并且不出现弹窗。最符合实际诉求
# "excluded_schemes": {
# ture表示禁止启动,false表示允许启动
# "https://apps.apple.com": {"macappstores": True},
# "https://itunes.apple.com": {"itms-appss": True}
# }
}
}
chrome_options.add_experimental_option("prefs", prefs)
webdriver.Chrome(driver_path, options=chrome_options)
参考: