博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
selenium点击(click)页面元素没有反应(报element not interactable)的一个案例
阅读量:5086 次
发布时间:2019-06-13

本文共 1856 字,大约阅读时间需要 6 分钟。

今天在QQ群上发现一哥们提了个问题,说是有个页面的按钮一直没法点击,用了js也没效果。

还好网站不是他们内网系统,好奇心的驱使下,点进去研究了下。
网址如下:
需求:
打开网页后,点击登录按钮,弹出登录窗口,点击【密码登录】按钮,切换到账号密码登录界面
在这里插入图片描述
切换后:
在这里插入图片描述
看起来是不是很简单,于是我直接按F12,看下是不是有iframe之类的,结果并没有,而是很容易就写出了xpath:
//div[@class=“modal-bottom”]/a[text()=‘密码登录’]
在这里插入图片描述
直接上代码:

from time import sleepfrom selenium import webdriverdriver = webdriver.Chrome()driver.maximize_window()driver.get('https://www.ningmengyun.com/')sleep(2)driver.find_element_by_id('regionNav').click()sleep(2)driver.find_element_by_xpath("//div[@class='modal-bottom']//a[text()='密码登录']").click()

运行后发现登录窗口没有任何反应,而且运行报错了……

在这里插入图片描述
难道是xpath不对?
我在代码打开的窗口里再次用F12定位下,发现class居然变了……
在这里插入图片描述
好吧,那我再改下xpath好了:

from time import sleepfrom selenium import webdriverdriver = webdriver.Chrome()driver.maximize_window()driver.get('https://www.ningmengyun.com/')sleep(2)driver.find_element_by_id('regionNav').click()sleep(2)driver.find_element_by_xpath('//a[@class="go-login" and text()="密码登录"]').click()

结果这次是没报错了,但是窗口还是没切换啊?

不会是xpath还能变第二次吧?
按F12一看,好家伙,class又变回去了……
在这里插入图片描述
然后花了一个多小时就发现每次定位都是这2个xpath之间变来变去,就是用js也是不行。
最后发现,要执行2次click(),而且这两次click()的元素xpath就是上面的两个,才能正常切换。代码如下:

from time import sleepfrom selenium import webdriverdriver = webdriver.Chrome()driver.maximize_window()driver.get('https://www.ningmengyun.com/')sleep(2)driver.find_element_by_id('regionNav').click()sleep(2)driver.find_element_by_xpath('//a[@class="go-login" and text()="密码登录"]').click()sleep(2)driver.find_element_by_xpath("//div[@class='modal-bottom']//a[text()='密码登录']").click()# 如果用js的话,也需要2次js# driver.execute_script("document.getElementsByClassName('go-login')[2].click()")# driver.execute_script("document.getElementsByClassName('modal-bottom')[0].children[0].click()")

最后虽然问题解决了,但是还是不大明白其中有啥问题。

自己打开网址操作,弹出的【密码登录】按钮的xpath和用selenium打开的页面按钮的xpath居然不一样,要先click()一次之后才会一样……难道是和onclick属性有关?
总之先把解决的办法记录下来,下次遇到类似的问题参考下了。

转载于:https://www.cnblogs.com/haiya2019/p/10627736.html

你可能感兴趣的文章
jQuery中的height()、innerheight()、outerheight()的区别总结
查看>>
Garbage Disposal(模拟垃圾装垃圾口袋)
查看>>
多线程辅助类之CountDownLatch(三)
查看>>
typedef用法
查看>>
ehlib ado 删除选中记录 的方法
查看>>
日期 时间选择器(DatePicker和TimePicker)实现用户选择
查看>>
AdapterViewFlipper功能 自动播放的图片库
查看>>
leetcode 28 Implement Strstr()
查看>>
asp.net 下OnClientClick的妙用
查看>>
es6 - 模板
查看>>
python基础-正则表达式
查看>>
实现最大索引堆
查看>>
Java equals和hashcode 的区别
查看>>
Redis 笔记与总结1 安装部署
查看>>
(转)linux route命令深入浅出与实战案例精讲
查看>>
HDU3466背包01
查看>>
POJ 2069 Super Star(计算几何の最小球包含+模拟退火)
查看>>
jdk工具keytool和jarsigner帮助Part2(jdk keytool&jarsigner tool manual)
查看>>
联想ThinkPad S3-S440虚拟机安装,ubuntu安装,Hadoop(2.7.1)详解及WordCount运行,spark集群搭建...
查看>>
Web前端面试题集锦
查看>>