Python+Selenium 如何优雅地处理出现未知次数的弹框?
问题有了变异,并最终确认是 ChromeDriver 版本不兼容的 bug,我用的版本 76.0.3809.25,同学的是 2.43.600210(正确)。(chrome 77.0.3865.120)
详情见 https://testerhome.com/topics/20940
以下解法为 ChromeDriver 版本不兼容 bug 下的解法,非常不提倡。
<script>alert(1)</script>
<script>prompt(1)</script>
<script>confirm(1)</script>
<a href="https://www.baidu.com" target="_blank">baidu</a>
以上代码中的弹框出现未知次数(0-n),要求出现若干次弹框,最后均能正确返回 driver.find_elements_by_xpath("//a") 的结果。
我的尝试 driver.execute_script('window.alert=function(str){return;};') 这样重写不能实现目标。
from selenium import webdriver
chromeOptions = webdriver.ChromeOptions()
prefs={"profile.managed_default_content_settings.popups":0}
chromeOptions.add_experimental_option('prefs',prefs)
driver = webdriver.Chrome(chrome_options=chromeOptions)
domain = 'file:///C:/Users/admin/Desktop/popups.html'
driver.get(domain)
这样配置也不能实现目标。
我的处理代码已经跟我一样炸裂,就不发了。
我知道自定义 chromium 能实现禁止弹框,但还不想中途学习 chromium 源码编译。。。
由于在有弹框的时候,在 try 下执行 links = driver.find_elements_by_xpath("//a"),会报错
selenium.common.exceptions.UnexpectedAlertPresentException: Alert Text: 1
同时弹框自动消失,若此时执行 driver.switch_to.alert.accept(),会触发不存在弹框的错误:
selenium.common.exceptions.NoAlertPresentException: Message: no such alert
所以我决定不对弹框进行操作,并不优雅的解决方案如下:
from selenium import webdriver
driver = webdriver.Chrome()
domain = 'file:///C:/Users/admin/Desktop/popups.html'
driver.get(domain)
for i in range(0,5):#允许弹框出现的次数,一直循环的直接放弃
try:
links = driver.find_elements_by_xpath("//a")
break
except Exception as e:
if 'alert' in str(e):
pass
else:
links = []
break
print(links)
欢迎能用 python 解决的大佬继续解答。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
请参考代码片段