1.首先你要安装selenium库啦

pip install selenium

2.selenium查找元素就八种方法

from selenium import webdriver

driver=webdriver.Chrome()

#说明find_elements_by 多了一个s,返回的就是一个列表形式

1) driver.find_element_by_id()     

#传入元素标签对里面的id数据    driver.find_element_by_id("kw")

2) driver.find_element_by_name()   

#传入元素标签对里面的name数据    driver.find_element_by_name("wd")

3)driver.find_element_by_class_name()    

#传入元素标签对里面class的名称    driver.find_element_by_class_name("s_ipt")

4) driver.find_elements_by_link_text()   

#传入元素标签对a里面的文本数据    driver.find_elements_by_link_text("hao123")

5) driver.find_element_by_partial_link_text()     

#传入元素标签对a里面的部分文本数据    driver.find_element_by_partial_link_text("hao")

6) driver.find_element_by_tag_name() 

#传入元素标签对的标签名    driver.find_element_by_tag_name("a")

7) driver.find_element_by_xpath()    #格式://+标签名+[@属性(例如,id,name,class)="属性对应的值"]

一.以普通元素定位

driver.find_element_by_xpath(‘//a[@name="tj_trnews"]’)    #定位新闻

二.以text()进行元素定位

driver.find_element_by_xpath(‘//a[text()="新闻"]’)       #定位新闻      //为固定格式,a为标签名,text()取标签对中间的文本

三.以contains()进行元素定位

driver.find_element_by_xpath(‘//a[contains(text(),"hao")]’)  #定位hao123  //为固定格式,a为标签名,text()取标签对中间的文本,contains为匹配部分数据

四.以or ,and 辅助定位,有时候一个属性定位不了,那么可以用or,and辅助一起定位    #格式:     //+标签名+[@属性(例如,id,name,class)="属性对应的值" and或or @属性(例如,id,name,class)="属性对应的值"]

driver.find_element_by_xpath('//a[@name="tj_briicon" and @class="bri"]')    #定位更多产品

五.轴定位,parent(父亲),ancestor(祖先,包括父亲),perceding-sibling(当前元素节点标签之前的所有兄弟结点),following-sibling(当前元素节点标签之后的所有兄弟结点)    #格式://+标签名+[@属性(例如,id,name,class)="属性对应的值"]+/+轴定位+::+标签名

1)定位父亲

driver.find_element_by_xpath('//a[@name="tj_briicon"]/parent::div[@id="u1"]')    #定位更多产品的父亲那么就是u1

2)定位祖先

driver.find_element_by_xpath('//a[@name="tj_briicon"]/ancestor::div')    #定位更多产品的祖先有4个,包括父亲

3)perceding-sibling(当前元素节点标签之前的所有兄弟结点)

driver.find_element_by_xpath(‘//a[@name="tj_briicon"]/preceding-sibling::a[@name="tj_settingicon"]’)    #定位更多产品前面的兄弟节点设置,如果不写[@name="tj_settingicon"],那么会出现8个兄弟节点

4)following-sibling(当前元素节点标签之后的所有兄弟结点)

driver.find_element_by_xpath('//a[@name="tj_trnews"]/following-sibling::a[@name="tj_trhao123"]')    #定位新闻后面的兄弟节点hao123,如果不写[@name="tj_trhao123"],那么会出现8个兄弟节点

8) driver.find_element_by_css_selector() 

一.以ID进行元素定位

#号表示通过id属性来定位元素

driver.find_element_by_css_selector("#kw")

二.以class属性定位元素

.号表示通过class属性来定位元素

driver.find_element_by_css_selector(".s_ipt")

三.以元素属性定位元素(常用)

driver.find_element_by_css_selector(‘[name=“wd”]‘)

driver.find_element_by_css_selector(‘[maxlength=“100”]‘)

~号表示匹配部分属性值

属性值包含s_btn:适用于由空格分隔的属性值。

