Selenium-针对alert弹窗无法获取,弹出no such alert的解决方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Selenium-针对alert弹窗无法获取,弹出no such alert的解决方法相关的知识,希望对你有一定的参考价值。
参考技术A在爬取网页的过程中,经常会遇到一些弹窗的情况,有alert、confirm、prompt等三种,区别如下:
提示消息框 提供了一个文本字段,用户可以在此字段输入一个答案来响应您的提示。该消息框有一个“确定”按钮和一个“取消”按钮。如果您提供了一个辅助字符串参数,则提示消息框将在文本字段显示该辅助字符串作为默认响应。否则,默认文本为 "<undefined>"。
这三种弹窗的共同点是,弹出之后你是获取不到任何网页内容的,也就是无法通过常规的driver.find_element_by_xpath这种形式来获取元素。F12是没有任何内容,也无法点选的。
selenium另外有一套方法来把driver转换到弹窗上:
其中driver就是你设置好的浏览器句柄,switch_to.alert代表你当前的弹窗类型,alert就对应alert,accept的意思就是点确定,另外还有dismiss等用法,网上很多了,不详细说。
用这个语句,就可以把弹窗点掉,之后正常操作,但是我重点想说的是以下内容:
在实际网页中,往往弹窗会有一定延时,这时候你用这个语句就会报一个no such alert的错误,意味着获取不到弹窗,此时要用如下的办法解决:
引用Webdriver类,里面的参数第一个是句柄,第二个则是超时等待时间,这里是10秒钟。
Webdriver这种方法叫做 显示等待 ,用一个默认频率不停的刷新(默认是0.5s),检测当前页面元素是否存在,如果超过10秒则抛出TimeOut。
很显然,这种方法比一般的sleep效率要高。
wait.until(EC.alert_is_present())就是判断弹窗是否存在,如果存在,那么就不会抛出异常,继续走下一步也就是获取到弹窗点击确定。
之后就可以进行正常的操作了。
以上是关于Selenium-针对alert弹窗无法获取,弹出no such alert的解决方法的主要内容,如果未能解决你的问题,请参考以下文章
(selenium+python)_UI自动化09_定位alert弹窗
python selenium处理alert弹出对话框并处理无弹窗判断