Python Selenium通过xpath与OR运算符查找元素

问题描述:

我在从网站获取动态元素时遇到了问题,基本上我从我的用户那里获得输入,后来用作输入到网站中,元素的名称我希望事后改变基于我之前得到的输入。因此,我想查找的类有两个可能的名称,标签标签成功或标签标签危险。眼下这是代码:Python Selenium通过xpath与OR运算符查找元素

for elem in browser.find_elements_by_xpath('.//span[@class = "label label success"]'): 
    print elem.text 

但每当我得到改变类的名称标注标签的危险,我得到以下错误

StaleElementReferenceException用户输入:消息:{“errorMessag “元素不 不在缓存中存在}

我的问题是:是否有可能做这样的事情:

find_elements_by_xpath[@class = "label label-success" OR @class = "label label-danger"] 

如果是这样怎么样?还是有任何其他简单的解决这个问题?谢谢

+0

什么是错误您收到?你的建议是可能的 –

+0

raise exception_class(message,screen,stacktrace) StaleElementReferenceException:消息:{“errorMessage”:“元素在缓存中不存在” – Dantuzzo

+0

你的第二个xpath是有效的,你得到的错误与你无关xpath,我已经指出了解决错误的答案 –

您可以尝试将它们分成两个“label label-success”列表和其他“label label-danger”列表,然后对它们进行不同的迭代。或者这样

for elem in itertools.chain(browser.find_elements_by_xpath('.//span[@class = "label label-success"]'), browser.find_elements_by_xpath('.//span[@class = "label label-danger"]')): 
print elem.text 
+0

这实际上适用于我的问题,非常感谢 – Dantuzzo

原因你得到StaleElementReferenceException是下面。

您正在创建一个WebElements列表并尝试对其进行迭代。但是你的时间收集WebElement(下面的代码)清单

browser.find_elements_by_xpath('.//span[@class = "label label success"]'): 

,并试图一些动作就可以了(下面的代码)

print elem.text 

东西正在改变页面上。 (它可能不可见),所以webdriver告诉你这个元素是陈旧的。

下面的代码我解决了这个问题。

total_elements = len(browser.find_elements_by_xpath('.//span[@class = "label label success"]')) 
for index in range(total_elements): 
    print browser.find_elements_by_xpath('.//span[@class = "label label success"]')[index].text 

另外,你应该能够使用XPath或运营商|,例如:

find_elements_by_xpath('.//span[@class = "label label success"|@class = "label label-danger"]')