首页 > 解决方案 > 尝试使用 selenium 进行迭代时出现此错误。“过时的元素参考:元素未附加到页面文档”

问题描述

我写了一个python脚本。首先,它访问这个网站。然后点击右侧的箭头,进入新的网页收集一些数据。最后回到上一页,对下一项做同样的事情。

网页:https ://register.fca.org.uk/s/search?q=capital&type=Companies

这是代码。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.wait import WebDriverWait
import time

url = 'https://register.fca.org.uk/s/search?q=capital&type=Companies'
service = Service('link to come driver')
service.start()
driver = webdriver.Remote(service.service_url)
driver.get(url)
time.sleep(12)


divs = driver.find_elements_by_xpath('//div[@class="result-card_main"]')
for d in divs:

   RN = ''
   companyName = ''
   companyName =   d.find_element_by_tag_name('h2').text
   RNData = d.find_element_by_xpath('.//div[@class="result-card_figure-offset"]').text
   RN = RNData.split(':')[1].strip()

   d.click()
   time.sleep(12)

   phoneNumber = ''
   phoneNumberData =  driver.find_elements_by_xpath('//*[@id="who-is-this-details-content"]/div[1]/div[2]/div[2]/div/div/div[2]')
   phoneNumber = phoneNumberData[0].text.split('\n')[1]

   print(RN)
   print(companyName)
   print(phoneNumber)

   driver.execute_script("history.back();")

它给了我这个错误:

  selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document

我怎么解决这个问题?

标签: pythonseleniumselenium-webdriver

解决方案


这是避免该错误的一种快速而肮脏的方法,请像这样更改您的代码:

url = 'https://register.fca.org.uk/s/search?q=capital&type=Companies'

driver.get(url)
time.sleep(12)


divs = driver.find_elements_by_xpath('//div[@class="result-card_main"]')
for i in range(len(divs)):
   time.sleep(4)
   d = driver.find_elements_by_xpath('//div[@class="result-card_main"]')
   RN = ''
   companyName = ''
   companyName = d[i].find_element_by_tag_name('h2').text
   RNData = d[i].find_element_by_xpath('.//div[@class="result-card_figure-offset"]').text
   RN = RNData.split(':')[1].strip()

   d[i].click()
   time.sleep(12)

   phoneNumber = ''
   phoneNumberData =  driver.find_elements_by_xpath('//*[@id="who-is-this-details-content"]/div[1]/div[2]/div[2]/div/div/div[2]')
   phoneNumber = phoneNumberData[0].text.split('\n')[1]

   print(RN)
   print(companyName)
   print(phoneNumber)

   driver.execute_script("window.history.go(-1)")

推荐阅读