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

如何无需点击即可爬取JS网站动态标签页内的目标数据

爬取卡萨布兰卡证券交易所「indicateurs clès」标签内容的可行解决方案

你遇到的站点是典型的ASP.NET WebForms架构,标签切换触发的是服务端回发逻辑,没有独立的内容URL,动态参数是ASP.NET自带的校验字段,可以通过以下三种方案解决:


方案1:模拟浏览器点击(门槛最低,适配性最强)

直接使用支持浏览器模拟的工具操作页面,不需要逆向接口参数,适合少量爬取场景

  • 可选工具:Selenium、Playwright、Pyppeteer
  • 操作流程:
    1. 启动浏览器实例(可开启无头模式降低资源占用),访问目标页面 https://www.casablanca-bourse.com/bourseweb/Societe-Cote.aspx?codeValeur=12200
    2. 等待页面加载完成后,定位到「indicateurs clès」标签元素,触发模拟点击
    3. 等待标签对应内容渲染完成后,直接提取当前DOM中的目标数据即可
  • Python + Selenium 极简示例:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 配置无头模式
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")

driver = webdriver.Chrome(options=chrome_options)
try:
    driver.get("https://www.casablanca-bourse.com/bourseweb/Societe-Cote.aspx?codeValeur=12200")
    # 等待标签可点击后触发点击
    tab = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.LINK_TEXT, "indicateurs clès"))
    )
    tab.click()
    # 等待内容容器加载完成后提取数据,替换下面的ID为实际内容容器的DOM ID
    content_container = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "target_content_id"))
    )
    print(content_container.text)
finally:
    driver.quit()

方案2:逆向PostBack请求(性能最高,适合批量爬取)

不需要启动浏览器,直接构造HTTP请求拿数据,爬取效率更高

  • 操作流程:
    1. 打开浏览器开发者工具的「网络」面板,过滤Fetch/XHR请求,点击「indicateurs clès」标签,找到触发的POST请求(请求地址就是当前页面URL)
    2. 查看POST请求的表单参数,提取固定参数:__EVENTTARGET(触发事件的标签控件ID,固定值)、__EVENTARGUMENT(一般为空)
    3. 每次请求前先GET一次原页面,从页面源码中正则提取三个动态校验参数:__VIEWSTATE、__VIEWSTATEGENERATOR、__EVENTVALIDATION
    4. 把所有参数拼接成表单,提交POST请求到原页面URL,返回的响应内容中就包含「indicateurs clès」标签的完整HTML,直接提取即可
  • 注意点:三个动态校验参数有效期很短,每次提交POST请求前都要重新获取,不能复用

方案3:轻量JS渲染请求

如果不想安装完整的浏览器驱动,可以使用内置JS渲染能力的请求库

  • 可选工具:Python的requests-html库
  • 操作流程:
    1. 用HTMLSession发起GET请求访问目标页面
    2. 调用render()方法执行页面内置JS
    3. 定位标签元素触发点击,等待渲染完成后提取目标数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:15:03