我在一个循环中使用了ActionChains,我试图找出如何点击某个项目并在满足某些条件时执行某些操作,在我的情况下,如果该项目不是售罄然后回到上一页继续循环。是可以这样做还是我应该使用不同的方法?我下面的代码工作正常,直到我点击可用的项目并转到另一个URL,这会触发陈旧的元素错误。
articles = driver.find_elements_by_tag_name('article')
for article in articles:
ActionChains(driver).move_to_element(article).perform()
if article.find_element_by_tag_name('a').text == "sold out":
print("sold out")
else:
print("available")
name = article.find_element_by_xpath("div/h1/a")
color = article.find_element_by_xpath("div/p/a")
name_text = name.text
color_text = color.text
print name_text, color_text
link = article.find_element_by_xpath('div/a').get_attribute('href')
print(link)
driver.find_element_by_xpath("""//*[@id="add-remove-
buttons"]/input""").click()
(...)
(...)
continue
新的设置,虽然我的列表索引超出了范围'现在错误。
articles = driver.find_elements_by_tag_name('article')
for i in range(len(articles)):
article = driver.find_elements_by_tag_name('article')[i]
if article.find_element_by_tag_name('a').text == "sold out":
print("sold out")
else:
print("available")
name = article.find_element_by_xpath("div/h1/a")
color = article.find_element_by_xpath("div/p/a")
name_text = name.text
color_text = color.text
print name_text, color_text
link = article.find_element_by_xpath('div/a').get_attribute('href')
print(link)
driver.get(link)
(...)
(...)
continue
答案 0 :(得分:0)
每当您将变量保存到页面上的某个元素并且页面中的某些内容发生更改或页面刷新时,就会出现StaleElementReferenceException。
你应该做什么在循环中启动一个新变量 。这样,每次遍历循环并且(可能)刷新页面时,都会有一个新变量,并且不会发生异常。
这样的事情可以开始循环。
# look up the articles one time outside of the loop, so we can check the number of articles
articles = driver.find_elements_by_tag_name('article')
# loop through the articles, based on the number of articles (length of list)
for i in range(len(articles)):
# each time in the for loop, look up the list of articles again and then go for element number i
article = driver.find_elements_by_tag_name('article')[i]