selenium——Xpath选择器

这篇具有很好参考价值的文章主要介绍了selenium——Xpath选择器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学xpath的意义在于部分场景用css选择web元素很麻烦,而xpath 却比较方便

另外 Xpath 还有其他领域会使用到,比如 爬虫框架 Scrapy, 手机App框架 Appium。


path 语法中,整个HTML文档根节点用’/‘表示,如果我们想选择的是根节点下面的html节点,则可以在搜索框输入 /html

如果输入下面的表达式:
/html/body/div

这个表达式表示选择html下面的body下面的div元素

/ 有点像CSS中的 > ,表示直接子节点关系


绝对路径

从根节点开始的,到某个节点,每层都依次写下来,每层之间用 / 分隔的表达式,就是某元素的 绝对路径

例如上面的xpath表达式 /html/body/div
等价于CSS表达式html>body>div

自动化程序要使用Xpath来选择web元素,应该调用 WebDriver对象的方法 find_element_by_xpath 或者 find_elements_by_xpath:

elements=driver.find_elements(By.XPATH,"/html/body/div")

相对路径

xpath前面加 // , 表示从当前节点往下寻找所有的后代元素,不管它在什么位置。

所以xpath表达式,应该这样写: //div

‘//’ 符号也可以继续加在后面,比如,要选择 所有的 div 元素里面的 所有的 p 元素 ,不管div 在什么位置,也不管p元素在div下面的什么位置,则可以这样写 //div//p

对应的自动化程序如下:

elements=driver.find_elements(By.XPATH,"//div//p")

如果使用CSS选择器,对应代码如下:

elements=driver.find_elements(By.CSS_SELECTOR,"div p")

如果要选择所有div中的 直接子节点 p,xpath应该这么写:
//div/p

如果使用CSS选择器,则为 div>p

🐗通配符

xpath中如果要选择所有div节点的所有直接子节点,可以使用表达式:

//div/*

"*"是一个通配符,对应任意节点名的元素,等价于CSS选择器的

div>*

示例:

elements = driver.find_elements(By.XPATH, "//div/*")
for element in elements:
    print(element.get_attribute('outerHTML'))	#打印html信息

根据属性选择

Xpath 可以根据属性来选择元素。

根据属性来选择元素 是通过 这种格式来的 [@属性名=‘属性值’]

🌋根据id属性选择

选择id为west的元素:

//*[@id='west']

属性名前要有@,属性值一定要用引号

🎠根据class属性选择

选择所有 select 元素中 class为 single_choice 的元素,可以这样

//select[@class='single_choice']

如果一个元素class有多个,比如

<p id="beijing" class='capital huge-city'>
    北京    
</p>

对应的xpath就是:

//p[@class="capital huge-city"]

不能只写一个属性

🚣根据其他属性

同样的道理,我们也可以利用其它的属性选择

比如选择 具有multiple属性的所有页面元素 ,可以这样:

//*[multiple]

🦊属性值包含字符串

  1. 要选择style属性值包含color字符串的页面元素
//*[contains(@style,'color')]
  1. 要选择style属性值以color字符串开头的页面元素
//*[starts-with(@style,'color')]

目前浏览器不支持以某字符串结尾的页面元素的方法

按次序选择

xpath也可以根据次序选择元素。 语法比css更简洁,直接在方括号中使用数字表示次序

🌏某类型第几个子元素

选择p类型的第二个子元素:

//p[2]

选取父元素为div的p类型的第2个子元素

//div/p[2]

📫第几个子元素

选取父元素为div的所有元素的第二个子元素

//div/*[2]

👒某类型倒数第几个元素

选取p类型倒数第一个子元素

//p[last()]

选取p类型倒数第2个子元素

//p[last()-1]

选取父元素为div中p类型倒数第三个子元素

//div/p[last()-2]

🍹范围选择

xpath还可以选择子元素的次序范围

选取option类型第1到2个子元素

//option[position()<=2]

或者

option[position()<3]

选择class属性为multi_choice的前三个子元素

//*[@class='multi_choice']/*[position()<=3]

选取class属性为multi_choice的后三个子元素

//*[@class='multi_choice']/*[position()>=last()-2]

last() 本身代表最后一个元素

last()-1 本身代表倒数第2个元素

last()-2 本身代表倒数第3个元素

组选择,父节点,兄弟节点

👾组选择

xpath中组选择使用竖线隔开多个表达式

所有的option元素和所有的h4元素:

//option|//h4

等同于CSS选择器:

option,h4

再比如,要选所有的 class 为 single_choice 和 class 为 multi_choice 的元素:

//*[@class='single_choice']|//*[@class='multi_choice']

等同与CSS选择器

.single_choice,.multi_choice

🍭选择父节点

xpath可以选择父节点,某个元素的父节点用**“/. .”**表示

选择id为china的节点的父节点:

//*[@id='china']/..

当某个元素没有特征可以直接选择,但是它有子节点有特征, 就可以采用这种方法,先选择子节点,再指定父节点。

还可以继续找上层父节点:

//*[@id='china']/../../..

🚟兄弟节点选择

CSS中选择某个节点的后续兄弟节点,用波浪线~

