📌  相关文章
📜  find_element_by_xpath() 驱动方法 – Selenium Python(1)

📅  最后修改于: 2023-12-03 14:41:11.807000             🧑  作者: Mango

使用XPath定位元素 - Selenium Python

当我们需要通过框架或面板嵌套时,或者需要找到没有唯一id或name属性的元素时,使用XPath语法就变得必要了,因为XPath语法可以让我们使用元素的任何属性来定位。

XPath全称XML Path Language,它是一种基于XML的查询语言,可以使用XPath来定位文档中的任何元素。

在Selenium Python中,我们可以使用find_element_by_xpath()方法来使用XPath定位元素。

XPath语法

XPath语法非常灵活,但对于Selenium Python的定位来说,只需要知道一些基本的规则和语法即可。

选择器

XPath有两种选择器:绝对路径和相对路径。

  • 绝对路径:从根节点开始匹配,为XPath表达式的完整路径。
  • 相对路径:以当前节点为参考点,进行匹配。

我们通常使用相对路径,因为绝对路径可能会因为页面结构的变化导致失败。

路径表达式

路径表达式是XPath的核心,由多个路径步骤组成。

路径步骤是由轴、节点测试和零或多个谓词组成的。

以下是路径表达式的一些示例:

  • /html/body/div[2]/div[1]/div/span[1]:绝对路径。
  • //span[@id='example']:相对路径,查找id为example的span标签。

轴指定了要在哪些节点上进行搜索。

以下是XPath的一些常用轴:

  • ancestor:查找所有祖先节点。
  • ancestor-or-self:查找所有祖先或当前节点。
  • attribute:查找所有属性。
  • child:查找所有直接子节点。
  • descendant:查找所有后代节点。
  • descendant-or-self:查找所有后代或当前节点。
  • following:查找当前节点之后的所有节点。
  • following-sibling:查找当前节点之后的所有兄弟节点。
  • parent:查找父节点。
  • preceding:查找当前节点之前的所有节点。
  • preceding-sibling:查找当前节点之前的所有兄弟节点。
  • self:查找当前节点。
节点测试

节点测试用于确定满足给定条件的节点类型。

以下是XPath的一些常用节点测试:

  • node():匹配任何节点。
  • comment():匹配注释节点。
  • text():匹配文本节点。
  • processing-instruction():匹配处理指令节点。
  • *:匹配所有元素节点。
  • node()[not(self::*)]:匹配非元素节点。
谓词

谓词用于过滤节点,使得XPath表达式选择的节点更加精确。

以下是XPath的一些常用谓词:

  • [@attribute]:匹配具有指定属性的节点。
  • [@attribute='value']:匹配具有指定属性和属性值的节点。
  • [position()]:匹配在指定位置的节点。
  • [last()]:匹配最后一个节点。
  • [text()='value']:匹配具有指定文本内容的节点。
  • [contains(@attribute,'value')]:匹配具有指定属性并且属性值包含指定子串的节点。
使用XPath定位元素

使用XPath定位元素,需要在浏览器的开发者工具中使用XPath获取元素的XPath表达式,然后将其传入find_element_by_xpath()方法中即可。

以下是一个示例:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.example.com/')
element = driver.find_element_by_xpath('//input[@id="search"]')

在这个示例中,我们使用了一个相对路径,查找id为search的input元素。

如果想要查找多个元素,可以使用find_elements_by_xpath()方法。

elements = driver.find_elements_by_xpath('//ul[@class="list"]/li')

在这个示例中,我们使用了路径表达式//ul[@class="list"]/li,匹配了所有class为list的ul元素下的所有li元素。

总结

XPath语法非常灵活,可以使用各种各样的选择器、轴、节点测试和谓词来定位元素。但是,在使用XPath定位元素时,我们需要注意不使用绝对路径,以避免因为页面结构的变化导致失败。

在实际开发中,建议使用Chrome浏览器的开发者工具来获取元素的XPath表达式,以确保XPath表达式的正确性。