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

这篇具有很好参考价值的文章主要介绍了Selenium-针对alert弹窗无法获取,弹出no such alert的解决方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在爬取网页的过程中,经常会遇到一些弹窗的情况,有alert、confirm、prompt等三种,区别如下:

  1. alert() 弹出个提示框 (确定)
    警告消息框 alert 方法有一个参数,即希望对用户显示的文本字符串。该字符串不是 HTML 格式。该消息框提供了一个“确定”按钮让用户关闭该消息框,并且该消息框是模式对话框,也就是说,用户必须先关闭该消息框然后才能继续进行操作。
  2. confirm() 弹出个确认框 (确定,取消)
    确认消息框 使用确认消息框可向用户问一个“是-或-否”问题,并且用户可以选择单击“确定”按钮或者单击“取消”按钮。confirm 方法的返回值为 true 或 false。该消息框也是模式对话框:用户必须在响应该对话框(单击一个按钮)将其关闭后,才能进行下一步操作。
  3. prompt() 弹出个输入框(确定,取消)
    提示消息框 提供了一个文本字段,用户可以在此字段输入一个答案来响应您的提示。该消息框有一个“确定”按钮和一个“取消”按钮。如果您提供了一个辅助字符串参数,则提示消息框将在文本字段显示该辅助字符串作为默认响应。否则,默认文本为 “undefined”。

这三种弹窗的共同点是,弹出之后你是获取不到任何网页内容的,也就是无法通过常规的辦法

driver.find_element(by=By.XPATH,value='')

这种形式来获取元素。F12是没有任何内容,也无法点选的

selenium另外有一套方法来把driver转换到弹窗上:

driver.switch_to.alert.accept()

其中driver就是你设置好的浏览器句柄,switch_to.alert代表你当前的弹窗类型,alert就对应alertaccept的意思就是点确定,另外还有dismiss等用法,网上很多了,不详细说。


用这个语句,就可以把弹窗点掉,之后正常操作,但是我重点想说的是以下内容:
在实际网页中,往往弹窗会有一定延时,这时候你用这个语句就会报一个no such alert的错误,意味着获取不到弹窗,此时要用如下的办法解决:

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import TimeoutException

wait = WebDriverWait(driver, 10)
wait.until(EC.alert_is_present())
driver.switch_to.alert.accept()#注意之前的两步

引用Webdriver类,里面的参数第一个是句柄,第二个则是超时等待时间,这里是10秒钟。

Webdriver这种方法叫做显示等待,用一个默认频率不停的刷新(默认是0.5s),检测当前页面元素是否存在,如果超过10秒则抛出TimeOut。

很显然,这种方法比一般的sleep效率要高。
wait.until(EC.alert_is_present()) 就是判断弹窗是否存在,如果存在,那么就不会抛出异常,继续走下一步也就是获取到弹窗点击确定。

之后就可以进行正常的操作了。文章来源地址https://www.toymoban.com/news/detail-401823.html

