[英]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.