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

Python数据爬取:如何等待请求加载完成以获取目标表格

解决Python爬虫等待动态加载结果的问题

遇到这种需要交互后等待页面动态渲染结果的场景,普通的requests库因为无法处理JavaScript渲染的内容,确实很难搞定。这里推荐你使用Selenium——它能模拟真实浏览器的操作,还支持灵活的等待机制,刚好适配你的需求。下面是具体的实现步骤和代码示例:

准备工作

首先需要安装Selenium和对应浏览器的驱动:

  • 安装Selenium:pip install selenium
  • 下载对应浏览器的驱动(比如Chrome的ChromeDriver),确保驱动版本和你的浏览器版本匹配,并且把驱动放到系统PATH里,或者在代码里指定路径。

代码实现思路

核心思路是用Selenium模拟手动操作的流程,然后通过显式等待来等待页面元素加载完成(比隐式等待更精准可靠):

  1. 打开目标页面,等待"Caderno 2.0"按钮加载完成并点击
  2. 找到下拉列表,选择第一个选项
  3. 触发查询操作(比如点击查询按钮)
  4. 等待加载提示消失(或者结果表格出现)
  5. 提取表格数据
  6. 关闭浏览器

完整代码示例

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait, Select
from selenium.webdriver.support import expected_conditions as EC

# 初始化浏览器(这里用Chrome,你也可以换成Firefox等)
driver = webdriver.Chrome()
# 隐式等待(可选,作为兜底)
driver.implicitly_wait(10)

try:
    # 打开目标页面
    driver.get("http://www.ans.gov.br/perfil-do-setor/dados-e-indicadores-do-setor/sala-de-situacao")
    
    # 等待并点击"Caderno 2.0"按钮(这里的定位器需要你根据实际页面调整)
    caderno_btn = WebDriverWait(driver, 20).until(
        EC.element_to_be_clickable((By.XPATH, "//*[contains(text(), 'Caderno 2.0')]"))
    )
    caderno_btn.click()
    
    # 等待下拉列表加载完成,选择第一个选项
    dropdown = WebDriverWait(driver, 20).until(
        EC.presence_of_element_located((By.ID, "替换为实际下拉框ID"))  # 换成页面真实的下拉框定位器
    )
    select = Select(dropdown)
    select.select_by_index(0)  # 选择第一个选项
    
    # 点击查询按钮(替换成实际的按钮定位器)
    query_btn = WebDriverWait(driver, 20).until(
        EC.element_to_be_clickable((By.XPATH, "//*[contains(text(), '执行操作的按钮文本')]"))
    )
    query_btn.click()
    
    # 等待加载完成:可以等待加载提示消失,或者结果表格出现
    # 示例1:等待加载提示消失(根据你提供的图片,匹配页面加载提示的元素)
    WebDriverWait(driver, 30).until(
        EC.invisibility_of_element_located((By.XPATH, "//*[contains(text(), '加载中...')]"))
    )
    
    # 示例2:等待结果表格出现(替换成实际表格的定位器)
    result_table = WebDriverWait(driver, 30).until(
        EC.presence_of_element_located((By.TAG_NAME, "table"))
    )
    
    # 提取表格数据(这里简单打印HTML,你可以进一步解析成CSV或DataFrame)
    print(result_table.get_attribute("outerHTML"))
    
finally:
    # 关闭浏览器
    driver.quit()

关键说明

  • 元素定位器:代码里的XPath、ID等定位器需要你根据实际页面的HTML结构调整,你可以用浏览器开发者工具(F12)查看元素属性来获取准确的定位方式。
  • 显式等待:WebDriverWait配合expected_conditions(EC)是Selenium中最可靠的等待方式,它会在指定时间内轮询检查条件是否满足,比固定的time.sleep()更高效稳定。
  • 加载等待逻辑:你可以根据页面实际情况选择等待加载提示消失,或者等待目标表格出现,哪种逻辑更贴合页面变化就用哪种。

如果在定位元素或者等待逻辑上遇到问题,用浏览器开发者工具跟踪页面的DOM变化,调整对应的定位器和等待条件即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:19:47