对于前端隐藏元素,一直是selenium自动化定位元素的隐形杀手,脚本跑到隐藏元素时位置时报各种各样的错误,

隐藏的下拉菜单又没有办法避免,此帖只为交流隐藏元素自动化定位处理方法(3种操作)
       处理1:(修改样式)

html这种格式的:
           

处理操作:

 from selenium import webdriver
 from selenium.webdriver.support.select import Select
 import os,time

 driver = webdriver.Firefox()
 file_path = 'file:///' + os.path.abspath('test.html')
 driver.get(file_path)

 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')

 time.sleep(2)

 driver.quit()

来自虫师的解释:

document.querySelectorAll("select")[0].style.display="block";
document.querySelectorAll("select")  选择所有的select。
 [0] 指定这一组标签里的第几个。
style.display="block";  修改样式的display="block" ,表示可见。
 执行完这句js代码后,就可以正常操作下拉框了。
     
      处理2:(定位元素,修改样式)重点描述:
      调用js方法:execute_script(script, *args)
      在当前窗口/框架 同步执行JavaScript
      脚本:JavaScript的执行。
      *参数:适用任何JavaScript脚本。
      使用:driver.execute_script(‘document.title’)
     示例csdn登录框:

 #coding=utf-8
 from selenium import webdriver
 from time import sleep 

 driver = webdriver.Firefox()
 driver.get("http://www.csdn.net/")
 sleep(10)
 driver.find_element_by_link_text("登录").click()
 sleep(10) 

 #给用户名输入框标红显示
 js="var q=document.getElementById(\"username\");q.style.border=\"1px solid red\";"
 #调用js
 driver.execute_script(js)
 sleep(3) 

 driver.find_element_by_id("username").send_keys("username")
 driver.find_element_by_id("password").send_keys("password")
 driver.find_element_by_class_name("logging").click()
 sleep(3) 

 driver.quit()

