selenium定位隐藏元素

可见截图:
输入图片说明

定位出现“Webdriver Element is not currently visible”的报错。 根据其他人的经验,需要查找元素是否中是否有隐藏属性。 发现上面代码中存在display: block;,故需要用js来模拟点击行为。

解决方案:

###1.可先查看该元素是否存在:

yes = driver.find_element_by_id("notice-confirm").is_displayed() 
print yes

返回true,说明可以元素存在。

如果返回false,有几种可能:

(1)定位不准确。换个定位方式
(2)这个元素需要hover或者悬停才会显示出来。

#定位到要悬停的元素
above =driver.find_element_by_id("xx")
#对定位到的元素执行悬停操作
ActionChains(driver).move_to_element(above).perform()

###2.使用js去点击按钮

js = "document.getElementsByTagName('button')[0].click()";
driver.execute_script(js)

详细解释如下:

js = "document.getElementsByTagName('button')[0].click()";

表示定位该元素,并点击。
可在Firefox的控制台中的对应页面执行上面的js,查看是否定位成功和点击效果。
有其他的定位方式可见,可见链接HTML DOM Document 对象

driver.execute_script(js)

表示调用这个js片段。

调用js方法使用**execute_script(script, *args)**    
 
在当前窗口/框架 同步执行javaScript    

脚本:JavaScript的执行。    

*参数:适用任何JavaScript脚本。    

使用:  
 
driver.execute_script(‘document.title’)

可见虫师教程

###3.通过javaScript修改display的值

js = 'document.querySelectorAll("select")[0].style.display="block";'
driver.execute_script(js)

sel = driver.find_element_by_tag_name('select')
Select(sel).select_by_value('opel')
document.querySelectorAll("select")[0].style.display="block":
document.querySelectorAll("select")  选择所有的select。  
[0] 指定这一组标签里的第几个。  
style.display="block";  修改样式的display="block" ,表示可见。  

执行完这句js代码后,就可以正常操作下拉框了。

其他人的解决方法:
关于元素定位的问题
Webdriver Element is not currently visible 解决方法
How to force Selenium WebDriver to click on element which is not currently visible?

有什么更好的定位方法,欢迎大神赐教

PS: js的操作一个元素的前提也是先定位它。 可以让它变成: display:block 或 display:line。再去定位操作

'var div = document.getElementsByName("select2"); div.attributes.removeNamedItem("style");'
driver.execute_script(js)

转载于:https://my.oschina.net/cym92/blog/629806

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值