Python 我的刮刀抛出一个错误,而不是继续

Python 我的刮刀抛出一个错误,而不是继续,python,python-3.x,selenium,selenium-webdriver,web-scraping,Python,Python 3.x,Selenium,Selenium Webdriver,Web Scraping,我已经用python结合selenium创建了一个scraper,用于从站点收集一些信息。但是,我面临的问题是,在收集了一条线索之后,scraper抛出了一个错误元素未附加到页面文档 考虑到以下准则: 有20个名称,其中for loop滚动,铲运机应该单击其中的每个名称 单击第一个名称后,它将在新页面中等待文档可用 在该页面的右上角有一个ShowMore按钮,单击该按钮可打开隐藏信息。(它仍然停留在第二页上,只显示一条新信息) 一旦信息显示,刮板将成功收集该信息 然后,它应该返回到循环开始的起始

我已经用python结合selenium创建了一个scraper,用于从站点收集一些信息。但是,我面临的问题是,在收集了一条线索之后,scraper抛出了一个错误
元素未附加到页面文档

考虑到以下准则:

  • 有20个名称,其中
    for loop
    滚动,铲运机应该单击其中的每个名称

  • 单击第一个名称后,它将在新页面中等待文档可用

  • 在该页面的右上角有一个ShowMore按钮,单击该按钮可打开隐藏信息。(它仍然停留在第二页上,只显示一条新信息)

  • 一旦信息显示,刮板将成功收集该信息

  • 然后,它应该返回到循环开始的起始页面,并点击下一个名称。但是,它没有单击下一个名称,而是抛出下面的错误(在
    链接行上。单击()

  • 我试图通过使用
    wait.until(EC.staleness\u of(item))
    来消除stale元素错误,但它不起作用

    for link in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,"div.presence-entity__image"))):
        link.click() #error thrown here
        wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,"button[data-control-name='contact_see_more']"))).click()
        item = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,".pv-contact-info__ci-container a[href^='mailto:']")))
        print(item.get_attribute("href"))
        driver.execute_script("window.history.go(-1)")
        wait.until(EC.staleness_of(item))
    
    我有一个错误:

    line 194, in check_response
        raise exception_class(message, screen, stacktrace)
    selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
    

    我试图描述正在发生的事情。非常感谢您提供的任何帮助。

    与其单击循环中的每个链接,不如收集所有链接并导航到循环中的所有链接:

    links = [link.get_attribute('href') for link in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,"a.mn-person-info__picture.ember-view")))]
    for link in links:
        driver.get(link)
        wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,"button[data-control-name='contact_see_more']"))).click()
        item = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,".pv-contact-info__ci-container a[href^='mailto:']")))
        print(item.get_attribute("href"))
    

    请注意,要获取所有链接,您可能需要向下滚动“连接”页面,通过XHR加载更多连接。

    您的解决方案怎么会一直如此完美@sir Andersson?它做得就像我从未想象过的那样。我删除了我的评论,以确保这篇文章的安全。非常感谢。