Python+selenium元素定位(五)-----cssselector的⾼级⽤法
css selector 的⾼级⽤法
CSS(Casading Style Sheets)层叠样式表。⼀种⽤来表现HTML或者XML等⽂件样式的语⾔。css选择器是浏览器⽤来选择元素,selenium 也要选择元素,可以使⽤css选择器来选择Web元素。
定位元素的注意事项:
1、到等待定位的元素的唯⼀属性
2、如果该元素没有唯⼀属性,则先到能够给被唯⼀定位的⽗元素/⼦元素/相邻元素,再使⽤ “>” 、“ ”、“+” 等辅助定位要定位的元素。
3、不要使⽤随机唯⼀属性,属性是会发⽣改变。 ID = “Dev45” Dev46
1、ID选择器通过 # 来定义,通过元素的ID属性来定位。格式: #id属性值
id选择器来定位元素 格式: #id属性值 通过 # 来定义的
print(driver.find_element_by_css_selector("#pLabel").get_attribute("id"))
2、class选择器(类选择器)使⽤ . (点)来定义格式: .class属性的值
class 选择器 使⽤ . (点)来定义 格式: .class属性的值
driver.find_element_by_css_selector(".RedChamber").send_keys("class 选择器使⽤ . (点)来定义格式: .class属性的值")
如果class属性值有空格,则可以使⽤如下⽅法来定位:
⽅法⼀:
可以使⽤ 点 替换掉所有的空格(例如: .Dream.of.the.Red.Chamber)
⽅法⼆:
可以截取⼀部分值,然后在截取的部分值之前加上 . (点) (例如: .Dream) class属性值有空格
driver.find_element_by_css_selector(".Dream.of.the.Red.Chamber").send_keys("class属性值有空格")
driver.find_element_by_css_selector(".Dream").send_keys("截取部分值在前⾯加上点来定位")
3、标签选择器通过标签的标签名来定位元素
标签选择器 通过标签的标签名来定位元素
print(driver.find_element_by_css_selector("span").text)
4、属性选择器根据标签中的属性来定位元素,格式: [属性名=”属性值”]
属性选择器 使⽤⽅括号把属性扩起来 ,格式: [属性名=“属性值”] 例如: [id=“form”]
print(driver.find_element_by_css_selector('[id="form"]').get_attribute('id'))
没有指定属性值,则返回所有具有某个属性的元素。
没有指定属性值
print(driver.find_element_by_css_selector("[id]").get_attribute("id"))
5、id选择器和class选择器的组合使⽤即要定位的元素既要满⾜id属性值为指定的值,⼜要满⾜class 属性的值为指定的值。
id选择器和class选择器组合使⽤ #ID .Dream 两个条件是 且 的关系
driver.find_element_by_css_selector("#ID.Dream").send_keys("id选择器和class选择器组合使⽤")
css鼠标点击样式6、id选择器和标签选择器的组合使⽤标签选择器只能放在id选择器的前⾯
id选择器和标签选择器的组合使⽤
print(driver.find_element_by_css_selector("a#tianshang").text)
7、标签选择器和class选择器组合使⽤
标签选择器和class选择器的组合使⽤ 标签选择器只能放在class选择器的前⾯
点击展开下拉框
driver.find_element_by_css_selector("select").click()
选择下拉框中的内容
driver.find_element_by_css_selector("option.poem").click()
8、使⽤多个属性来定位元素
使⽤多个属性来定位元素
driver.find_element_by_css_selector('[id="IamID"][name="first"]').send_keys("使⽤多个属性来定位元素")
选中某⼀⾏,如果⿏标在最前⾯,则使⽤ shift + end,如果⿏标在最后⾯,则使⽤shift + home键。
9、标签选择器、id选择器、class选择器、属性选择器组合使⽤
标签选择器、id选择器、class选择器、属性选择器组合使⽤
driver.find_element_by_css_selector('input[id="IamID"].poem[name="first"]').send_keys("标签选择器、id选择器、class选择器、属性选择器组合使⽤") 10、分组选择器
使⽤的场景:id的属性值 在 ID1 和 ID2 之间变化,只能使⽤id属性来定位元素,此时可以使⽤分组选择器来定位元素。
分组选择器 使⽤ , (逗号)来定义
driver.find_element_by_css_selector("#IamID1,#IamID2").send_keys("使⽤ , (逗号)来定义")
11、后代选择器
使⽤ 空格 来定义,⽗元素 加上 空格 后代元素
只能够选择到直系 后代,⽽不能选择 旁系后代,不论是⼉⼦还是孙⼦都可以。
后代选择器 使⽤ ⽗元素 加上 空格 后⾯元素
print(driver.find_element_by_css_selector("#form span").tag_name)
12、⼦元素选择器只能选择⾃⼰的⼉⼦,不能隔代,使⽤ > 来定位
⼦元素选择器 使⽤ > (⼤于号)来定位 只能选择⾃⼰的⼉⼦,不能隔代
print(driver.find_element_by_css_selector('[id="form"] > span').text)
13、相邻兄弟选择器
相邻的(两个元素之间不能有间隔) 兄弟关系(有相同的⽗元素),只能向后 选择,不能向前选择。 使⽤ + 号来定位
相邻兄弟选择器 使⽤ + 来定位
print(driver.find_element_by_css_selector(".Dream + br").tag_name)
14、后续兄弟选择器
使⽤ ~ 来定位,后续兄弟选择器选取所有指定元素之后的兄弟元素,中间可以有间隔。
后续兄弟选择器 使⽤ ~ 来定位,后续兄弟选择器选取所有指定元素之后的兄弟元素,中间可以有间隔
print(driver.find_element_by_css_selector("#pLabel ~ br").tag_name)
15、伪类
Pseudo-classes [‘su:dƏu]
伪类选择元素基于的是当前元素处于的状态,或者元素当前所有的特性,⽽不是元素的id、class等静态属性标志。由于状态是动态变换的,所有⼀个元素达到⼀个状态以后,就可能获取到⼀个伪类的样式,当状态改变时,就有可能失去了这个样式。它的功能与class(类)类似,所以称之为伪类。
1):nth-child(n)
匹配属于其⽗元素下的第n个⼦元素
option:nth-child(3) 表⽰匹配到 option元素的⽗元素下的第3个⼦元素。
:nth-child(n) 匹配属于其⽗元素下的第n个⼦元素
print(driver.find_element_by_css_selector("option:nth-child(3)").get_attribute("value"))
2):nth-last-child(n)
匹配属于其⽗元素下的倒数第n个⼦元素
:nth-last-child(n) 匹配属于其⽗元素下的倒数第n个⼦元素
print(driver.find_element_by_css_selector("option:nth-last-child(4)").get_attribute("value"))
3):first-child
匹配属于其⽗元素下的第1个⼦元素
:first-child 匹配属于其⽗元素下的第1个⼦元素
print(driver.find_element_by_css_selector("option:first-child").text)
4):last-child
匹配属于其⽗元素下的最后1个⼦元素
:last-child 匹配属于其⽗元素下的最后1个⼦元素
print(driver.find_element_by_css_selector('option:last-child').text)
Python + selenium 元素定位系列
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论