例子是使用了selenium3.7.0 , python 3.6.2  , 火狐57版本

以下是例子的源码:

<!DOCTYPE html><!-- <html> -->
<!-- <body> -->
<!-- <div class="back-f5f5ff padding-top-20 padding-bottom-60"> -->
<!-- <div class="login-right login-style" id="login-container"> -->
<!-- <p class="font18">登录输入框</p> --> <!-- <form id="login-form-confirm" style="display:none;"> -->
<!-- <input type="hidden" name="lt" > -->
<!-- <div class="form-group"> -->
<!-- <div class="input-group"> -->
<!-- <div class="input-group-addon"><i class="fa fa-user font18 width-20"></i></div> -->
<!-- <input type="text" readonly="readonly" autocomplete="off" name="username" id="username" class="form-control input-lg required" value="" placeholder="请输入您的账号"> -->
<!-- </div> -->
<!-- </div> -->
<!-- <div class="form-group"> -->
<!-- <div class="input-group"> -->
<!-- <div class="input-group-addon"><i class="fa fa-lock font18 width-20"></i></div> -->
<!-- <input type="hidden" readonly="readonly" data-security="false" autocomplete="off" name="password" id="password" class="form-control input-lg required" value="" placeholder="请输入登录密码"> -->
<!-- <input type="password" readonly="readonly" data-security="false" autocomplete="off" name="passwordTemp" id="passwordTemp" class="form-control input-lg " value="********"> -->
<!-- </div> -->
<!-- </div> --> <!-- </form> --> <!-- <form id="login-form" > -->
<!-- <input type="hidden" name="lt" > -->
<!-- <div class="form-group"> -->
<!-- <div class="input-group"> -->
<!-- <div class="input-group-addon"><i class="fa fa-user font18 width-20"></i></div> -->
<!-- <input type="text" autocomplete="off" name="username" id="username" class="form-control input-lg required" value="" placeholder="请输入您的账号"> -->
<!-- </div> -->
<!-- </div> -->
<!-- <div class="form-group"> -->
<!-- <div class="input-group"> -->
<!-- <div class="input-group-addon"><i class="fa fa-lock font18 width-20"></i></div> -->
<!-- <input type="password" autocomplete="off" name="password" data-security="false" id="password" class="form-control input-lg required" value="" placeholder="请输入登录密码"> -->
<!-- </div> -->
<!-- </div> -->
<!-- </form> -->
<!-- </div> -->
<!-- </div> -->
<!-- </body> -->
<!-- </html> -->

当我们使用browser.find_element_by_css_selector()指令去找到元素体时,并进行输入操作时出现错误并提示说元素不可见

selenium.common.exceptions.ElementNotInteractableException: Message: Element is not visible

from selenium import  webdriver

class demo:
def __init__(self):
import os
# 实现全局变量的引用
firefoxBin = os.path.abspath(r"E:\Program Files\Mozilla Firefox\firefox.exe")
os.environ["webdriver.firefox.bin"] = firefoxBin # 代码加载火狐驱动
firefoxgeckobdriver = os.path.abspath(r"E:\drivers\Drivers\geckodriver64.exe") self.browser = webdriver.Firefox(executable_path=firefoxgeckobdriver)
self.browser.maximize_window()
self.browser.implicitly_wait(10) self.browser.get("file:///C:/Users/70486/Desktop/demo.html") if __name__ == '__main__':
case = demo()
user = case.browser.find_element_by_css_selector('#username')
print(user)
user.send_keys('username')

一般出现这类原因的情况有:(个人思路而已)

1.元素在from中。需要我们进入from之后在进行操作

2.元素还没有加载出来就进行操作了

3.元素不在当前页面需要上拉或者下拉才能出现

发现这次错误并不属于这三类情况。

