【问题标题】:Getting an "Stale element reference" When trying to loop through pages with the intention of scraping multiple pages获取“过时元素引用”时尝试循环浏览页面以抓取多个页面
【发布时间】:2021-06-24 12:32:38
【问题描述】:

我的 Python 代码有问题。意图是使用 Selenium 打开网站(craigslist),搜索一个文本(Honda)然后刮掉这个网站的三个页面。我不断收到

“StaleElementReferenceException:过时的元素引用:元素未附加到页面文档”异常

当迭代到达第二页时。我无法准确说出为什么它停在第二页而不是再次单击“下一步”按钮以到达第三页,然后最终抓取数据并打印出来。

这是我的代码:

import time
from selenium import webdriver 
from bs4 import BeautifulSoup


DRIVER_PATH = "/Users/mouradsal/Downloads/DataSets Python/chromedriver"
URL = "https://vancouver.craigslist.org/"

browser = webdriver.Chrome(DRIVER_PATH)
browser.get(URL)
browser.maximize_window()

time.sleep(4)

search = browser.find_element_by_css_selector("#query")
search.send_keys("Honda")
search.send_keys(u'\ue007')


content = browser.find_elements_by_css_selector(".hdrlnk")

button = browser.find_element_by_css_selector(".next")

for i in range(0,3):
    button.click()
    print("Count: "+ str(i))
    time.sleep(10)
print("done loop ")

for e in content:
    start = e.get_attribute("innerHTML")
    soup = BeautifulSoup(start, features=("lxml"))
    print(soup.get_text())
    print("***************************")

任何建议将不胜感激!

谢谢

【问题讨论】:

    标签: python selenium beautifulsoup webdriver screen-scraping


    【解决方案1】:
    for i in range(0,3):
        button = driver.find_element_by_css_selector(".next")
        button.click()
        print("Count: "+ str(i))
        time.sleep(10)
    

    您需要嵌套查找的元素,因为每次进入新页面时 Web 元素都会发生变化。

    【讨论】:

    • 您好,可以进入下两页,谢谢!只是一个后续问题,我是否需要将我的代码的网络抓取部分添加为第一个 for 循环中的另一个循环,因为它每次都会进入一个新页面?如果抓取循环“for e in content:”在外面,我认为它不能从前两页抓取任何数据,对吧?
    • 没错。你也必须嵌套它。
    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    相关资源
    最近更新 更多