You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium爬虫跳转页面后无法保留当前页的原因及解决方法

Selenium爬取返回后回到第一页的原因与解决方法

问题原因分析

你遇到的返回后回到第一页的情况,核心原因有两点:

  1. 自定义返回按钮的逻辑缺陷:代码中点击的返回按钮(//a[@id='j_id23:j_id50'])是网站自身的返回控件,并非基于浏览器历史记录跳转,它的默认行为是直接回到搜索结果的第一页,而非之前停留的第二页。
  2. 分页状态未持久化:进入详情页后,网站的分页状态没有通过URL参数或会话保存,返回时页面默认重置为初始的第一页。

另外,虽然你的代码在处理每行时重新获取了页面元素,规避了stale元素异常,但这并不能解决返回后页面跳转逻辑的问题。

解决方法

方法1:用浏览器历史回退替换自定义返回按钮(优先推荐)

直接调用浏览器的回退功能,基于浏览历史回到之前的分页页面,完全避开网站返回按钮的不合理逻辑。

修改代码中点击返回按钮的片段:

# 移除原有的返回按钮点击代码
# WebDriverWait(driver, 10).until(
#     EC.element_to_be_clickable((By.XPATH, "//a[@id='j_id23:j_id50']"))
# ).click()

# 改用浏览器回退
driver.back()
# 用显式等待替代固定sleep,提升稳定性
wait.until(EC.presence_of_element_located((By.XPATH, ".//table[@class='iceDatTbl tablaElementos']//tbody")))

# 回退后重新确认iframe(若页面结构重置)
iframe_element = wait.until(EC.presence_of_element_located((By.XPATH, '//iframe[contains(@src, "censo.abogacia.es")]')))
driver.switch_to.frame(iframe_element)

方法2:记录当前页码,返回后重新跳转

如果浏览器回退不适用,可以在进入详情页前记录当前页码,返回后重新点击分页按钮回到对应页面:

  1. 在主循环中添加页码记录:
i=0
while True:
    current_page_num = i + 1  # 记录当前所在页码
    # ... 原有页面元素处理代码 ...
  1. 处理完详情页后,重新跳转至当前页码:
# 点击网站返回按钮回到第一页
WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.XPATH, "//a[@id='j_id23:j_id50']"))
).click()
wait.until(EC.presence_of_element_located((By.XPATH, ".//table[@class='iceDatTbl tablaElementos']//tbody")))

# 重新点击分页按钮到当前页码
for _ in range(current_page_num - 1):
    next_page = driver.find_element(By.XPATH, "//img[@id='j_id23:j_id79']")
    next_page.click()
    wait.until(EC.staleness_of(next_page))  # 等待页面切换完成

额外优化建议

  • 尽量用WebDriverWait显式等待替代time.sleep(),减少不必要的等待时间,同时提升爬虫稳定性。
  • 每次页面跳转后(包括回退),重新确认iframe的切换状态,避免因页面结构变化导致元素定位失败。

内容的提问来源于stack exchange,提问作者arslan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 15:55:53