JS调用解释:
        q=document.getElementById(\"username\")
         元素q的id 为username
         q.style.border=\"1px solid red\
         元素q的样式,边框为1个像素红色/
 3、隐藏元素:
   js.html

 <html>
     <head>
       <meta http-equiv="content-type" content="text/html;charset=utf-8" />
       <title>js</title>
       <script type="text/javascript" async="" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
       <link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet" />
       <script type="text/javascript">
         $(document).ready(function(){
           $('#tooltip').tooltip({"placement": "right"});
         });
       </script>
     </head>  

     <body>
       <h3>js</h3>
       <div class="row-fluid">
         <div class="span6 well">
           <a id="tooltip" href="#" data-toggle="tooltip" title=" selenium-webdriver(python)">hover to see tooltip</a>
           <a class="btn">Button</a>
         </div>
       </div>
     </body>
     <script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
   </html>

python脚本:

 #coding=utf-8
 from selenium import webdriver
 import time,os 

 driver = webdriver.Firefox()
 file_path = 'file:///' + os.path.abspath('js.html')
 driver.get(file_path)
 '''
 通过JS 隐藏选中的元素
 '''
 #第一种方法:
 driver.execute_script('$("#tooltip").fadeOut();')
 time.sleep(5) 

 #第二种方法:
 button = driver.find_element_by_class_name('btn')
 driver.execute_script('$(arguments[0]).fadeOut()',button)
 time.sleep(5)

第一种是页面上引用;
    第二种是定位到元素后使用;
    具体解释如下:
         arguments对象,它是调用对象的一个特殊属性,用来引用Arguments对象。
         Arugments对象就像数组。
         fadeOut() 方法使选中元素隐藏起来,假如该元素是可隐藏的。
         fadein()则是相反渐显得意思。
    示例场景如下:

效果展示如下:

---------------------
作者:DCclient
来源:CSDN
原文:https://blog.csdn.net/DCclient/article/details/72900261
版权声明:本文为博主原创文章,转载请附上博文链接!

js操作:selenium无法操作隐藏元素问题的更多相关文章

  1. selenium+python自动化104-如何获取隐藏元素text文本

    前言 首先 selenium 是可以定位到隐藏元素的,但是 selenium 不能跟隐藏元素交互,也就是隐藏元素element不能使用element.click()方法. 隐藏元素element.te ...

  2. selenium如何高亮某元素和操作隐藏的内容

    高亮元素的思路是: 1.找到要高亮的元素 2.对该元素执行js,更改style达到高亮效果. 操作隐藏的内容思路: 1.可以用Actions的moveToElement,使鼠标悬停在触发隐藏内容的元素 ...

  3. Python+selenium(操作隐藏元素)

    测试过程中,偶尔会碰到一些页面的隐藏元素,如下,是小编举的一个简单的例子: test.html <html> <head></head> <body> ...

  4. selenium在操作隐藏元素时会报错,怎么判断元素是隐藏的?

    首先页面元素隐藏有五种方法: 1. opacity: 0; opacity 属性的意思是设置一个元素的透明度.它不是为改变元素的边界框(bounding box)而设计的.这意味着将 opacity ...

  5. Java&Selenium调用JS实现高亮被操作页面元素高亮

    Java&Selenium调用JS实现高亮被操作页面元素高亮 /* * the method of invoking js to do something * * @author daviey ...

  6. 如何借助浏览器Console使用Js进行定位和操作元素

    在进行Selenium自动化过程中,我们很难避免一些webdriver 很难定位到的一些元素(如:默认隐藏属性元素),那对于一些比较难定位到的元素,有什么好的解决办法?     其实我们都知道,Sel ...

  7. selenium之浏览器、元素、鼠标等操作总结

    1    控制浏览器 Selenium 主要提供的是操作页面上各种元素的方法,但它也提供了操作浏览器本身的方法,比如浏览器的大小以及浏览器后退.前进按钮等. 1.1  控制浏览器窗口大小 在不同的浏览 ...

  8. GSAP JS基础教程--TweenLite操作元素的相关属性

    今天来学习用TweenLite操作元素的各种属性,以Div为例,其他元素的操作也是一样的,只是可能一些元素有它们的特殊属性,就可能不同罢了.   代码里用详细注释,我就不再重复啦,大家看代码就可以啦! ...

  9. ui自动化之selenium操作(五)简单元素操作--续

    1. 多窗口切换 有时候需要在多窗口切换,webdriver提供了switch_to_window()方法支持切换窗口: from selenium import webdriver import o ...

随机推荐

  1. PHP 5.0~5.6 各版本兼容性的 cURL 文件上传

    不同版本PHP之间cURL的区别 PHP的cURL支持通过给CURL_POSTFIELDS传递关联数组(而不是字符串)来生成multipart/form-data的POST请求. 传统上,PHP的cU ...

  2. BeanShell用法汇总(部分摘抄至网络)

    说明:本文部分资料摘抄至 来源: http://www.cnblogs.com/puresoul/p/4915350.html 来源: http://www.cnblogs.com/puresoul/ ...

  3. 一些很容易被忘记的css

    一些很偏门的css,用过一两次,很难记得牢,这里,我总结一些. outline 当input选中的时候会出现一个边框 /*一般设置成 none*/ textarea:focus, input:focu ...

  4. Win10 登陆密码不正确(安全模式仍然启动不了)

    今天朋友重启Win10后,登陆密码显示不正确,是用了很多方法都不行 然后就瞎捣鼓就进去 进入BIOS将启动模式调为USB模式 重启启动不了后 再改回系统启动 就进去了(好神奇)

  5. Node.js创建服务器和模拟客户端请求

    1. 何为服务器 服务器是某种长期运行,等待请求资源的应用程序 2. 常见Web应用架构 3. 如何创建web服务器 Web服务器是使用HTTP协议,等待客户端连接后请求资源的驻守应用程序:HTTP协 ...

  6. Python——爬虫——数据提取

    一.XML数据提取 (1)定义:XML指可扩展标记语言.标记语言,标签需要我们自行定义 (2)设计宗旨:是传输数据,而非显示数据,具有自我描述性 (3)节点关系:   父:每个元素及属性都有一个父. ...

  7. Javascript初识之流程控制、函数和内置对象

    一.JS流程控制 1. 1.if else var age = 19; if (age > 18){ console.log("成年了"); }else { console. ...

  8. 如何学习FPGA

    如何学习FPGA 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/k331922164/article/details/44626989 PS:笔者强 ...

  9. log4j 初体验

    1.Log4j简介      在应用程序中添加日志记录目的基于三个: 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作 跟踪代码运行时轨迹,作为日后审计的依据 担当集成开发环境 ...

  10. com.android.support:appcompat-v7:27.+问题解决

    新建的项目就报下面的错误,问题指向了app/build.gradle,看起来是版本兼容的问题.     解决方案: 1.查看sdk tools的版本:26.1.1   远程依赖包是27.+,而我们的s ...