這是我第一次使用 selenium 進行動態分頁抓取。我想抓取以下網站。基本上這個想法是我想抓取所有表 118 頁的表并存盤在一些 json 中。我試圖獲得第一張桌子并且它列印得很好但是當我嘗試進入下一個按鈕時,它會拋出例外
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: The element reference of <tr class="even"> is stale; either the element is no longer attached to the DOM, it is not in the current frame context, or the document has been refreshed
這是我到目前為止嘗試過的一小部分代碼
driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
driver.get("https://merolagani.com/Floorsheet.aspx")
for z in (driver.find_elements(By.XPATH, '//tbody/tr')):
table_data = z.find_elements_by_tag_name('td')
for td in table_data:
print(td.text)
time.sleep(1)
z.find_element(By.XPATH, "(//a[@title='Next Page'])[2]").click()
這是我第一次抓取動態分頁,任何幫助都會很有用,謝謝。
uj5u.com熱心網友回復:
StaleElementReferenceException 意味著頁面 DOM 結構已經更改,而您仍在嘗試訪問/互動某些 WebElement(我的意思是快取的元素,存盤在某個變數中),但是:
- 該元素不再出現在頁面上,或者
- 另一個元素,將被原始元素的定位器找到
因此,請確保在加載新頁面后,重繪 所有元素
driver.find_element/driver.find_elements命令。
對于您的情況,可能會出現這樣的問題,例如,如果您將初始化元素串列,然后對其進行迭代,并且將在回圈中執行一些新的頁面加載。這會損壞您的原始元素串列。
您應該始終牢記這一點。
我click在您的腳本中看到呼叫,這可能會導致StaleElementReferenceException(因為它可能會引發 DOM 更改)。
并且訊息參考了該<tr >元素,因此請確保重繪 它。
另請參閱https://www.selenium.dev/exceptions/#stale_element_reference
uj5u.com熱心網友回復:
Abit laggy ans 但我是這樣做的。
total_length = (driver.find_element(By.XPATH, "//span[@id='ctl00_ContentPlaceHolder1_PagerControl2_litRecords']").text)
z = int((total_length.split()[-1]).replace(']', ''))
for data in range(1, z 1):
driver.find_element(By.XPATH, "(//a[@title='Page {}'])[2]".format(data)).click()
for value in driver.find_elements(By.XPATH, '//tbody/tr'):
table_data = value.find_elements_by_tag_name('td')
print([td.text for td in table_data])
time.sleep(2)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/405009.html
標籤:
