当前位置: 首页 > 知识库问答 >
问题:

Python 硒 错误: 消息: 陈旧的元素引用: 元素未附加到页面文档

孙恩
2023-03-14

我有一个客户想要从网站上抓取一些信息。循环第一次工作,但第二次发生错误。有什么帮助吗?我也不建议去实际的网站,它很粗略。

代码:

URL = 'https://avbebe.com/archives/category/高清中字/page/5'
driver = webdriver.Chrome(executable_path=PATH, options=options)
driver.get(URL)

time.sleep(5)

Vids = WebDriverWait(driver, 10).until(EC.visibility_of_any_elements_located((By.CLASS_NAME, 'entry-thumbnails-link')))
for title in Vids:
    time.sleep(3)
    actions = ActionChains(driver)
    WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'entry-thumbnails-link')))
    driver.execute_script("arguments[0].click();", title)#Where error occurs
    time.sleep(5)
    VidUrl = driver.current_url
    VidTitle = driver.find_element_by_xpath('//*[@id="post-69331"]/h1/a').text
    try:
        VidTags = driver.find_elements_by_class_name('tags')
        for tag in VidTags:
            VidTag = tag.find_element_by_tag_name('a').text
        
    except NoSuchElementException or StaleElementReferenceException:
        pass

    with open('data.csv', 'w', newline='', encoding = "utf-8") as f:
        fieldnames = ['Title', 'Tags', 'URL']
        thewriter = csv.DictWriter(f, fieldnames=fieldnames)

        thewriter.writeheader()
        thewriter.writerow({'Title': VidTitle, 'Tags': VidTag, 'URL': VidUrl})
    driver.get(URL)
    print('done')        

错误:

selenium.common.exceptions.StaleElementReferenceException:消息:陈旧的元素引用:元素未附加到页面文档

完全终端回溯:

完成回溯(最近的最后一次调用):文件"c:\用户\Heage\Coding\自由职业\客户端\Genewang-webscrap\main.py",第24行,在driver.execute_script("参数[0]. Click();",标题)文件"C:\用户\Heage\AppData\本地\程序\Python\Python39\lib\site-包\selenium\webdri\远程\webdriver.py",第634行,在execute_script返回self.execute(命令,{File"C:\用户\Heage\AppData\本地\程序\Python\Python39\lib\site-包\selenium\webdri\远程\webdriver.py",第321行,在执行self.errorhandler.check_response(响应)文件"C:\用户\Heage\AppData\本地\程序\Python\Python39\lib\site-包\selenium\webdri\远程\errorhandler.py",第242行,在check_response引发exception_class(消息、屏幕、stacktrac)selenium.common.exceptions.StaleElementReferenceException:消息:陈旧的元素引用:元素文档(会话信息:chrome=91.0.4472.114)

共有1个答案

张翰音
2023-03-14

您可以使用普通的单击方法,将元素存储在列表中,获取元素索引并单击索引。

您可以使用下面的代码更新您的代码

video_text = driver.find_elements_by_class_name("entry-thumbnails-link")
    WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'entry-thumbnails-link')))
video_text[0].click()

完整的代码将如下所示

Vids = WebDriverWait(driver, 10).until(EC.visibility_of_any_elements_located((By.CLASS_NAME, 'entry-thumbnails-link')))
for title in Vids:
    time.sleep(3)
    actions = ActionChains(driver)
    video_text = driver.find_elements_by_class_name("entry-thumbnails-link")
    WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'entry-thumbnails-link')))
    video_text[0].click()
    time.sleep(5)
    VidUrl = driver.current_url
    VidTitle = driver.find_element_by_xpath('//*[@id="post-69331"]/h1/a').text
    try:
        VidTags = driver.find_elements_by_class_name('tags')
        for tag in VidTags:
            VidTag = tag.find_element_by_tag_name('a').text

    except NoSuchElementException or StaleElementReferenceException:
        pass

    with open('data.csv', 'w', newline='', encoding="utf-8") as f:
        fieldnames = ['Title', 'Tags', 'URL']
        thewriter = csv.DictWriter(f, fieldnames=fieldnames)

        thewriter.writeheader()
        thewriter.writerow({'Title': VidTitle, 'Tags': VidTag, 'URL': VidUrl})
    driver.get(URL)
    print('done')

也尽量不要使用这些多睡眠()。

 类似资料:
  • 我有一个下拉列表,我第一次能够按索引选择元素。当我第二次尝试选择元素时,它会抛出陈旧的元素引用错误。我尝试了try catch block,显式等待,但没有任何效果。

  • 问题内容: 在我的C#应用​​程序中使用Selenium Web驱动程序时,出现以下错误: OpenQA.Selenium.StaleElementReferenceException:陈旧元素引用:元素未附加到页面文档 在此代码中: 错误行在中,但这是在XPath之前指定的相同链接中成功执行但在最后一次尝试中失败的过程!那么这个错误是什么意思以及如何解决呢? 问题答案: 这意味着在页面中更改的元

  • 所以我正在尝试制作一个在flickr上运行的程序,我已经准备好了所有的东西,直到cookies弹出,它打败了我。 我正在尝试切换到这个iframe,这样我就可以使用“全部接受”按钮。然而,iframe的ID是动态的,所以为了避免这个问题,我尝试以标题为目标。 但是我现在收到了这个错误消息。 我已经尝试添加了10秒的等待时间来给它加载时间,我知道错误的原因是元素不再连接到DOM,但我不知道要使用什么

  • 我正在使用C#和Selenium Chromedriver来做一个测试项目,以抓取谷歌地图。 在到达第二个循环之前,它运行良好: 返回: OpenQA. Selenium.过时元素引用:元素未附加到页面文档 这是我所有的代码: 任何帮助将不胜感激!

  • 我的程序抛出一条错误消息“stale element reference:element未附加到页面文档”。当我查看前面的帖子(如Python Selenium陈旧元素修复)时,我发现我没有在调用click函数后更新url。我更新了网址。然而,它并没有解决这个问题。谁能指出我哪里出错了?下面是我的代码: