python Selenium初学记录 弹窗处理 no such alert

本意是想写一个自动领取dnf每日签到奖励的小脚本,实际上是功能是已经实现了,可以领取奖励了。

但是我后续想要提取领完奖励后弹窗的文本,直接浏览器里复制xpath,提取不出来。

//*[@id="showAlertContent"]

我就以为是遇到了类似iframe的情况,需要先特殊处理,搜索了一下,发现了关于alert的处理

driver.switch_to.alert()

 

然而报错了,于是又去找no such alert的相关问题,alert还未加载出来导致报错,增加延迟就能解决。然而我尝试了一下,还是报错。

我又去找了下别的带有alert的网页,写了个简单的网页以及程序去跑,发现是能成功的

<html>
<head>
<script type="text/javascript">
function display_alert()
  {
  alert("I am an alert box!!")
  }
</script>
</head>
<body>

<input type="button" onclick="display_alert()"
value="Display alert box" />

</body>
</html>
from selenium import webdriver
driver = webdriver.Edge()
driver.get('file:///C:/Users/A/Desktop/10.html')
driver.find_element_by_xpath('/html/body/input').click()
print(driver.switch_to.alert.text)

我仔细对比了一下dnf网页以及作为例子的网页,发现这两者的弹窗是有差别的,dnf的弹窗存在时,我还可以对网页进行下拉等操作,但是简单例子的弹窗存在时,我只能先关闭弹窗再对网页进行操作。

排除了alert的问题,绕了一圈,我又绕回来了。因为弹窗的提示信息是在执行了js之后才出现的,而弹窗提示下的‘确认’二字是一直存在的,于是我尝试修改xpath去提取,一开始想着节省时间,注释掉了中间登陆的代码, 直接去提取确认,发现没提取出来。然后取消注释之后又能提取出来了。

driver = webdriver.Edge()
driver.get('https://dnf.qq.com/lbact/a20210617comic/index.html')
# #登陆账号
# login_2=driver.find_element_by_xpath('//*[@id="dologin"]')
# driver.execute_script("arguments[0].click();",login_2)
# driver.switch_to.frame('loginIframe')
# qq=driver.find_element_by_xpath('//*[@id="img_out_xxxxxx"]')  #xxxxx为qq号
# webdriver.ActionChains(driver).move_to_element(qq).click(qq).perform()
# # driver.switch_to_default_content()#释放frame
# driver.switch_to.parent_frame()#返回父集  也能释放iframe
# a=driver.find_element_by_xpath('//*[@id="Hold_774826"]')
# time.sleep(2)
# driver.execute_script("arguments[0].click();",a)
# time.sleep(1)
a=driver.find_element_by_xpath('//*[@id="showAlert"]/div/a')
print(a.text)

我继续修改xpath,改成了 //*[@id="showAlert"]/div/p,然后就能成功提取出弹窗的文本了。

总结:

1.弹窗与弹窗不能一概而论,得具体问题具体分析。

2.未登录状态下,未能提取到‘确认’,隐藏元素无法直接获取

3.所以为什么//*[@id="showAlertContent"]不能提取到弹窗的文本呢?我还是没想明白

第一次发帖,虽然没什么技术含量,但也算记录我学习的一个过程了

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值