【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'