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

Selenium-针对alertd窗无法获取,d出no such alert的解决方法,第1张

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

提示消息框 提供了一个文本字段,用户可以在此字段输入一个答案来响应您的提示。该消息框有一个“确定”按钮和一个“取消”按钮。如果您提供了一个辅助字符串参数,则提示消息框将在文本字段显示该辅助字符串作为默认响应。否则,默认文本为 "<undefined>"。

这三种d窗的共同点是,d出之后你是获取不到任何网页内容的,也就是无法通过常规的driverfind_element_by_xpath这种形式来获取元素。F12是没有任何内容,也无法点选的。

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

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

用这个语句,就可以把d窗点掉,之后正常 *** 作,但是我重点想说的是以下内容:

在实际网页中,往往d窗会有一定延时,这时候你用这个语句就会报一个no such alert的错误,意味着获取不到d窗,此时要用如下的办法解决:

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

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

很显然,这种方法比一般的sleep效率要高。

waituntil(ECalert_is_present())就是判断d窗是否存在,如果存在,那么就不会抛出异常,继续走下一步也就是获取到d窗点击确定。

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

无法打印出元素的值(用户名密码错误)

原因是:style="display: none;" 元素不展示

修改 style的值

修改后:style=display: block;

然后就可以打印出值(用户名或密码错误)

总结:

你可以用 CSS 选择器,然后根据其属性获取。

我把你这段拷贝下来放到完整 html 规范的 body 中:

在这里 CSS 选择器能通过指定第几个孩子来选择元素 body > div:nth-child(2) > p。

import os

from selenium import webdriver

from seleniumwebdriverchromeoptions import Options

chromeOptions = Options()

brower = webdriverChrome(chrome_options = chromeOptions, executable_path = osenviron['PROGRAMFILES(X86)'] + r'\Google\Chrome\Application\chromedriverexe')

browerset_window_rect(x = 0, y = 0, width = 1920, height = 1080)

url = r'file:///C:/Users/admin/Desktop/tmp/tmphtml'

browerget(url)

element = browerfind_element_by_css_selector('body > div:nth-child(2) > input')

elementget_property('placeholder')

Out[2]: '6-16位密码,区分大小写,不能用空格'

以上就是关于Selenium-针对alertd窗无法获取,d出no such alert的解决方法全部的内容,包括:Selenium-针对alertd窗无法获取,d出no such alert的解决方法、python selenium 无法获取元素的值、selenium获取元素问题(className相同)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9303768.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存