python - 运行我的脚本时无法摆脱“陈旧元素”错误
问题描述
我用 selenium 在 python 中编写了一个脚本。该脚本应该点击网页中的一些链接。当我运行我的脚本时,它确实单击了第一个链接,然后引发了错误stale element reference: element is not attached to the page document
,而不是追逐下一个链接。在过去的几个小时里,我进行了很多搜索,以找到摆脱此错误的任何解决方案,但没有运气。
我对他们的数据不感兴趣,所以除了点击过程之外的任何解决方案都不是我想要的。我怎样才能点击链接直到最后一个链接?
这是我迄今为止的尝试:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def click_links(driver,url):
driver.get(url)
for olink in wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, "result-row__item-hover-visualizer"))):
olink.click()
time.sleep(3)
if __name__ == '__main__':
weblink = "https://www.hitta.se/s%C3%B6k?vad=Markiser+%26+Persienner"
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
try:
click_links(driver,weblink)
finally:
driver.quit()
解决方案
你可以试试下面的代码:
def click_links(driver,url):
driver.get(url)
links_len = len(wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, "result-row__item-hover-visualizer"))))
for index in range(links_len):
cookies_bar = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '[data-bind="visible: showCookieDialog"]')))
driver.execute_script("arguments[0].hidden='true';", cookies_bar)
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'button[data-track="click-show-more"]'))).click()
entry = wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, "result-row__item-hover-visualizer")))[index]
entry.click()
time.sleep(3)
driver.back()
推荐阅读
- arrays - 需要传递 json 字符串来创建 Json 文件并传递给 AWS S3 输入流
- html - CSS将文本旋转到垂直并从下到上滚动无限动画
- javascript - Draft.js:对类组件的回调导致父对象中的新对象而不是修改
- c++ - 为什么 ostream::put() 将最后一个字符写入两次?
- javascript - 如何抛出自定义错误?
- android - 如何将字符串传递给布局?
- windows - 如何在 Windows 10 上可靠地复制数 TB 的文件夹?
- c++ - NSTask 启动或弹出需要 15-20 秒才能在 macOS 中启动简单的 Bash 脚本
- react-native - React Native - 标签按钮 - 开箱即用 vs 自定义
- python - 在 Python3 中使用 .replace() 永久更改字符串