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

如何用Selenium/BS4爬取Cardmarket中Canvas渲染的卡牌价格图表数据?

解决Cardmarket卡牌价格波动图表爬取问题

优先方案:直接提取原始数据

Canvas渲染的图表数据根本不在Canvas里,而是存在页面的JS变量中,别浪费时间爬Canvas本身:

  • 打开浏览器F12控制台,输入console.log(window),找和价格历史相关的变量(比如priceHistory、chartData这类),记下来变量名。
  • 用Selenium执行JS代码直接拿数据:
    # 假设已经用Selenium打开了目标卡牌页面
    chart_data = driver.execute_script("return window.priceHistory;")
    # 拿到数据后,直接用PySide6的QtCharts自己画图表,比用图片灵活多了
    print(chart_data)
    

备选方案:截取Canvas生成的图片

如果一定要拿现成的图表图片,直接用Selenium截Canvas元素的图:

  • 先确保Canvas完全渲染,别刚加载完页面就截图,要么加个短sleep,要么用显式等待:
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    # 等Canvas加载出来
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.TAG_NAME, "canvas"))
    )
    # 定位Canvas并截图
    canvas = driver.find_element(By.TAG_NAME, "canvas")
    screenshot_bytes = canvas.screenshot_as_png
    # 保存成图片或者直接传给PySide6的QPixmap用
    with open("card_price_chart.png", "wb") as f:
        f.write(screenshot_bytes)
    

为啥你之前的方法没用?

  • 爬Canvas信息:Canvas只是个绘图容器,本身不存数据,自然拿不到东西。
  • Canvas转图片爬取:大概率是没等图表渲染完成就截了,或者Canvas元素定位错了。
  • 常规网页爬取:BeautifulSoup只能解析静态HTML,JS动态生成的数据不会出现在静态源码里,所以返回空。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:07:13