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

Python网络爬虫问题:获取的HTML数据不完整

Selenium爬虫HTML数据缺失(Turno表格丢失)排查方案

1. 等待条件的合理性问题

  • 检查修改后的等待条件是否仅等待了页面基础框架,未覆盖Turno表格的加载触发。比如将原针对目标表格的presence_of_element_located替换为仅等待页面标题、body元素,会导致表格还未渲染就提前抓取HTML。
  • 建议直接针对Turno表格设置显式等待,优先使用元素可见性判断(如果表格是动态显示的):
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    # 替换为Turno表格的实际定位符(ID/类名/XPath)
    wait = WebDriverWait(driver, 15)
    turno_table = wait.until(EC.visibility_of_element_located((By.CLASS_NAME, "turno-table")))
    
  • 区分presence_of_element_located(元素存在DOM中)和visibility_of_element_located(元素可见且渲染完成),后者更适合需要获取完整数据的场景。

2. 异步数据加载未完成

  • Turno表格大概率是通过AJAX/Fetch异步拉取数据后渲染的,若等待条件未覆盖异步请求的完成状态,会导致抓取时数据还未填充到表格中。
  • 可通过浏览器开发者工具(F12)的Network面板,找到加载Turno数据的接口,等待该请求完成后再抓取:
    def wait_for_ajax(driver):
        wait = WebDriverWait(driver, 10)
        # 针对jQuery驱动的AJAX,若为原生Fetch可修改判断逻辑
        wait.until(lambda d: d.execute_script("return jQuery.active === 0"))
    wait_for_ajax(driver)
    
  • 也可直接等待表格内的核心数据单元格出现,比如等待包含特定文本的元素:
    wait.until(EC.presence_of_element_located((By.XPATH, "//table[contains(@class,'turno')]//td[text()='Turno']")))
    

3. 页面加载策略冲突

  • 若修改等待条件时同时调整了页面加载策略(如设置为eager或none),会导致页面部分资源未加载完成就停止等待。建议恢复默认的normal加载策略:
    from selenium.webdriver.chrome.options import Options
    
    options = Options()
    options.page_load_strategy = 'normal'  # 确保页面所有资源加载完成
    driver = webdriver.Chrome(options=options)
    

4. 定位器失效

  • 检查Turno表格的定位符(ID/类名/XPath)是否因页面更新失效。用浏览器元素检查工具重新验证定位器是否能精准匹配目标表格,避免使用绝对XPath,改用相对路径结合唯一属性:
    # 示例:通过表格的唯一属性定位
    turno_table = driver.find_element(By.XPATH, "//table[@data-target='turno-data']")
    

5. 反爬机制触发

  • 修改等待条件后,爬虫行为模式(如等待过短、无交互)可能触发网站反爬,导致表格数据被屏蔽。可尝试:
    • 添加随机等待时间模拟人类操作:
      import time
      import random
      time.sleep(random.uniform(3, 6))
      
    • 模拟滚动页面到表格位置,触发数据加载:
      driver.execute_script("arguments[0].scrollIntoView();", turno_table)
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:10:16