python - 尝试使用 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
我怎么解决这个问题?
解决方案
这是避免该错误的一种快速而肮脏的方法,请像这样更改您的代码:
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)")
推荐阅读
- shortest-path - 为什么矩形的两个角之间的路径看起来很奇怪?
- bash - 如果特定列之后超过 60% 或更多的列包含相同的特定值,如何删除整行?
- python - ImportError:无法从“mypackage”(未知位置)导入名称“app”
- javascript - 给出 a 中的每个第二个元素
- 不同的 CSS 样式属性
- php - 随机文件选择程序
- c# - 如何将目录路径、ChromeOptions 和 ChromeDriverService 传递给新的 ChromeDriver?
- c - 如何拆分多行字符串并将它们存储到C中的json数组中
- java - 如何用“@”替换所有空行?
- javascript - Jquery 只选择除一个具有相似 ID 的所有
- python - 如何计算 Word2Vec 训练模型中的词频?