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的解决方法的主要内容,如果未能解决你的问题,请参考以下文章

15.Selenium弹出框操作模拟操作页面弹窗

(selenium+python)_UI自动化09_定位alert弹窗

python selenium处理alert弹出对话框并处理无弹窗判断

python selenium处理alert弹出对话框并处理无弹窗判断

selenium的使用

java-selenium处理弹窗问题