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"]
如果是这样怎么样?还是有任何其他简单的解决这个问题?谢谢
您可以尝试将它们分成两个“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
这实际上适用于我的问题,非常感谢 – 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"]')
什么是错误您收到?你的建议是可能的 –
raise exception_class(message,screen,stacktrace) StaleElementReferenceException:消息:{“errorMessage”:“元素在缓存中不存在” – Dantuzzo
你的第二个xpath是有效的,你得到的错误与你无关xpath,我已经指出了解决错误的答案 –