我在从网站获取动态元素时遇到了麻烦,基本上我从我的用户那里获得了输入,后来被用作网站的输入,我想要获得的元素的名称随后基于我之前得到的输入。因此,我想要找到的类有两个可能的名称,标签label-success或label label-danger。现在这是代码:
for elem in browser.find_elements_by_xpath('.//span[@class = "label label success"]'):
print elem.text
但每当我从用户那里获得输入时,将类名更改为label label-danger我就会收到以下错误
StaleElementReferenceException:消息:{“errorMessag”元素 缓存中不存在}
我的问题是:是否可以做类似的事情:
find_elements_by_xpath[@class = "label label-success" OR @class = "label label-danger"]
如果是这样怎么样?或者这个问题有其他简单的解决方案吗?谢谢
答案 0 :(得分:1)
您可以尝试将它们分成两个列表,一个用于“label label-success”,另一个用于“label label-danger”,然后以不同的方式迭代它们。或者像这样
puppet apply
答案 1 :(得分:1)
或者,您应该能够使用XPath OR运算符,例如:
find_elements_by_xpath('.//span[@class = "label label success"|@class = "label label-danger"]')
答案 2 :(得分:0)
您获得 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