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 个元素的顺序很重要。
找到了我自己的答案!“或”运算符不适用于计算 2 个节点集。对于该任务,您必须使用“|” 操作员。| != 或。因此,将两者结合起来的正确 XPath 是:
answers = browser.find_elements_by_xpath('//li[@class="answer_correction"]/label/span | //span[@class="correct"]')
Run Code Online (Sandbox Code Playgroud)
这将返回一个包含 20 个项目的列表,全部按顺序排列。
| 归档时间: |
|
| 查看次数: |
2027 次 |
| 最近记录: |