到了这里,关于Selenium-针对alert弹窗无法获取,弹出no such alert的解决方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序授权登录时先判断是否勾选协议再弹出获取手机号的弹窗

    思路:设置两个一样的按钮,一个是点击事件的按钮,用来判断是否已勾选;另一个是授权登录的按钮,用来获取用户信息

    2024年02月11日
    浏览(70)
  • Message: no such element: Unable to locate element:selenium报错

           最近在使用selenium爬虫时遇到了这个报错,反复检查了自己xpath路径确认没有问题。但是程序还是会报错:“Message: no such element: Unable to locate element: {“method”:“xpath”,“selector”:“//*[@id=“rootWrapper”]/div/div/div/div[2]/div/div[2]/div/div/div/div[2]/div[2]/ul/li[1]”}”。 代码如

    2024年02月11日
    浏览(27)
  • 解决selenium定位不到xpath元素: “NoSuchElementException: Message: no such element: Unable

    在使用selenium爬取的时候用xpath定位元素,最常见的报错就是这个,通常要么是xpath写错了,要么就是元素还没加载出来。 如果是前者可以用谷歌浏览器的xpath helper插件检查xpath是否正确,后者可以增加等待时间或使用以下语句等到元素可见再执行后续操作: 这次我遇到的问题

    2024年02月16日
    浏览(29)
  • 使用selenium时NoSuchElementException: Message: no such element: Unable to locate element:{...}

    在学习用Python自动脚本测试时,运行报错: selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {\\\"method\\\":\\\"css selector\\\",\\\"selector\\\":\\\".radio:nth-child(2) .replace-word\\\"} 但在selenium ide跟踪、运行时是完全没有问题。 逐步跟踪也没有发现问题,后来想到此程序点击按

    2024年02月14日
    浏览(28)
  • [Python进阶] 消息框、弹窗:pymsgbox.alert

    作用: 显示带有文本和单个OK按钮的简单消息框。返回所单击按钮的文本。 参数: text = “”, 消息框标题 title = “”, 消息框内容 button = pymsgbox.OK_TEXT, 消息框自带的按钮,默认为:OK root = None, timeout = None, icon = NO_ICON, _tkinter = False, 说明: 一般情况下,在Python3中,调用的是

    2024年02月08日
    浏览(29)
  • 【Visual Studio】无法打开包括文件: “dirent.h”: No such file or directory

    VS2017/2019 无法打开包括文件: “dirent.h”: No such file or directory 1 “dirent.h”: No such file or directory 在windows下的VS2017/2019编译器中,发现无法打开“dirent.h”,主要是MSVC并没有实现这个头文件,但是在Linux这个头文件肯定是有的。为此,有人已经写出了WIndows下可用的 “dirent.h”。

    2024年02月15日
    浏览(37)
  • Python Selenium 元素定位错误Message: no such element: Unable to locate element: {“method“:xxx}

    报错信息 第一种情况就是你的元素定位表达式错误,根本就没有你表达式定位的这个元素,这时候就需要检查一下自己的表达式有没有写错了。当然这种情况出现的可能性不大,所以最有可能的原因还是以下几种 在打开多个窗口的情况下一定要注意selenim到底处于那个窗口上

    2024年02月16日
    浏览(36)
  • 已解决:Opencv无法法打开包括文件: “opencv.hpp”: No such file or directory问题

    在VS平台下的C++项目,添加opencv的头文件失败问题的解决方法 报错:错误 error C1083: 无法打开包括文件: “opencv.hpp”: No such file or directory 我经常出现这种报错,现在终于找到了原因; 概括起来有以下三个方向: 1.项目属性配置是否正确 2.项目目录是否配置正确 3.头文件的路径

    2024年02月16日
    浏览(26)
  • Jenkins 安装 NodeJS 插件后无法识别Node环境:env node No such file or directory

    经验证,该问题在使用Jenkins官方文档中推荐的docker镜像 jenkinsci/blueocean 才会出现。 改用最新的Jenkins docker镜像就不会遇到: 我安装的是最新的Jenkins docker镜像: 然后运行镜像: 注意 docker run 时,镜像名为 jenkins/jenkins:lts ,而不是 jenkins/jenkins 。两者不同。 为什么 jenkinsci/blu

    2024年02月07日
    浏览(37)
  • Python爬虫(7)selenium3种弹窗定位后点击操作,解决点击登录被隐藏iframe无法点击的登陆问题

    之前的文章有关于更多操作方式详细解答,本篇基于前面的知识点进行操作,如果不了解可以先看之前的文章 Python爬虫(1)一次性搞定Selenium(新版)8种find_element元素定位方式 Python爬虫(2)-Selenium控制浏览器 Python爬虫(3)-Selenium结合pywin32模拟键盘操作 Python爬虫(4)-Seleni

    2024年02月04日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包