簡體   English   中英

循環鏈接列表 - Selenium Python

[英]Loop a List of Links - Selenium 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)

我嘗試了不同的方法,例如重新初始化我的事件,但沒有任何效果。 我敢肯定,即使我必須在瀏覽器中返回 go,也有機會保留 state。

提前感謝您的幫助

而不是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

我覺得第二種方式更干凈一些。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM