文章目录
1 Xpath语法简介
XPath (XML Path Language) 是由国际标准化组织W3C指定的,用来在XML和HTML文档中选择节点的语言。
目前主流浏览器 (Chrome, Firefox, Edge, Safari) 都支持Xpath语法。
既然已经有了CSS,为什么还要学习Xpath?
- 有些场景用CSS选择Web元素很麻烦,而Xpath却比较方便。
- Xpath还有其他领域会使用到,比如:爬虫框架Scrapy, 手机App框架Appium(不支持CSS)。
Xpath语法中,整个HTML文档根节点用 / 表示,与CSS选择器中的 > 类似,表示直接子节点关系。如
# 选择html下面的body下面的div元素
/html/body/div
1.1 查看元素Xpath
浏览器支持查看、复制元素Xpath:定位元素后右键选择Copy>>Copy Xpath
1.2 绝对路径选择
从根节点开始的,到某个节点,每层都依次写下来,每层之间用 / 分隔的表达式,就是某元素的绝对路径。
# 选择html下面的body下面的div元素
wd.find_element_by_xpath('/html/body/div')
# 等价于:
wd.find_element_by_css_selector('html>body>div')
1.3 相对路径选择
Xpath在前面加 // , 表示从当前节点往下寻找所有的后代元素,不管它在什么位置。
# 要选择所有的div元素里面的所有的p元素
wd.find_elements_by_xpath('//div//p')
# 等价于:
wd.find_element_by_css_selector('div p')
1.4 通配符
* 是一个通配符,对应任意节点名的元素,等价于CSS选择器 div > *
# 如果要选择所有div节点的所有直接子节点
wd.find_elements_by_xpath('//div/*')
# # 等价于:
wd.find_element_by_css_selector('div>*')
2 根据属性选择
格式: [@属性名=‘属性值’]
注意:
- 属性名注意前面有个@
- 属性值一定要用引号, 可以是单引号,也可以是双引号
2.1 根据id属性选择
# 选择id为kw的元素
wd.find_element_by_xpath('//*[@id="kw"]')
# 等价于:
wd.find_element_by_css_selector('#kw')
2.2 根据class属性选择
注意:若一个元素class有多个,要写全。(CSS选择器只需选一即可)
from selenium import webdriver
from time import sleep
wd = webdriver.Chrome()
# 调用Webdriver对象的get方法,打开网址
wd.get('https://www.baidu.com/')
# 选择所有a元素中class属性为mnav c-font-normal c-color-t的元素
elements = wd.find_elements_by_xpath('//a[@class="mnav c-font-normal c-color-t"]')
# 打印所有元素的文本内容