Selenium无法识别Chrome的弹出框(提示xxx想要在此设备上存储文件)

最近想从某培训机构网站上爬取题库,遇到了弹出框无法识别的问题,控制台提示“selenium.common.exceptions.NoAlertPresentException: Message: no such alert”。

Selenium无法识别Chrome的弹出框(提示xxx想要在此设备上存储文件)

然而弹出框是确实存在的啊,设置了元素等待,在报错之前弹出框已经出现了的。手动点击没有问题。

Selenium无法识别Chrome的弹出框(提示xxx想要在此设备上存储文件)

既然不是元素等待问题,接下来考虑是不是frame不同导致元素无法识别。因为某些弹出框,本身不一定是alert、confirm等类型,也可能是一个弹出页面(虽然这个弹出框看着不像,还是要排查下)。使用Chrome自带的开发者工具(F12)发现无法识别该弹出框的任何元素。

开始怀疑这个是Chrome自身的弹出框,而不是网站的弹出框。

验证:使用Firefox浏览器操作,发现不会出现该弹出框,可以确认这是Chrome自身的弹出框。

这种提示一般跟Chrome的设置有关,然而在设置页面没有找到相关的配置项。

Selenium无法识别Chrome的弹出框(提示xxx想要在此设备上存储文件)

这个时候当然是找百度帮忙了,然而在我变换了多个搜索关键字后也搜索不到我想要的结果。我就纳闷了,难道其他人都没遇到过这种情况吗?不过也不奇怪,我也是第一次遇到这种权限申请,一般都是“网站想要发送通知”的那种。

其实换Firefox浏览器就不耽误时间了,我的最终目的是拿到题库,过程无关紧要。不过我强迫症发作了,这个问题解决后下次遇到同样的问题就能快速解决了,而且也可以给别人参考。

好吧,我继续查。这个时候针对性地去查Chrome设置、Chrome权限等。最终查到了解决方法。有时候用英文关键字搜索可能更有效……

解决方案:在打开浏览器的时候设置--unlimited-storage,然后删掉报错的代码driver.switch_to.alert.accept()。这样就不会弹出提示框,而且网站也能正常展示了。

options=webdriver.ChromeOptions()
options.add_argument('--unlimited-storage')
driver=webdriver.Chrome(chrome_options = options)

附上Chrome的权限参考网址:

https://developer.chrome.com/apps/declare_permissions