python+selenium元素定位中,css表达式功能非常强大,其强大之处在于:可以任意组合,联合使用获取元素,以下是结合各方资料学习后,整理的语法汇总。
from selenium import webdriver
wb = webdriver.Chrome()
wb.get("http://www.baidu.com")
#窗口最大化
wb.maximize_window()
#添加等待时间
wb.implicitly_wait(5)
1、选择单个元素&选择多个元素
选择单个元素语法:find_element_by_css_selector()
选择多个元素语法:find_elements_by_css_selector()
多个元素时,通过for循环依次取出列表中元素
#1、选择单个元素
element = wb.find_element_by_css_selector('#s_top_wrap')
print(element)
#2、选择多个元素
elements = wb.find_elements_by_css_selector('#u > a')
#elements下有多个a标签,这里可用for循环依次取出
for element in elements:
# print(element)
# print(element.get_attribute('innerText'))
print(element.get_attribute('textContent'))
输出结果为:
<selenium.webdriver.remote.webelement.WebElement (session="8047608c29e9e720e5f32ff7aba1245b", element="0.8778657659422606-3")>
百度首页
设置
登录
2、选择父元素的直接子元素(父元素 > 子元素)
父元素的直接子元素指的是:父元素的直接下一级子节点,例如:元素2是元素1的直接下一级子节点,那么元素2就是元素1的直接子元素
如下图:
语法是:父元素 > 子元素
# 2、选择父元素的直接子元素
elements = wb.find_elements_by_css_selector('#s-top-left > a')
for element in elements:
print(element.get_attribute('textContent'))
输出结果:
新闻
hao123
地图
视频
贴吧
学术
3、选择父元素的后代元素(父元素 子元素)
语法:父元素(空格)子元素
父元素和子元素之间用空格隔开
element = wb.find_element_by_css_selector('.s-top-more .c-font-normal')
print(element.get_attribute('textContent'))
输出结果:
网盘
4、通过属性选择元素
语法:使用中括号[]
# 4、通过属性选择元素
element = wb.find_element_by_css_selector('[href="http://tieba.baidu.com"]')
5、选择多种元素
语法:用逗号隔开
# 5、选择多种元素
elements = wb.find_elements_by_css_selector('.toindex,.pf')
for element in elements:
print(element.get_attribute('textContent'))
输出结果:
<selenium.webdriver.remote.webelement.WebElement (session="165ab0827f6f29711e6f78dbdbf19f05", element="0.31190656078979373-11")>
百度首页
设置
6、选择父元素的第N个子节点
语法: 标签:nth-child(n)
如下图:获取i标签的第2个子节点元素:i:nth-child(2)
# 6、选择父元素的第N个子节点
elements = wb.find_elements_by_css_selector('i:nth-child(2)')
print(elements)
7、选择父元素的倒数第N个子节点
语法: i:nth-last-child(2)
# 7、选择父元素的倒数第N个子节
element = wb.find_element_by_css_selector('i:nth-last-child(2)')
print(element)
8、选择父元素的第N个某种类型的子节点
语法: i:nth-of-type(1)
# 8、选择父元素的某种类型的子节点
elements = wb.find_elements_by_css_selector('i:nth-of-type(1)')
9、选择父元素下的奇数和偶数元素
语法:
偶数:标签:nth-child(even)
奇数:标签:nth-child(odd)
# 9、选择父元素下的奇数和偶数元素
#父元素下的偶数子节点元素
elements = wb.find_elements_by_css_selector('li:nth-child(even)')
#父元素下的奇数子节点元素
elements = wb.find_elements_by_css_selector('li:nth-child(odd)')
10、选择兄弟节点
语法:
紧邻兄弟节点:标签1 + 标签2
后面所有兄弟节点:标签1 ~ 标签2
# 10、选择兄弟节点
#div下的紧邻a标签
elements = wb.find_elements_by_css_selector('div+a')
#div下的所有a标签
elements = wb.find_elements_by_css_selector('div~a')
以上是参考网上视频资料等整理,后面如有新增,我会持续更新,如有不妥之处,欢迎小伙伴们指正~~