xpath选择后续兄弟节点,用following-sibling::

比如,要选择class为single_choice的元素的所有后续兄弟节点:

//*[@class='single_choice']/following-sibling::*

xpath还可以选择前面的兄弟节点,
语法: prceding-sibling::

比如,要选择 class 为 single_choice 的元素的所有前面的兄弟节点

//*[@class='single_choice']/preceding-sibling::*

CSS选择器目前还不能选择器前面的兄弟节点


selenium注意点

要在某个元素内部使用xpath,需要在xpath表达式最前面加个点

例如:文章来源地址https://www.toymoban.com/news/detail-808217.html

# 先寻找id是china的元素
china = wd.find_element(By.ID, 'china')

# 再选择该元素内部的p元素
elements = china.find_elements(By.XPATH, './/p')

# 打印结果
for element in elements:
    print('----------------')
    print(element.get_attribute('outerHTML'))

到了这里,关于selenium——Xpath选择器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • selenium——Xpath选择器

    学xpath的意义在于部分场景用css选择web元素很麻烦,而xpath 却比较方便 另外 Xpath 还有其他领域会使用到,比如 爬虫框架 Scrapy, 手机App框架 Appium。 path 语法中,整个HTML文档根节点用’/‘表示,如果我们想选择的是根节点下面的html节点,则可以在搜索框输入 /html 如果输入下

    2024年01月20日
    浏览(29)
  • [ tool ] Xpath选择器和selenium工具基本使用

    是一门在XML文档中查找信息的语言 以后查找标签有三种方式 bs4的find系列(find find_all) css选择器 xpath选择器 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如

    2024年01月21日
    浏览(32)
  • selenium自动化遍历并选择select下拉框每一个元素

    我们想去遍历选择select下拉框的所有的元素的时候,这时候,可以先获取下拉框的长度,然后使用for循环一个个选择,使用len(Select(driver.find_element(By.ID,\\\"dj\\\")).options)方法用来统计下拉框元素的个数,然后加一个for循环一个个的遍历,具体方法如下: 备注: 调试过程中遇到报错

    2024年02月12日
    浏览(32)
  • Python-爬虫、自动化(selenium,动态网页翻页,模拟搜索,下拉列表选择、selenium行为链)

    selenium是一个Web自动化测试工具,可以直接运行在浏览器上·支持所有主流的浏览器.可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,基础页面截图等。 使用pip install selenium命令下载selenium模块。 运行下列代码: 说明没有下载对应浏览器的驱动,这里使用谷歌

    2024年02月01日
    浏览(61)
  • 自动化测试学习(六)-selenium定位元素之CSS选择器详细用法

    目录 1.通过class属性定位 2.通过id属性定位 3.通过标签名定位 4.其他方法定位    CSS是一种语言,它可以比较灵活的选择控件的任意属性,一般情况下比Xpath快,下面我们详细介绍CSS的用法。CSS常见语法如下表所示:  选择器 示例 描述 .class .s_ipt 选择class=\\\"s_ipt\\\"的所有元素 #i

    2024年01月17日
    浏览(45)
  • 『App自动化测试之Appium应用篇』| 继承于selenium常用的元素定位方法有哪些?如何使用?

    在了解元素等位前,我们先了解下 app 的一些类型,只有了解这些 app 的类型才能针对性的选择元素定位方法; 因为不同类型的app的定位方式可能存在差异性; 我们了解到 APP 可以分为原生 APP 、 Web APP 、混合 APP 。 而原生 APP 是基于 Android 或 iOS 平台官方的语言、类库、工具

    2024年02月03日
    浏览(42)
  • web自动化测试入门篇03——selenium使用教程_(2)在上述学习基础上,自行选择一个合适的网站,进一步在实践中去运用selenium webd(1)

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新大数据全套学习资料》,

    2024年04月27日
    浏览(58)
  • Selenium元素定位之xpath

    目录 XPATH 元素定位 xpath通过绝对路径定位元素 xpath通过相对路径定位元素 xpath通过元素属性定位元素 xpath通过属性值模糊匹配定位元素 xpath通过文本定位元素 xpath常见语法一览表 XPath 是用于在 XML 文档中定位节点的语言。由于 HTML 可以是 XML (XHTML) 的实现,Selenium 用户可以利

    2024年02月03日
    浏览(37)
  • selenium-XPATH定位

    XPATH定位: 相对路径     相对定位是两个杠表示“//”,相对路径易维护     例: \\\"//div[1]//div[2] 绝对路径     绝对定位用一个杠“/”, 绝对路径一个层级变化所有空间都有变化     例: /html/body/div[1]/section/section/main/div[2]/div[2]/div[1]/div[2]/button[1]/span last()方法     当标签存

    2024年02月09日
    浏览(30)
  • Selenium使用xpath定位元素

    参考资料: 【web自动化测试】xpath元素定位 接下来是使用 xpath 必须掌握的核心知识点,只要掌握好这些知识点,基本上能定义到想要的元素。 // 开头表示相对路径, 也可以用 / 开头表示绝对路径,一般用相对路径。 [] 内表示属性条件 [@name=‘accout’] 表示获取name属性等于

    2023年04月08日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包