selenium_xpath定位

本文介绍XPath的基本概念及其在HTML文档中的应用实例。详细解释了XPath路径表达式的使用方法,并通过具体的测试代码展示了如何选取和操作HTML元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【xpath说明】

1:XML路径语言:用来确定XML文档中某部分位置的语言;
2:XPath 用于在 XML 文档中通过元素和属性进行导航
3:XPath 是一个 W3C 标准
4:对xml/html有一定的了解

【xpath节点类型】

元素,属性,文本,命名空间,指令处理,注释及文档

【通过路径表达式从XML文档中选取节点或节点设置】

表达式说明
/xxx选取根节点xxx
/xxx/yyy根据绝对路径选择元素
//xxx整个文档扫描,找到所有xxx元素
//xxx/yyy所有父元素为xxx的yyy元素
.选取当前节点的父元素节点
..选取父元素地址
//xxx[@id]选取所有xxx元素中有id属性的元素
//xxx[@yyy]选取所有xxx元素id属性为yyy的元素
//*[count(xxx)=2]统计xxx元素个数=2的节点
//*[local-name()=’xxx’]找到tag为xxx的元素
//*[starts-with(local-name(),’x’)]找到所有tag以x开头的元素
//*[contains(local-name(),’x’)]找到所有tag包含x的元素
//*[string-length(local-name()) = 3]找到所有tag长度为3的元素
//xxx 或 //yyy多个路径查找

【元素操作方式】

方法说明
clear清楚元素内容
send_keys模拟按键输入
click点击
submit提交表单

【html代码】

<html>
    <head>
    it's head
        <title>selenium</title>
    </head>

    <p>
    age
        <input type="text" name="age">
    </p>
    <body>
        <form>
        firstname
            <input type="text" name="firstname" id='test'>
            <br />
        lastname
            <input type="text" name="lastname">
        </form>



    </body>
</html>

【测试代码】

#打开本地Html文件
>>> b.get(r"file:///C:\Users\Administrator\Desktop\test.html")

#根据根节点
>>> ele=b.find_element_by_xpath('/html')  
>>> ele  
<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="12fe7db6-51bd-4138-b8ca-5dbfad827a21", element="285fe4e0-3333-4b3c-969e-87f652cadf90")>
>>> ele.text

"it's head\nage\nfirstname\nlastname"

#根据绝对路径选择元素
>>> ele =b.find_element_by_xpath('/html/body/form/input')
>>> ele.get_attribute('type')
'text'
>>> ele.get_attribute('name')
'firstname'
>>> ele.send_keys('zhang')

#当有多个Input,用数组形式,从1开始
>>> ele2 =b.find_element_by_xpath('/html/body/form/input[2]')
>>> ele2.get_attribute('name')
'lastname'
>>> ele2.send_keys('san')
>>> ele3=b.find_element_by_xpath('html/body/p/input')
>>> ele3.get_attribute('name')
'age'
>>> ele3.send_keys(20)

#整个文档扫描,找到所有xxx元素
>>> ele3=b.find_element_by_xpath('//input')
>>> ele3.get_attribute('name')
'age'
>>> ele3=b.find_element_by_xpath('//form//input[2]')
>>> ele3.get_attribute('name')
'lastname'

#选取当前节点的父元素地址
>>> ele3=b.find_element_by_xpath('//form//input/..')
>>> ele3.tag_name
'form'

#选取所有xxx元素id属性为yyy的元素
>>> ele=b.find_element_by_xpath('//input[@id]')
>>> ele.id
'3f5c00ab-ed93-498a-a005-e52668565c6f'
>>> ele.get_attribute('name')
'firstname'
>>> ele2=b.find_element_by_xpath('//input[not(@id)]')
>>> ele2.get_attribute('name')
'age'
>>> ele3=b.find_element_by_xpath('//input[@name="firstname"]')
>>> ele3.get_attribute('name')
'firstname'


#统计xxx元素个数=2的节点
>>> ele=b.find_element_by_xpath('//*')
>>> ele.tag_name
'html'
>>> ele=b.find_element_by_xpath('//*[count(input)=2]')
>>> ele
<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="9bdd8312-3e12-475d-9aed-1bbb7a28a0df", element="cf2932fd-ec9a-4e75-afb2-a091b7b989b2")>
>>> ele.tag_name
'form'
>>> ele=b.find_element_by_xpath('//*[count(input)=1]')
>>> ele.tag_name
'p'

# 找到tag为xxx的元素
>>> ele=b.find_element_by_xpath('//*[local-name()="input"]')
>>> ele.tag_name
'input'
>>> ele.get_attribute('name')
'age'
>>> ele=b.find_element_by_xpath('//input')
>>> ele.get_attribute('name')
'age'

#找到所有tag以x开头的元素
>>> ele=b.find_element_by_xpath('//*[starts-with(local-name(),"i")]')
>>> ele.tag_name
'input'
>>> ele.get_attribute('name')
'age'

#找到所有tag包含x的元素
>>> ele=b.find_element_by_xpath('//*[contains(local-name(),"i")]')
>>> ele.get_attribute('name')
>>> ele.tag_name
'title'
#找下一部分的tag包含x的元素,注意last()
>>> ele=b.find_element_by_xpath('//form//*[contains(local-name(),"i")]')
>>> ele.tag_name
'input'
>>> ele.get_attribute('name')
'firstname'
>>> ele=b.find_element_by_xpath('//form//*[contains(local-name(),"i")][last()]')
>>> ele.get_attribute('name')
'lastname'
>>> ele=b.find_element_by_xpath('//form//*[contains(local-name(),"i")][last()-1]')
>>> ele.get_attribute('name')
'firstname'

#找到所有tag长度为3的元素
>>> ele=b.find_element_by_xpath('//*[string-length(local-name())=5]')
>>> ele.get_attribute('name')
>>> ele.tag_name
'title'

#多个路径查找
>>> ele=b.find_element_by_xpath('//input | //title')
>>> ele.tag_name
'title'
>>> ele=ele=b.find_element_by_xpath('//input[last()] | //title')
>>> ele.tag_name
'title'
>>> ele=b.find_element_by_xpath('//input | //title[last()]')
>>> ele.tag_name
'title'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值