我正在使用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个元素的顺序很重要。在
我会用一个CSS选择器。它们要短得多,更容易阅读,也更容易写作。在
CSS选择器速度更快,支持范围更广。我确实使用XPath,但仅当我需要通过包含的文本来查找元素时,这是只有XPath才能做到的。在
CSS Selector Reference
Selenium Tips: CSS Selectors
Taming Advanced CSS Selectors
找到了我自己的答案!“or”运算符不用于计算2个节点集。对于该任务,您必须使用“|”运算符。| !=或。因此,将两者结合起来的正确XPath是:
这将返回一个20项的列表,所有项都按顺序排列。在
相关问题 更多 >
编程相关推荐