Python selenium下利用xpath定位使用教程

先创建一个test.html,演示代码如下:

<html>
<body>
<div>
    <div1>节点1div1>
    <div1>节点2
        <div2>节点2-1
            <div3 id="jd2-1-1">节点2-1-1div3>
            <div3>节点2-1-2div3>
        div2>
        <div>节点2-2div>
    div1>
    <div1 id="jd3">节点3
        <div2>节点3-1div2>
    div1>
    <div1>节点4div1>
div>
body>
html>

父子节点、兄弟节点、相邻节点概念理解

父子节点:节点2为节点2-1的父节点,反过来节点2-1为节点2的子节点。同理,节点2-1为节点2-1-1的父节点,节点2-1-1为节点2-1的子节点
兄弟节点:节点1、节点2、节点3、节点4为兄弟节点等,节点1为节点2的哥哥节点,节点2为节点1的弟弟节点
相邻节点:节点1的相邻节点为节点2,节点2的相邻节点为节点1和节点3等等

定位元素的N种方式

1.按照节点顺序定位元素

定位到节点2-1-1

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('D:\\test.html')
a = driver.find_element_by_xpath('/html/body/div/div1[2]/div2/div3[1]')#按照html结构顺序定位元素
b = driver.find_element_by_xpath('//*[@id="jd2-1-1"]')#按照标签属性定位元素,表示查找id="jd2-1-1"的标签
c = driver.find_element_by_xpath('//*[contains(text(),"节点2-1-1")]')#通过文本内容定位元素,表示查找文本内容包含“节点2-1-1”的标签
print(a.text)
print(b.text)
print(c.text)

打印出来的结果是相同的

节点2-1-1
节点2-1-1
节点2-1-1

2.通过子节点定位父节点

已知节点2-1-1定位到节点2

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('D:\\test.html')
a = driver.find_element_by_xpath('//*[@id="test"]/../..')#"/.."表示当前节点的父节点,由于节点2是节点2-1-1的父节点的父节点,故用"/../.."定位
b = driver.find_element_by_xpath('//*[@id="test"]/parent::*/parent::div1')#"/parent::"表示通过xpath轴获取当前节点的父节点
print(a.text)
print(b.text)

打印出来的结果也是相同的

节点2 节点2-1 节点2-1-1 节点2-1-2
节点2-2
节点2 节点2-1 节点2-1-1 节点2-1-2
节点2-2

3.通过相邻节点定位元素

已知节点3,定位到哥哥节点1和弟弟节点4

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('D:\\test.html')
a = driver.find_element_by_xpath('//*[@id="jd3"]/preceding-sibling::div1[2]')#"/preceding-sibling"表示通过xpath轴往前数两个兄弟节点得到节点1
b = driver.find_element_by_xpath('//*[@id="jd3"]/following-sibling::div1[1]')#"/following-sibling"表示通过xpath轴往后数一个兄弟节点得到节点4
print(a.text)
print(b.text)

结果如下:

节点1
节点4

你可能感兴趣的:(Python selenium下利用xpath定位使用教程)