两个独立路径的XPath?

2024-06-02 05:37:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Selenium Webdriver使用文本的XPath定位网页上的文本。我想查找两个不同的条件:类为“correct”的Span标记和具有类“answer_ction”的li标记的父标签Span标记。在

有4个“答案更正”元素和16个“正确”元素。在

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

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

我认为这个应该返回两个条件中的WebElements列表。在

此代码:

^{pr2}$

按预期返回4个元素的列表。在

此代码:

 browser.find_elements_by_xpath('//span[@class="correct"]')

按预期返回16个元素的列表。在

但是,当我尝试使用我创建的XPath来合并这两者时,它只返回“or”前面第一个路径中的web元素。在

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

仅返回4个“答案更正”的列表

当我颠倒顺序时

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

只返回16个“正确”元素。在

这会导致他们认为语句中的“或”有问题。在

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

我不能把一个列表附加到另一个列表中,因为这20个元素的顺序很重要。在


Tags: oranswer标记browser元素列表byli
2条回答

我会用一个CSS选择器。它们要短得多,更容易阅读,也更容易写作。在

li.answer_correction > label > span , span.correct

CSS选择器速度更快,支持范围更广。我确实使用XPath,但仅当我需要通过包含的文本来查找元素时,这是只有XPath才能做到的。在

CSS Selector Reference

Selenium Tips: CSS Selectors

Taming Advanced CSS Selectors

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

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

这将返回一个20项的列表,所有项都按顺序排列。在

相关问题 更多 >