XPath 用于两个单独的路径?

Pet*_*nds 3 python selenium xpath

我正在使用 Selenium Webdriver 通过文本的 XPath 来查找网页上的文本。我想查找两个单独的条件:类为“正确”的 Span 标签和类为“answer_ Correction”的 li 标签的包含父标签的 Span 标签。

有 4 个“answer_ Corrections”元素和 16 个“正确”元素。

到目前为止,我想出的 XPath 是:

answers = browser.find_elements_by_xpath('//li[@class="answer_correction"]/label/span' or '//span[@class="correct"]')
Run Code Online (Sandbox Code Playgroud)

我认为这应该返回两个标准的 WebElements 列表。

这段代码:

browser.find_elements_by_xpath('//li[@class="answer_correction"]/label/span')
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,返回一个包含 4 个元素的列表。

这段代码:

 browser.find_elements_by_xpath('//span[@class="correct"]')
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,返回一个包含 16 个元素的列表。

但是,当我尝试创建的 XPath 来合并这两个路径时​​,它仅返回“或”之前第一个路径中的 Web 元素。

answers = browser.find_elements_by_xpath('//li[@class="answer_correction"]/label/span' or '//span[@class="correct"]')
Run Code Online (Sandbox Code Playgroud)

仅返回 4 个“answer_ Corrections”的列表

当我颠倒顺序时

answers = browser.find_elements_by_xpath('//span[@class="correct"]' or '//li[@class="answer_correction"]/label/span')
Run Code Online (Sandbox Code Playgroud)

仅返回 16 个“正确”元素。

这导致人们相信声明中的“或”有问题。

将两个单独的 XPath 合并为一个的正确方法是什么?

我不能只是将一个列表附加到另一个列表上,因为这 20 个元素的顺序很重要。

Pet*_*nds 6

找到了我自己的答案!“或”运算符不适用于计算 2 个节点集。对于该任务,您必须使用“|” 操作员。| != 或。因此,将两者结合起来的正确 XPath 是:

answers = browser.find_elements_by_xpath('//li[@class="answer_correction"]/label/span | //span[@class="correct"]')
Run Code Online (Sandbox Code Playgroud)

这将返回一个包含 20 个项目的列表,全部按顺序排列。