Python Selenium使用OR运算符

时间:2017-10-11 09:52:15

标签: python selenium xpath selenium-webdriver

我在从网站获取动态元素时遇到了麻烦,基本上我从我的用户那里获得了输入,后来被用作网站的输入,我想要获得的元素的名称随后基于我之前得到的输入。因此,我想要找到的类有两个可能的名称,标签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"]
如果是这样怎么样?或者这个问题有其他简单的解决方案吗?谢谢

3 个答案:

答案 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