Selenium-使用Element.click()时出现失效元素引用异常



错误输出:

selenium.common.exceptions.StaleElementReferenceException: Message: The element reference of <span class="a-size-medium a-color-base a-text-normal"> is stale; either 
the element is no longer attached to the DOM, it is not in the current frame context, or the document has been refreshed

我试着用硒做以下事情:

  1. 去亚马逊
  2. 用python搜索自动化无聊的东西
  3. 单击第一个产品标题
  4. 如果价格标签元素在产品网站上,请打印它,然后返回上一页
  5. 如果不可用,请返回上一页
  6. 转到下一个产品标题,从步骤4开始重复

但是在click()上失败

代码:

def experiment2():
browser = webdriver.Firefox()
browser.get("https://www.amazon.com/")
searchelement = browser.find_element_by_css_selector("#twotabsearchtextbox")
searchelement.send_keys('automate the boring stuff with python')
searchelement.submit()
time.sleep(5)
elements = browser.find_elements_by_css_selector("span.a-color-base.a-text-normal")
for element in elements:
element.click()
try:
element = browser.find_element_by_css_selector("span.a-size-medium:nth-child(2)")
print(element.text)
except:
browser.back()
time.sleep(2)
continue
browser.back()
time.sleep(2)

是什么原因导致了这个问题?

由于您使用driver.back((,它刷新了页面,并且您捕获的元素不再附加到页面。您需要重新分配这些元素。

尝试以下代码

def experiment2():
browser = webdriver.Firefox()
browser.get("https://www.amazon.com/")
searchelement = browser.find_element_by_css_selector("#twotabsearchtextbox")
searchelement.send_keys('automate the boring stuff with python')
searchelement.submit()
time.sleep(5)
elements = browser.find_elements_by_css_selector("span.a-color-base.a-text-normal")
for element in range(len(elements)):
elements = browser.find_elements_by_css_selector("span.a-color-base.a-text-normal")
elements[element].click()
try:
element = browser.find_element_by_css_selector("span.a-size-medium:nth-child(2)")
print(element.text)
except:
browser.back()
time.sleep(2)
continue
browser.back()
time.sleep(2)

最新更新