Python Selenium通过xpath和或op查找元素

2024-05-20 22:21:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我在从一个网站得到一个动态元素时遇到了麻烦,基本上我从我的用户那里得到了输入,后来被用作一个网站的输入,我想得到的元素的名称在我之前得到的输入的基础上发生了变化。因此,我要查找的类有两个可能的名称,label 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: Message: {"errorMessag "Element does not exist in cache}

我的问题是:有没有可能做到:

^{pr2}$

如果是,怎么办?或者有没有其他简单的方法来解决这个问题?谢谢你


Tags: 代码用户inbrowser名称元素for网站
3条回答

您得到StaleElementReferenceException的原因如下。在

您正在创建一个WebElements列表并尝试遍历该列表。但是当你收集到WebElement的列表时(下面的代码)

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

并试图对此采取行动(代码如下)

^{pr2}$

页面上发生了变化。(可能不可见),因此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"]')

您可以尝试将它们分成两个列表,一个用于“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

相关问题 更多 >