首页 > 解决方案 > 运行我的脚本时无法摆脱“陈旧元素”错误

问题描述

我用 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()

标签: pythonpython-3.xseleniumselenium-webdriverweb-scraping

解决方案


你可以试试下面的代码:

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()

推荐阅读