【问题标题】:Selenium returning to previous page in a for loopSelenium 在 for 循环中返回上一页
【发布时间】:2020-08-05 06:57:57
【问题描述】:

我正在制作一个抓取工具来抓取博彩网站的数据,这是一个示例代码,它将抓取赛事、球队和赔率。这个想法是迭代所有可用于这项运动的比赛。我能够找到链接并单击第一个链接,然后我还能够抓取数据并将其返回到列表中(稍后将被放入数据库中)。 我的问题是我无法返回上一页点击下一个链接,尝试执行此操作时出现错误。这是我的代码:

driver = webdriver.Chrome(Path)
driver.get("https://www.neds.com.au/sports/table-tennis/")
a = []

links = driver.find_elements_by_class_name("matches-filter__link")

for l in links:
    
    l.click()
    tt_matches = driver.find_elements_by_class_name("sport-event-card")
    for match in tt_matches:
        Match = match.find_element_by_css_selector(".sports-event-title__name-text").text
        a.append(Match)
        Teams = match.find_elements_by_css_selector(".price-button")
        for team in Teams:
            team_name = team.find_element_by_css_selector(".price-button-name").text
            team_odd = team.find_element_by_css_selector(".price-button-odds-price span").text
            a.append(team_name)
            a.append(team_odd)
    driver.back()
    time.sleep(2)

driver.quit()

它返回此错误:

raise exception_class(message, screen, stacktrace)

StaleElementReferenceException:过时的元素引用:元素是 未附加到页面文档(会话信息: 铬=84.0.4147.105)

我该如何解决这个问题,我认为问题出在 driver.back() 上,我也尝试了 l.back(),但它仍然无法正常工作。

【问题讨论】:

  • 我认为您需要在返回页面后重新定义links。请参阅this 了解更多信息。
  • 错误到底发生在哪里?

标签: selenium web-scraping beautifulsoup staleelementreferenceexception


【解决方案1】:

在这种情况下,您需要收集 URL,然后导航到它们。您可以使用以下代码:

driver.get("https://www.neds.com.au/sports/table-tennis/")
time.sleep(5)
a = []

links = driver.find_elements_by_class_name("matches-filter__link")
urls = [l.get_attribute('href') for l in links]
for u in urls:
    print(u)
    driver.get(u)
    tt_matches = driver.find_elements_by_class_name("sport-event-card")
    for match in tt_matches:
        Match = match.find_element_by_css_selector(".sports-event-title__name-text").text
        a.append(Match)
        Teams = match.find_elements_by_css_selector(".price-button")
        for team in Teams:
            team_name = team.find_element_by_css_selector(".price-button-name").text
            team_odd = team.find_element_by_css_selector(".price-button-odds-price span").text
            a.append(team_name)
            a.append(team_odd)
    time.sleep(2)

print(a)
driver.quit()

【讨论】:

  • 我想了解错误的来源以及原因?我遇到了同样的错误,但是当我在做driver.execute_script() 时,我没有发现任何可以回答的问题。深入 urllib3 AFAICT 似乎还可以,但是 selenium 的响应是:{"value":{"error":"stale element reference","message":"stale element reference: stale element not found\\n (Session info: chrome=84.0.4147.105)","stacktrace":"#0 0x561877802d99 \\u003Cunknown>\\n"}}' 该命令在失败之前运行了很多次。有什么限制或计数器吗?
猜你喜欢
  • 2013-01-18
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
  • 2015-12-30
  • 2015-02-24
  • 2014-10-25
  • 2016-08-23
  • 2020-10-05
相关资源
最近更新 更多