- 『心善渊』Selenium3.0基础 — 10.XPath定位(
- 『心善渊』Selenium3.0基础 — 12.XPath定位(
- 『心善渊』Selenium3.0基础 — 11.XPath定位(
- 『心善渊』Selenium3.0基础 — 9.XPath定位(一
- 『心善渊』Selenium3.0基础 — 41.TMLTestR
- 『心善渊』Selenium3.0基础 — 30.Selenium
- 『心善渊』Selenium3.0基础 — 31.Selenium
- 『心善渊』Selenium3.0基础 — 32.Selenium
- 『心善渊』Selenium3.0基础 — 29.Selenium
- 『心善渊』Selenium3.0基础 — 28.Selenium
7、Selenium使用XPath的语法
- 单数定位,获得一个指定元素对象
driver.find_element_by_xpath("XPath路径表达式")
- 复数定位,获得指定元素结果集列表
driver.find_elements_by_xpath("XPath路径表达式")
8、Selenium中使用XPath查找元素
(1)XPath通过id
,name
,class
属性定位
"""
1.学习目标:
必须掌握selenium中XPath定位方法
2.语法
2.1 selenium中语法
driver.find_element_by_xpath("XPath表达式")
2.2 XPath表达式
相对路径:标签名+属性
//标签名[@属性名='属性值']
3.需求
在百度页面中,使用XPath定位搜索栏
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
# 2.打开浏览器(获得浏览器对象)
driver = webdriver.Chrome()
# 3.打开页面
url = "http://www.baidu.com"
driver.get(url)
sleep(2)
# 4.用XPath通过id属性定位
"""
注意:@id='kw',等号两边不要有空格
有时候会报错,SyntaxError:(语法错误)
"""
element1 = driver.find_element_by_xpath("//input[@id='kw']")
# 打印定位元素所在行的源码
print(element1.get_attribute("outerHTML"))
# 5.用XPath通过name属性定位
element2 = driver.find_element_by_xpath("//input[@name='wd']")
print(element2.get_attribute("outerHTML"))
# 6.用XPath通过class属性定位
element3 = driver.find_element_by_xpath("//*[@class='s_ipt']")
print(element3.get_attribute("outerHTML"))
# 7.关闭浏览器
driver.quit()
"""
输出结果:
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
"""
总结
- 如果不想制定标签名称,可以用*号表示任意标签。
- 有时候同一个属性,同名的比较多,这时候可以通过标签筛选下,定位更准一点。
- 如果想制定具体某个标签,就可以直接写标签名称。
(2)XPath通过标签中的其他属性定位
如果一个元素id
,name
,class
属性都没有,这时候也可以通过其它属性定位到。
# 需求:使用XPath通过其他属性对百度首页搜索框进行定位
# 1.导入selenium
from selenium import webdriver
from time import sleep
# 2.打开浏览器(获得浏览器对象)
driver = webdriver.Chrome()
# 3.打开页面
url = "http://www.baidu.com"
driver.get(url)
sleep(2)
# 4.用XPath通过maxlength属性定位
"""
注意:@id='kw',等号两边不要有空格
有时候会报错,SyntaxError:(语法错误)
"""
element1 = driver.find_element_by_xpath("//input[@maxlength='255']")
# 打印定位元素所在行的源码
print(element1.get_attribute("outerHTML"))
# 5.用XPath通过autocomplete属性定位
element2 = driver.find_element_by_xpath("//input[@autocomplete='off']")
print(element2.get_attribute("outerHTML"))
# 6.关闭浏览器
driver.quit()
"""
输出结果:
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
"""
(3)XPath层级定位
- 如果一个元素,它的属性不是很明显,无法直接定位到,这时候我们可以先找它老爸(父元素)。
- 找到它老爸后,再找下个层级就能定位到了。
- 如下图图所示,要定位的是input这个标签,它的老爸的
class=’s_ipt_wr‘
。 - 要是它老爸的属性也不是很明显,就找它爷爷id=form。
- 于是就可以通过层级关系定位到。
![](https://img.haomeiwen.com/i2495229/a732837de8261ae2.png)
示例:
需求,在页面中,定位下面代码片段中的<input>标签
<p id="p1">
<label for="userA">账号A</label>
<input required="" value="">
</p>
代码脚本:
"""
1.学习目标:
必须掌握selenium中XPath定位方法
2.语法
2.1 selenium中语法
driver.find_element_by_xpath("XPath表达式")
2.2 XPath表达式
层级定位 :
//父标签名[@父标签属性名='属性值']/子标签
注意:最终定位的是子标签
3.需求
在页面中,使用XPath定位上面代码片段的<input>标签
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
import os
# 2.打开浏览器
driver = webdriver.Chrome()
# 3.打开注册A页面
url = "file:///" + os.path.abspath("./练习页面/注册A.html")
driver.get(url)
sleep(2)
# 4.XPath层级定位,通过p标签定位字标签input标签
textA = driver.find_element_by_xpath("//p[@id='p1']/input")
print(textA.get_attribute("outerHTML"))
# 6.关闭浏览器
driver.quit()
"""
输出结果:
<input required="" value="">
"""
网友评论