后面发现该代码有2对账号密码的输入框,其中前面那对被隐藏了(style="display:none)。无法从界面上看到,

但实际是存在页面的。

遇到不可见的元素时我们可以通过JavaScript来改变style属性让其显示出来。

如果这么做了页面就出现了两对输入框了,不符合要求。

换了一种寻找的方式来找到下面那对显示的输入框,通过browser.find_elements_by_css_selector()

if __name__ == '__main__':
case = demo()
user = case.browser.find_elements_by_css_selector('#username')
print(len(user))
for size in user:
print(size)

打印的日志:

找到了那我们就通过user[1]来对齐输入。。

user[0]表示第一个,user[1]表示第二个。从0开始计算

if __name__ == '__main__':
case = demo()
user = case.browser.find_elements_by_css_selector('#username')
user[1].send_keys('username')

运行的效果

密码输入框也是通过这个思路进行输入的。

多实践多操作。

id和class重名的会很多。寻找方式也很多这里只是提供一个思路。

selenium中同名的class如何区分的更多相关文章

  1. 『心善渊』Selenium3.0基础 — 6、Selenium中使用XPath定位元素

    目录 1.Selenium中使用XPath查找元素 (1)XPath通过id,name,class属性定位 (2)XPath通过标签中的其他属性定位 (3)XPath层级定位 (4)XPath索引定位 ...

  2. Selenium中的几种等待方式,需特别注意implicitlyWait的用法

    摘:http://blog.csdn.net/pf20050904/article/details/20052485 最近在项目过程中使用selenium 判断元素是否存在的时候 遇到一个很坑爹的问题 ...

  3. selenium中处理不带ID的弹出窗口

    在selenium中虽然有selectWindow(String windowID) 方法,但是对于一些窗口很难取得其window ID的话,如果开发人员没有在html代码中提供ID ,或者getAl ...

  4. 转:Selenium中的几种等待方式,需特别注意implicitlyWait的用法

    最近在项目过程中使用selenium 判断元素是否存在的时候 遇到一个很坑爹的问题, 用以下方法执行的时候每次都会等待很长一段时间,原因是因为对selenium实现方法了解不足导致一直找不到解决方法. ...

  5. Selenium中三种等待的使用方式---规避网络延迟、代码不稳定问题

    在UI自动化测试中,必然会遇到环境不稳定,网络慢的情况,这时如果你不做任何处理的话,代码会由于没有找到元素,而报错.这时我们就要用到wait(等待),而在Selenium中,我们可以用到一共三种等待, ...

  6. Python selenium中注入并执行Javascript语句

    众所周知,Python通常结合selenium模块来完成一些web的自动化测试以及RPA(Robotic Process Automation)工作.事实上,Selenium还可以支持插入js语句.执 ...

  7. 【Selenium】selenium中隐藏元素如何定位?

    前言 面试题:selenium 中隐藏元素如何定位?这个是很多面试官喜欢问的一个题,如果单纯的定位的话,隐藏元素和普通不隐藏元素定位没啥区别,用正常定位方法就行了 但是吧~~~很多面试官自己都搞不清楚 ...

  8. 【基础】selenium中元素定位的常用方法(三)

    一.Selenium中元素定位共有八种 id name className tagName linkText partialLinkText xpath cssSelector 其中前六种都比较简单, ...

  9. 将DataRow赋值给model中同名属性

    /// <summary> /// 将DataRow赋值给model中同名属性 /// </summary> /// <typeparam name="T&qu ...

随机推荐

  1. spring mvc dispatcherServlet

    1. 在web.xml中配置servlet对相应的url请求进行处理 <servlet> <servlet-name>springDispatcher</servlet- ...

  2. msp430项目编程02

    msp430中项目---液晶1602显示 1.液晶1602工作原理 2.电路原理说明 3.代码(静态显示) 4.代码(动态显示) 5.项目总结 msp430项目编程 msp430入门学习

  3. linux awk常用命令【转载】

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  4. Git学习之常见错误 git push 失败

    Git学习之常见错误 git push 失败 问题描述: git push Counting objects: , done. Delta compression using up to thread ...

  5. Spring中基于AOP的XML架构

    以下内容引用自http://wiki.jikexueyuan.com/project/spring/aop-with-spring-framenwork/xml-schema-based-aop-wi ...

  6. 关于MySQL的boolean和tinyint(1)

    原文:http://blog.csdn.net/woshixuye/article/details/7089508 MySQL保存boolean值时用1代表TRUE,0代表FALSE.boolean在 ...

  7. Defcon 23最新开源工具NetRipper代码分析与利用

    0×01 研究背景 在分析了俄罗斯人被曝光的几个银行木马的源码后,发现其大多均存在通过劫持浏览器数据包来获取用户个人信息的模块,通过截获浏览器内存中加密前或解密后的数据包来得到数据包的明文数据.在De ...

  8. Centos7 Samba 独立账户

    创建了一个组:smbgrp 和用户srijan通过认证来访问Samba服务器. groupadd smbgrp useradd srijan -G smbgrp smbpasswd -a srijan ...

  9. swiper插件制作轮播图swiper2.x和3.x区别

    swiper3.x仅仅兼容到ie10+.比較适合移动端. swiper3.x官网  http://www.swiper.com.cn/ swiper2.x能够兼容到ie7+.官网是http://swi ...

  10. 【Mongodb教程 第十一课 】MongoDB 聚合

    聚合操作过程中的数据记录和计算结果返回.聚合操作分组值从多个文档,并可以执行各种操作,分组数据返回单个结果.在SQL COUNT(*)和group by 相当于MongoDB的聚集. aggregat ...