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

如何用Python Selenium获取指定币种日期的K线图并截图用于Discord加密货币机器人

问题原因及解决办法

你遇到的元素找不到问题核心原因有三点:

  1. 页面异步加载未完成就执行查找:CoinGecko的K线图表是后渲染的SVG内容,页面加载完成不代表图表元素已经渲染完毕
  2. SVG元素命名空间限制:直接用By.TAG_NAME定位SVG内部的<text>标签,Selenium无法正常识别
  3. 定位逻辑冗余:时间范围选择完全不需要修改SVG内的text元素,CoinGecko页面自带现成的7天筛选按钮,直接点击即可生成目标周期K线,操作成本远低于修改SVG文本

可用代码示例

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
from time import sleep

driver = webdriver.Chrome()
driver.get("https://www.coingecko.com/en/coins/bitcoin")
driver.maximize_window()

try:
    # 等待7天筛选按钮可点击,直接切换时间范围
    wait = WebDriverWait(driver, 15)
    seven_day_btn = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[contains(@class,'price-chart') and text()='7d']")))
    seven_day_btn.click()
    # 等待图表重新渲染完成
    sleep(2)
    # 可选:只截取图表区域,比整页截图更适合发Discord
    chart_ele = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "div[data-target='price-chart.chartContainer']")))
    chart_ele.screenshot('chart.png')
except Exception as e:
    print(f'操作失败:{str(e)}')
finally:
    driver.quit()

补充说明

如果确实需要操作SVG内的text元素,需要使用适配命名空间的XPath写法,示例定位格式为//*[name()='svg']//*[name()='text' and contains(text(),'匹配文本')]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:15:03