『心善渊』Selenium3.0基础 — 8、使用CSS选择器定位元素
1、CSS选择器介绍
CSS(Cascading Style Sheets
)是一种语言,它被用来描述HTML 和XML 文档的表现。CSS 使用选择器来为页面元素绑定CSS属性。这些选择器可以被Selenium 用作另外的定位策略。
by_css_selector
通过CSS选择器查找元素,这种元素定位方式跟by_xpath
比较类似,Selenium官网的Document里极力推荐使用CSS locator
,而不是XPath来定位元素。原因是CSS locator
比XPath locator
速度快,特别是在IE下,CSS locator
比XPath更高效更准确更易编写,对各种浏览器支持也很好。
2、CSS选择器定位语法
(1)单数定位,获得一个指定元素对象
driver.find_element_by_css_selector(“css选择器定位策略”)
(2)复数定位,获得指定元素结果集列表
driver.find_elements_by_css_selector(“css选择器定位策略”)
3、Selenium中使用CSS选择器定位元素
(1)通过属性定位元素
CSS选择器可以通过元素的id
、class
、标签这三个常规属性直接定位到目标元素。
页面中代码如下:
<input type="telA" name="telA" id="telA" placeholder="电话A" class="telA" value="">
需求:使用CSS选择器通过id
,class
和其他属性,定位页面中的电话A<input>
标签。
"""
1.学习目标:
必须掌握selenium中css定位方法
2.语法
2.1 在selenium中语法
(1)driver.find_element_by_css_selector("css选择器定位策略")
(2)driver.find_elements_by_css_selector("css选择器定位策略")
2.2 css表达式写法
(1)#表示id属性
#id属性值 例如: #telA
(2).表示class属性
.class属性值 例如: .telA
(3)其他属性
[属性名=属性值] 例如: [name=telA]
3.需求
在页面中,使用css定位电话A输入框
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
import os
# 2.打开浏览器
driver = webdriver.Chrome()
# 3.打开页面
url = "file:///" + os.path.abspath("./练习页面/注册A.html")
driver.get(url)
# 4.定位电话A标签,使用css selector
# 4.1 通过id定位
telA_1 = driver.find_element_by_css_selector("#telA")
print(telA_1.get_attribute("outerHTML"))
# 4.2 通过class属性定位
telA_2 = driver.find_element_by_css_selector(".telA")
print(telA_2.get_attribute("outerHTML"))
# 4.3 通过其他属性定位
telA_3 = driver.find_element_by_css_selector("[name='telA']")
print(telA_3.get_attribute("outerHTML"))
# 5.关闭浏览器
sleep(2)
driver.quit()
"""
输出结果:
<input type="telA" name="telA" id="telA" placeholder="电话A" class="telA" value="">
<input type="telA" name="telA" id="telA" placeholder="电话A" class="telA" value="">
<input type="telA" name="telA" id="telA" placeholder="电话A" class="telA" value="">
"""
(2)通过标签定位元素
CSS选择器也可以通过标签与属性的组合来定位元素。
在页面中有如下代码:
<input type="telA" name="telA" id="telA" placeholder="电话A" class="telA" value="">
需求:使用CSS选择器通过标签+属性定位页面中的电话A<input>
标签。
"""
1.学习目标:
必须掌握selenium中css定位方法
2.语法
2.1 在selenium中语法
(1)driver.find_element_by_css_selector("css选择器定位策略")
(2)driver.find_elements_by_css_selector("css选择器定位策略")
2.2 css表达式写法
标签+属性
格式:标签名[属性名=属性值]
3.需求
在页面中,使用css定位电话A输入框
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
import os
# 2.打开浏览器
driver = webdriver.Chrome()
# 3.打开页面
url = "file:///" + os.path.abspath("./练习页面/注册A.html")
driver.get(url)
# 4.定位电话A标签,使用css selector
# 标签+属性
# 通过name属性
telA = driver.find_element_by_css_selector("input[name='telA']")
# 通过id属性
telA_1 = driver.find_element_by_css_selector("input#telA")
print(telA.get_attribute("outerHTML"))
print(telA_1.get_attribute("outerHTML"))
# 5.关闭浏览器
sleep(2)
driver.quit()
"""
输出结果:
<input type="telA" name="telA" id="telA" placeholder="电话A" class="telA" value="">
<input type="telA" name="telA" id="telA" placeholder="电话A" class="telA" value="">
"""
(3)通过层级关系定位元素
在前面XPath中讲到层级关系定位,这里CSS选择器也可以达到同样的效果。
在页面中有如下代码:
<p id="p1">
<label for="userA">账号A</label>
<input type="textA" name="userA" id="userA" placeholder="账号A" required="" value=""> </p>
需求:使用CSS选择器通过层级定位的方式,定位页面中的账号A<input>
标签。
"""
1.学习目标:
必须掌握selenium中css定位方法
2.语法
2.1 在selenium中语法
(1)driver.find_element_by_css_selector("css选择器定位策略")
(2)driver.find_elements_by_css_selector("css选择器定位策略")
2.2 css表达式写法
层级定位 需要使用 > 或 空格表示层级关系
格式:父标签名[父标签属性名=属性值]>子标签名
3.需求
在页面中,使用css定位账号A输入框
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
import os
# 2.打开浏览器
driver = webdriver.Chrome()
# 3.打开页面
url = "file:///" + os.path.abspath("./练习页面/注册A.html")
driver.get(url)
# 4.定位账号A标签,使用css selector层级定位
textA_1 = driver.find_element_by_css_selector("p#p1 input")
print(textA_1.get_attribute("outerHTML"))
# 5.关闭浏览器
sleep(2)
driver.quit()
"""
输出结果:
<input type="textA" name="userA" id="userA" placeholder="账号A" required="" value="">
"""
(4)通过索引定位元素
语法格式:
- 表示父标签下所有子标签顺序
父标签[父标签属性名=父标签属性值]>:nth-child(索引值)
- 表示父标签下具体标签的第几个标签
父标签[父标签属性名=父标签属性值]>子标签:nth-of-type(索引值)
在页面中有如下代码:
<div id="zc">
<fieldset>
<legend>注册用户A</legend>
<p id="p1">
<label for="userA">账号A</label>
<input type="textA" name="userA" id="userA" placeholder="账号A" required="" value="">
</p>
<p>
<label for="password">密码A</label>
<input type="password" name="passwordA" id="passwordA" placeholder="密码A" value="">
</p>
</fieldset>
</div>
需求:使用CSS选择器通过层级定位的方式,定位页面中的账号A<input>
标签。
"""
1.学习目标:
必须掌握selenium中css定位方法
2.语法
2.1 在selenium中语法
(1)driver.find_element_by_css_selector("css选择器定位策略")
(2)driver.find_elements_by_css_selector("css选择器定位策略")
2.2 css表达式写法
索引定位
(1)父标签名[父标签属性名=属性值]>:nth-child(索引值)
从父标签下所有标签开始计算
(2)父标签名[父标签属性名=属性值]>子标签名:nth-of-type(索引值)
表示父标签下具体标签的第几个标签
3.需求
在页面中,使用css定位账号A输入框
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
import os
# 2.打开浏览器
driver = webdriver.Chrome()
# 3.打开注册A页面
url = "file:///" + os.path.abspath("./练习页面/注册A.html")
driver.get(url)
# 4. 使用css索引定位账号A输入框
textA_1 = driver.find_element_by_css_selector("fieldset>:nth-child(2)>input")
textA_2 = driver.find_element_by_css_selector("fieldset>p:nth-of-type(1)>input")
print(textA_1.get_attribute("outerHTML"))
print(textA_2.get_attribute("outerHTML"))
# 5.关闭浏览器
sleep(2)
driver.quit()
"""
输出结果:
<input type="textA" name="userA" id="userA" placeholder="账号A" required="" value="">
<input type="textA" name="userA" id="userA" placeholder="账号A" required="" value="">
"""
(5)通过逻辑运算定位元素
CSS选择器同样也可以实现逻辑运算,同时匹配两个属性,这里跟XPath不一样,无需写and关键字。
在页面中有如下代码
<input type="telA" name="telA" id="telA" placeholder="电话A" class="telA" value="">
需求:使用CSS选择器通过逻辑运算定位的方式,定位页面中的电话A<input>
标签。
"""
1.学习目标:
必须掌握selenium中css定位方法
2.语法
2.1 在selenium中语法
(1)driver.find_element_by_css_selector("css选择器定位策略")
(2)driver.find_elements_by_css_selector("css选择器定位策略")
2.2 css表达式写法
逻辑定位
格式:标签名[属性名1=属性值1][属性名2=属性值2]...
注意:属性与属性之间不能用空格
3.需求
在页面中,使用css定位电话A输入框
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
import os
# 2.打开浏览器
driver = webdriver.Chrome()
# 3.打开注册A页面
url = "file:///" + os.path.abspath("./练习页面/注册A.html")
driver.get(url)
# 4. 使用css逻辑定位---电话A输入框
# 注意:两个属性之间不能加空格,空格表示层级关系
telA = driver.find_element_by_css_selector("input[type='telA'][placeholder='电话A']")
print(telA.get_attribute("outerHTML"))
# 5.关闭浏览器
sleep(2)
driver.quit()
"""
输出结果:
<input type="telA" name="telA" id="telA" placeholder="电话A" class="telA" value="">
"""
(6)通过模糊匹配定位元素
css_selector
有三种模糊匹配方式:
^
:匹配到id
属性值的头部,如ctrl_12
driver.find_element_by_css_selector("input[id^='ctrl']")
$
:匹配到id
属性值的尾部,如a_ctrl
driver.find_element_by_css_selector("input[id$='ctrl']")
*
:匹配到id
属性值的中间,如1_ctrl_12
driver.find_element_by_css_selector("input[id*='ctrl']")
在页面中有如下代码:
<button type="submitA" value="注册A" title="加入会员A">注册用户A</button>
需求:在页面中,使用CSS选择器定位注册用户A按钮
"""
1.学习目标:
必须掌握selenium中css定位方法
2.语法
2.1 在selenium中语法
(1)driver.find_element_by_css_selector("css选择器定位策略")
(2)driver.find_elements_by_css_selector("css选择器定位策略")
2.2 css表达式写法
模糊匹配:匹配属性值
(1)* :匹配所有
(2)^ :匹配开头
(3)$ :匹配结尾
3.需求
在页面中,使用css定位注册用户A按钮
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
import os
# 2.打开浏览器
driver = webdriver.Chrome()
# 3.打开注册A页面
url = "file:///" + os.path.abspath("./练习页面/注册A.html")
driver.get(url)
# 4. 使用css模糊匹配定位---注册用户A按钮
button_1 = driver.find_element_by_css_selector("button[type^='su']")
print(button_1.get_attribute("outerHTML"))
button_2 = driver.find_element_by_css_selector("button[value$='册A']")
print(button_2.get_attribute("outerHTML"))
button_3 = driver.find_element_by_css_selector("button[title*='入会']")
print(button_3.get_attribute("outerHTML"))
# 5.关闭浏览器
sleep(2)
driver.quit()
"""
输出结果:
<button type="submitA" value="注册A" title="加入会员A">注册用户A</button>
<button type="submitA" value="注册A" title="加入会员A">注册用户A</button>
<button type="submitA" value="注册A" title="加入会员A">注册用户A</button>
"""
4、总结:
这里指做了一些最常用的css_selector
定位方式的练习。
如果在工作中有需要用到一些特别的用法,可以查看css_selector
的文档。
CSS选择器的文档地址:https://www.w3school.com.cn/cssref/css_selectors.asp
『心善渊』Selenium3.0基础 — 8、使用CSS选择器定位元素的更多相关文章
- 『心善渊』Selenium3.0基础 — 10、使用Seleniun定位页面元素归纳总结(超详细)
目录 1.Selenium中8种基本元素定位方式 (1)单数形式 (2)复数形式 2.By类定位的8种定位方式 (1)单数形式 (2)复数形式 3.XPath定位总结 (1)基础定位语法 (2)属性定 ...
- 『心善渊』Selenium3.0基础 — 7、XPath轴定位详解
目录 1.XPath轴定位介绍 2.位置路径表达式概念 3.步的路径表达式范例 4.练习 使用XPath轴方式,可根据文档中元素的相对位置,来进行元素的定位.例如:先找到一个相对好定位的元素,在根据与 ...
- 『心善渊』Selenium3.0基础 — 24、Selenium的expected_conditions模块详细介绍
目录 1.EC模块介绍 2.EC模块常用类 3.EC模块的使用 4.EC模块综合使用 (1)title_is(title)示例 (2)presence_of_element_located(locat ...
- 『心善渊』Selenium3.0基础 — 11、Selenium对元素常用操作
目录 1.Selenium对元素常用操作 2.Selenium对元素的其他操作 1.Selenium对元素常用操作 操作 说明 click() 单击元素 send_keys() 模拟输入 clear( ...
- 『心善渊』Selenium3.0基础 — 12、Selenium操作鼠标和键盘事件
目录 (一)对鼠标的操作 1.鼠标事件介绍 2.ActionChains 类鼠标操作的常用方法 3.perform()方法 4.鼠标事件操作步骤 5.示例 (1)右键单击.左键双击 (2)鼠标拖拽动作 ...
- 『心善渊』Selenium3.0基础 — 1、Selenium自动化测试框架介绍
目录 1.Selenium介绍 2.Selenium的特点 3.Selenium版本说明 4.拓展:WebDriver与Selenium RC的区别 5.Webdriver工作原理 1.Seleniu ...
- 『心善渊』Selenium3.0基础 — 4、Selenium基础元素定位详解
目录 1.什么是元素定位 2.Selenium元素定位常用API (1)By_id 定位 (2)by_name 定位 (3)by_class_name 定位 (4)by_tag_name 定位 (5) ...
- 『心善渊』Selenium3.0基础 — 5、XPath路径表达式详细介绍
目录 1.XPath介绍 2.什么是XML 3.XML与HTML对比 4.为什么使用XPath定位页面中的元素 5.XPath中节点之间的关系 (1)节点的概念 (2)节点之间的关系类型 6.XPat ...
- 『心善渊』Selenium3.0基础 — 6、Selenium中使用XPath定位元素
目录 1.Selenium中使用XPath查找元素 (1)XPath通过id,name,class属性定位 (2)XPath通过标签中的其他属性定位 (3)XPath层级定位 (4)XPath索引定位 ...
- 『心善渊』Selenium3.0基础 — 16、Selenium对iframe表单的操作
目录 1.什么是iframe表单 2.iframe表单操作流程 3.iframe表单操作常用方法 (1)进入表单 (2)多表单切换 4.表单操作示例 1.什么是iframe表单 实际上就是HTML页面 ...
随机推荐
- 不同规模的企业对CRM的需求是否相同?
CRM客户管理系统在我们的认知中往往是中大型企业的选择.如今,越来越多中小规模企业开始使用CRM系统.CRM的功能随着发展变得越来越实用,可以满足不同行业不同业务规模的企业的需求.同时,CRM功能类型 ...
- 名称空间 反向解析 reverse
- [bug] Navicat 连 虚拟机MySQL
参考 https://www.cnblogs.com/brankoliu/p/10845491.html https://blog.csdn.net/qq_40087740/article/detai ...
- [刷题] 51 N-Queens
要求 将n个皇后摆放在n*n的棋盘中,使横.竖和两个对角线方向均不会同时出现两个皇后 思路 尝试在一行中摆放,如果摆不下,回到上一行重新摆放,直到所有行都摆下 快速判断不合法情况 竖向:col[i]表 ...
- python上下文管理协议,即with的详细使用
一.with obj as f: #代码块... 二.执行流程: 1.with obj --->触发obj.__enter__(),需要在obj里写__enter__(self),在它里边写返回 ...
- testlink安装(mac os)
安装依赖:xampp.mysql.testlink 一.xampp安装(参考:https://blog.csdn.net/it_cgq/article/details/79430511) 1.下载xa ...
- AJAX 原理与使用
AJAX 是什么 AJAX ( Asynchronous JavaScript and XML,异步 JavaScript 和 XML,中文读音:"阿贾克斯 ") 是一种 Web ...
- 彻底弄懂HTTP缓存机制及原理【转载】
前言 Http 缓存机制作为 web 性能优化的重要手段,对于从事 Web 开发的同学们来说,应该是知识体系库中的一个基础环节,同时对于有志成为前端架构师的同学来说是必备的知识技能.但是对于很多前端同 ...
- Freemaker生成复杂样式图片并无文件损坏的excel
Freemaker生成复杂样式图片并无文件损坏的excel 参考Freemarker整合poi导出带有图片的Excel教程,优化代码实现 功能介绍:1.支持Freemarker导出Excel的所有功能 ...
- Java中单列集合List排序的真实应用场景
一.需求描述 最近产品应客户要求提出了一个新的需求,有一个列表查询需要按照其中的多列进行排序. 二.需求分析 由于数据总量不多,可以全部查询出来,因此我就考虑使用集合工具类Collections.so ...