driver.find_element_by_css_selector(‘[class~="s_btn”]‘)

四.以父子定位元素

查找有父级元素的标签名为span,它的所有标签名叫input的子元素

driver.find_element_by_css_selector("span>input")

五.以组合定位元素

标签名#id属性值:指的是该input标签下id属性为kw的元素

driver.find_element_by_css_selector("input#kw")

标签名.class属性值:指的是该input标签下class属性为s_ipt的元素

driver.find_element_by_css_selector("input.s_ipt")

标签名[属性=’属性值‘]:指的是该input标签下name属性为wd的元素

driver.find_element_by_css_selector(‘input[name=“wd”]‘)

父级元素标签名>标签名.class属性值:指的是span下的input标签下class属性为s_ipt的元素

find_element_by_css_selector("span>input.s_ipt")

多个属性组合定位元素(常用)

指的是input标签下id属性为kw且name属性为wd的元素

driver.find_element_by_css_selector(‘input.s_ipt[name=“wd”]‘)

指的是input标签下name属性为wd且maxlength为100的元素

driver.find_element_by_css_selector(‘input[name=“wd“][maxlength=“100“]‘)

3.查找元素返回WebElement对象背后的属性(以id为例子)

1)返回元素属性值

 ele=driver.find_element_by_id("kw").get_attribute("class")
print(ele)
结果:s_ipt

2)返回元素属性值,但是该方法只能获取元素中id或name的属性值,其他的都不能获取

 ele=driver.find_element_by_id("kw").get_property("id")
print(ele)
ele1=driver.find_element_by_class_name("s_ipt").get_property("id")
print(ele1)
ele2=driver.find_element_by_id("kw").get_property("name")
print(ele2)
ele3=driver.find_element_by_class_name("s_ipt").get_property("name")
print(ele3)
ele4=driver.find_element_by_class_name("s_ipt").get_property("class") #这种是不行的返回None
print(ele4)
结果:

kw
kw
wd
wd
None

property是DOM中的属性,是JavaScript里的对象;attribute是HTML标签上的特性,它的值只能够是字符串;

3)返回内部存储id,这个属性用于判断两个webelements是否引用同个元素

 ele=driver.find_element_by_id("kw").id
print(ele)
ele1=driver.find_element_by_name("wd").id
print(ele1)
结果:因为都是引用同一个标签对里面的数据所以id肯定一样

0.822772467010251-1
0.822772467010251-1

4)返回标签对的名称

 ele=driver.find_element_by_id("kw").tag_name
print(ele)
结果:input

5)判断元素是否可见(返回bool值)

 ele=driver.find_element_by_id("kw").is_displayed()
print(ele)
结果:True

6)判断元素是否被选中(一般用于单选框或者复选框)

 from  selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
ele=driver.find_element_by_xpath('//a[@name="tj_login"]/following-sibling::a[text()="设置"]')
ActionChains(driver).move_to_element(ele).perform()
driver.find_element_by_class_name("setpref").click()
time.sleep(3)
a=driver.find_element_by_id("sh_2").is_selected()
print(a)
driver.quit()
结果:True

