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

如何在指定网页输入信息后抓取对应电价结果?

解决Tibber动态电价抓取问题

因为目标页面的电价是通过JavaScript动态生成的,requests只能获取静态HTML,所以需要用两种方式实现:模拟浏览器交互或直接调用后台API。

方法一:用Selenium模拟用户操作

这种方式完全模拟人工输入流程,适合不想折腾API的场景:

  1. 先安装依赖并准备驱动:

    pip install selenium
    

    下载对应浏览器的驱动(比如Chrome的ChromeDriver,版本要和浏览器匹配),可以放到系统PATH里,或者在代码中指定路径。

  2. 代码示例:

    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浏览器(可替换为Firefox等)
    driver = webdriver.Chrome()
    driver.get("https://tibber.com/de/stromtarif#price-calculator")
    
    try:
        # 等待邮编输入框加载完成,输入目标邮编
        postal_input = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.ID, "postalCode"))
        )
        postal_input.send_keys("10178")
    
        # 等待用电量输入框加载,输入年用电量
        consumption_input = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.ID, "consumption"))
        )
        consumption_input.send_keys("3500")
    
        # 等待电价元素加载并提取内容
        price_element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, "h1.jsx-3205991333.price.f-heading.fs-xxxl"))
        )
        print(f"计算后电价:{price_element.text}")
    
    finally:
        # 关闭浏览器
        driver.quit()
    

方法二:直接调用后台API(更高效)

打开浏览器开发者工具(F12),切换到「Network」标签,输入邮编和用电量后,观察XHR请求,能找到网站获取电价的后台API接口。直接调用这个接口比模拟浏览器更快:

  1. 抓包获取API信息:
    输入测试数据后,找到触发的POST/GET请求,复制请求URL、请求头和参数(比如邮编、用电量、地区标识等)。

  2. 代码示例(需替换为实际抓包到的API信息):

    import requests
    
    # 替换为抓包得到的API地址
    api_url = "https://api.tibber.com/v1/price-calculation"
    # 替换为抓包得到的请求参数
    payload = {
        "postalCode": "10178",
        "consumption": 3500,
        "country": "DE"
    }
    # 替换为抓包得到的必要请求头
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
        "Referer": "https://tibber.com/de/stromtarif"
    }
    
    response = requests.post(api_url, json=payload, headers=headers)
    data = response.json()
    
    # 根据API返回的JSON结构提取电价(示例结构,需实际调整)
    price = data["result"]["monthlyPrice"]
    print(f"计算后电价:{price} €")
    

注意事项

  • API接口可能会随网站更新变化,需要定期验证
  • 不要频繁发送请求,避免触发网站的反爬机制
  • 抓包时要确保请求头和参数完整,否则可能返回错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:45:32