Selenium-针对alert弹窗无法获取,弹出no such alert的解决方法

 我来答
新科技17
2022-07-15 · TA获得超过5917个赞
知道小有建树答主
回答量:355
采纳率:100%
帮助的人:75.8万
展开全部

在爬取网页的过程中,经常会遇到一些弹窗的情况,有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())就是判断弹窗是否存在,如果存在,那么就不会抛出异常,继续走下一步也就是获取到弹窗点击确定。

之后就可以进行正常的操作了。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式