7)判断元素是否存在HTML上(is_displayed()本身这个函数用于判断某个元素是否存在页面上(这里的存在不是肉眼看到的存在,而是html代码的存在,很少用到)

 from selenium import webdriver
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
a=driver.find_element_by_id('su').is_displayed()
print(a)
driver.quit()
结果:True

selenium 元素查找与属性的更多相关文章

  1. Selenium 元素查找

    1.尽量使用ID或者name去定位元素,如果这个元素没有ID或者Name,那么就是用它最近的父节点的ID或者Name去定位. 2.写自动化脚本不是一个人的事情,是一个团队的事情,合作能更好,更轻松得完 ...

  2. Selenium webdriver 查找元素

    1.简单查找 By ID: WebElement element=driver.findElement(By.id("userId")); By Name:WebElement e ...

  3. selenium 获取某元素的 某属性 的值

    selenium  获取某元素的 某属性的值 1 先通过元素定位,获得此元素的 WebElement; WebElement   yuansu = driver.findElement(By.clas ...

  4. 史上最全!Selenium元素定位的30种方式

    Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准去抓取到对应元素才能进行后续的自动化控制,我在这里将对各种元素定位方式进行总结归纳一下. 这里将统一使用百度 ...

  5. Selenium3 + Python3自动化测试系列二——selenium元素定位

    一.selenium元素定位 Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准去抓取到对应元素 才能进行后续的自动化控制,我在这里将对selenium8种元 ...

  6. WebDriver元素查找方法摘录与总结

    WebDriver元素查找方法摘录与总结 整理By:果冻迪迪 selenium-webdriver提供了强大的元素定位方法,支持以下三种方法. • 单个对象的定位方法 • 多个对象的定位方法 • 层级 ...

  7. python+selenium元素定位——8种方法

    定位元素,selenium提供了8中元素定位方法: (1)find_element_by_id() :html规定,id在html中必须是唯一的,有点类似于身份证号 (2)find_element_b ...

  8. selenium元素定位陷阱规避

    为什么selenium可以在各个浏览器上运行?因为selenium在与各个浏览器驱动执行前,会先把脚本转化成webdriver, webdriver wire协议(一种json格式的协议),这样就与脚 ...

  9. UI自动化学习笔记- Selenium元素定位及元素操作

    一.元素定位 1. 如何进行元素定位? 元素定位就是通过元素的信息或元素层级结构来定位元素的 2.定位工具 浏览器开发者工具 3.元素定位方式 Selenium提供了八种定位元素方式 id name ...

随机推荐

  1. 第三十八篇 入门机器学习——Numpy.array的基本操作——查看向量或矩阵

    No.1. 初始化状态 No.2. 通过ndim来查看数组维数,向量是一维数组,矩阵是二维数组 No.3. 通过shape来查看向量中元素的个数或矩阵中的行列数 No.4. 通过size来查看数组中的 ...

  2. 数据库too many connections 解决方法

    问题:网站后台突然报错了,显示“too many connections........”这是咋回事? 解决: 先罗列几个有用的操作: ① mysql -u root -p  回车输入密码进入mysq ...

  3. bzoj3744: Gty的妹子序列 (BIT && 分块)

    强制在线的区间询问逆序对数 如果不是强制在线 就是可以用莫队乱搞啦 强制在线的话 用f[i][j]记录第i块到第j个点之间的逆序对数 用s[i][j]记录前i块中小于等于j的数字个数 离散化一下 BI ...

  4. nodejs后台运行的方法

    nohup node ***.js & 这种方法可以,但存在你无法查询日志等问题 在SSH里另一个有效的方法是screen命令. [转]http://www.9usb.net/201002/l ...

  5. BLUE引擎检查放入装备的名称全名脚本

    格式:CHECKDLGITEMNAME 名称 检查条件需要配合QUERYITEMDLG命令 ;========================================== [@main]#AC ...

  6. python-excel读取-pyodbc

    https://github.com/mkleehammer/pyodbc/wiki/Cursor 利用pyodbc读取数据库,流程基本一样,就是配置connect对象时有所不同,下面是excel的: ...

  7. TCP的状态转换

    TCP的状态转换图 手写的状态转换图 一.服务端状态变迁:​ 服务端创建套接字之后调用listen函数将套接字有一个未连接的主动套接字转换为被动套接字,指示内核应接受指向该套接字的连接请求,套接字状态 ...

  8. ASP.NET的 Razor引擎和JavaScript是一种什么关系

    Razor能做的JS大部分能做,不是全部.比如说,如果你用了Entity Frame一类的ORM的时候,Razor可以直接绑定数据库数据,但JS就不可能直接访问数据库——必须通过其他web servi ...

  9. php截取富文本框中的固定长度的字符

    ai,哎怎么赶脚自己写东西越来越小儿科了呢,现在连这个问题都找了好半天 因为后台是的内容是富文本编辑器编辑的,前台我傻逼的直接截取了字符串,然后样式啥的都乱了,找了半天是因为富文本的问题 其实解决办法 ...

  10. js实现图片选中马上显示功能,选择后可以预览,即选即显

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...