python - 如何处理 Python Selenium 中的“消息:过时的元素引用:元素未附加到页面文档”
问题描述
我正在编写一个脚本来从网站上抓取产品名称,按品牌过滤。某些搜索结果可能包含多个页面,这就是问题所在。我可以抓取第一页,但是当脚本单击下一页时,会selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
显示错误消息。下面是我的代码:
def scrape():
resultList = []
currentPage = 1
while currentPage <= 2:
titleResults = WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, 'h4.mt-0')))
resultList.append(titleResults)
checkNextPage = WebDriverWait(driver, 30).until(EC.visibility_of_all_elements_located((By.XPATH, "//div/nav/ul/li/a[@aria-label='Next']")))
for cnp in checkNextPage:
nextPageNumber = int(cnp.get_attribute("data-page"))
currentPage += 1
driver.find_element_by_xpath("//div/nav/ul/li/a[@aria-label='Next']").click()
for result in resultList[0]:
print("Result: {}".format(result.text))
我认为错误是在.click()
被调用时触发的。在求助于在这里发布这个问题之前,我在互联网上做了很多搜索,因为要么我不理解其他文章/帖子的解决方案,要么它们不适用于我的案例。
解决方案
陈旧元素是指旧元素或不再可用的元素。
我认为错误是由最后一行引起的。
您应该在元素变得不可用之前提取元素文本。
def scrape():
resultList = []
currentPage = 1
while currentPage <= 2:
titleResults = WebDriverWait(driver,
10).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, 'h4.mt-0')))
// Extract elements text
results_text = [titleResults[i].text for i in range(0, len(titleResults))]
resultList.extend(results_text)
checkNextPage = WebDriverWait(driver, 30).until(EC.visibility_of_all_elements_located((By.XPATH, "//div/nav/ul/li/a[@aria-label='Next']")))
for cnp in checkNextPage:
nextPageNumber = int(cnp.get_attribute("data-page"))
currentPage += 1
driver.find_element_by_xpath("//div/nav/ul/li/a[@aria-label='Next']").click()
print("Result: {}".format(resultList))