1

我一直在尝试从 AlgoExplorer 网站上抓取数据。它有一个带有分页的表来存储数据。即使我使用显式等待来单击“下一步”按钮,它仍然会收到 StaleException。这是我的一段代码和错误图像:

for i in tqdm(range(5)): 
  page = driver.find_element_by_tag_name('tbody').find_elements_by_tag_name('a')
  for e in page:
    pages.append(e.text)
  WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.pagination.next'))).click()

当然,每个变量都已声明并已导入库。

你能解释一下为什么我仍然有这个例外吗? 在此处输入图像描述

4

1 回答 1

0

当元素不再附加到页面时,将引发 StaleElementReferenceException。我的猜测是这个序列看起来像:

  1. 已找到元素
  2. html dom 已重建 - 可以使用使用的定位器找到元素但它不是在步骤 1 中找到的元素)
  3. js 脚本尝试与步骤 1 中找到的元素进行交互)但它不是相同的元素(它具有相同的属性等,但在 Selenium 的情况下它是不同的元素

您可以尝试通过使用https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver检查添加/删除了哪些 DOM 元素来验证我的假设

于 2020-12-06T20:57:10.427 回答