循环链接列表

2024-05-23 13:27:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下用例。 我想在此网站上浏览不同的游戏: https://sports.bwin.de/en/sports/football-4/betting/germany-17

每个游戏都有一个详细的页面可供此元素查找:

网格事件包装器

通过循环这些元素,我必须单击它们中的每一个,从详细页面中获取数据并返回

大概是这样的:

events = driver.find_elements_by_class_name('grid-event-wrapper')
for event in events:
    event.click()
    time.sleep(5)
    
# =============================================================================
#     Logic for scraping detailed information
# =============================================================================

    driver.back()
    time.sleep(5)

第一次迭代运行良好,但到第二次迭代时,我抛出以下异常:

StaleElementReferenceException: stale element reference: element is not attached to the page document
  (Session info: chrome=90.0.4430.93)

我尝试了不同的方法,比如重新初始化我的事件,但没有任何效果。 我确信,即使我必须回到浏览器中,也有机会保持状态

提前谢谢你的帮助


Tags: httpsevent游戏元素fortime网站driver
2条回答

请尝试以下操作,而不是for event in events:循环:

size = len(driver.find_elements_by_class_name('grid-event-wrapper'))
for i in range(1,size+1):
   xpath = (//div[@class='grid-event-wrapper'])[i]
   driver.find_elements_by_xpath(xpath).click  


   now you do here what you want and finally get back

单击元素会重新加载页面,从而丢失旧的引用

你可以做两件事

一种是保留一个全局集,在其中存储游戏的“ID”(可以使用游戏的URL(例如https://sports.bwin.de/en/sports/events/fsv-mainz-05-hertha-bsc-11502399作为ID或任何其他区别特征)

或者,您可以首先提取所有链接。(这些是grid-event-wrapper的第一个子项,因此您可以执行event.find_element_by_tagname('a')并访问这些链接的href属性。提取所有链接后,您可以逐个加载它们

events = driver.find_elements_by_class_name('grid-event-wrapper')
links = []
for event in events:
    link = event.find_element_by_tag_name('a').get_attribute('href')
    links.append(link)

for link in links:
    # Load the link
    # Extraction logic

我觉得第二条路比较干净

相关问题 更多 >