我怎样才能做这样的事情,假设每次这些"按钮"按下页面正在重新加载
element = driver.find_element_by_xpath("//select[@name='name']")
all_options = element.find_elements_by_tag_name("option")
for option in all_options:
print("Value is: %s" % option.get_attribute("value"))
option.click()
此代码是从示例中复制而来的:http://selenium-python.readthedocs.org/en/latest/navigating.html
没有像这样的错误?
selenium.common.exceptions.StaleElementReferenceException: Message: Element not found in the cache - perhaps the page has changed since it was looked up
Stacktrace:
at fxdriver.cache.getElementAt (resource://fxdriver/modules/web-element-cache.js:8329:1)
at Utils.getElementAt (file:///tmp/tmpIxNh0L/extensions/fxdriver@googlecode.com/components/command-processor.js:7922:10)
at fxdriver.preconditions.visible (file:///tmp/tmpIxNh0L/extensions/fxdriver@googlecode.com/components/command-processor.js:8957:11)
at DelayedCommand.prototype.checkPreconditions_ (file:///tmp/tmpIxNh0L/extensions/fxdriver@googlecode.com/components/command-processor.js:11618:15)
at DelayedCommand.prototype.executeInternal_/h (file:///tmp/tmpIxNh0L/extensions/fxdriver@googlecode.com/components/command-processor.js:11635:11)
at DelayedCommand.prototype.executeInternal_ (file:///tmp/tmpIxNh0L/extensions/fxdriver@googlecode.com/components/command-processor.js:11640:7)
at DelayedCommand.prototype.execute/< (file:///tmp/tmpIxNh0L/extensions/fxdriver@googlecode.com/components/command-processor.js:11582:5)
答案 0 :(得分:2)
StaleElementReferenceException
通常表示页面已更改。您构建的all_options
列表不再有效,因为首次单击该选项可能会更改页面。
我会做一些事情,比如构建一个值列表,然后使用Select
功能并遍历该值列表:
from selenium.webdriver.support.ui import Select
element = driver.find_element_by_xpath("//select[@name='name']")
all_options = element.find_elements_by_tag_name("option")
optionValue = []
for option in all_options:
print("Value is: %s" % option.get_attribute("value"))
optionValue.append(option.get_attribute("value"))
selectBox = Select(driver.find_element_by_xpath("//select[@name='name']"))
for value in optionValue:
selectBox.select_by_value(value)
答案 1 :(得分:0)
您可能需要以不同的方式进行此操作,每次页面加载时,您的元素列表都是脏的并且不再存在。因此,似乎你应该遍历所有元素获取它们的值并将其存储在列表中。然后,您应该迭代该列表,以便根据其xpath值找到元素,这些元素的值与列表中的值相同。然后单击该元素。这样您就没有过期元素的列表,但是您可以使用可用于构建有效xpath表达式的值列表来执行相同的操作。