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

医美外科医生信息爬虫脚本异常:无法跨分页采集数据

Selenium脚本翻页采集异常的修复方案

问题核心定位

从现象来看,首个无分页州采集正常,但切换州后翻页无法采集后续页面并触发presence_of_element_located超时,说明单页采集逻辑无问题,问题出在「切换州+翻页」场景下的页面元素加载/定位稳定性,大概率是以下原因:

  • 翻页后页面采用AJAX加载,presence_of_element_located仅检测元素存在于DOM,但元素未渲染完成无法获取文本
  • 切换州后,翻页操作导致页面DOM重构,旧的元素定位上下文失效
  • 下一页点击后页面加载延迟超过10秒,或者目标元素的class名在新页面有细微变化

具体修复步骤

1. 优化等待条件,从「存在」改为「可见+列表加载完成」

把等待单个元素存在的逻辑,改为等待整个医生信息列表的元素都可见,确保页面完全渲染后再采集:

# 替换原有的单元素等待代码
try:
    # 等待所有医生信息元素可见,延长超时时间到15秒
    WebDriverWait(driver, 15).until(
        EC.visibility_of_all_elements_located((By.CLASS_NAME, 'cirurgiao-info'))
    )
    # 批量获取所有元素
    info_elements = driver.find_elements(By.CLASS_NAME, 'cirurgiao-info')
    for elem in info_elements:
        # 提取文本并处理
        info_content = elem.text
        # 写入表格的逻辑...
except TimeoutException:
    # 增加异常日志,记录当前页面状态
    print(f"超时:当前页面URL - {driver.current_url}")
    # 可选:截图保存用于排查
    driver.save_screenshot(f"timeout_{driver.current_url.replace('/', '_')}.png")

2. 翻页操作增加URL变化等待,确保页面跳转完成

点击下一页后,等待页面URL发生变化,避免在旧页面重复采集或采集未加载完成的页面:

# 点击下一页前记录当前URL
current_url = driver.current_url
# 等待下一页按钮可点击后再点击(需根据实际按钮调整选择器)
next_btn = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.XPATH, '//*[contains(@class, "next-page")]'))
)
next_btn.click()
# 等待URL变化,确认页面跳转
WebDriverWait(driver, 10).until(EC.url_changes(current_url))

3. 切换州后强制等待页面初始化完成

切换州并触发搜索后,增加页面加载的等待逻辑,确保搜索结果完全加载后再开始采集:

# 选择州并点击搜索后
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CLASS_NAME, 'cirurgiao-info'))  # 等待第一个结果出现
)
# 额外增加1秒等待,确保列表渲染完成(可选,根据页面实际情况调整)
time.sleep(1)

4. 检查元素选择器的稳定性

确认cirurgiao-info这个class名在所有州的页面中是否一致,部分网站可能会根据不同地区调整元素结构。如果发现class名有变化,改用更稳定的选择器(比如结合父元素的XPath):

# 示例:使用父元素+class的XPath,提高稳定性
info_elements = driver.find_elements(By.XPATH, '//div[@class="doctor-list"]/div[@class="cirurgiao-info"]')

额外排查建议

  • 触发超时后,立即打印当前页面的HTML源码(print(driver.page_source)),检查是否存在cirurgiao-info元素
  • 检查浏览器控制台是否有JS报错,部分页面加载失败会导致元素无法渲染
  • 尝试禁用浏览器缓存,避免切换州后加载旧页面缓存

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:20:26