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

如何在Python Selenium中用nth-child/CSS选择器提取加密货币数据

解决Selenium提取比特币市值和24小时交易量的CSS选择器问题

你的问题核心是CSS选择器写法错误,以及未处理页面加载时序问题:

  • 错误代码里的div.css-1y4us2f#__next是无效选择器——#__next是最外层div的ID,css-1y4us2f是它的后代元素class,不能混写在同一个元素选择器里;
  • 原代码两次调用find_element取同一个class,只会返回第一个匹配元素,导致重复获取市值。

下面是两种可行的解决方式:

方案1:批量获取匹配元素后按索引取值

直接获取所有带目标class的元素,通过索引区分市值(第一个)和24小时交易量(第二个),逻辑简单直观:

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

def get_data(driver: webdriver.Chrome, link):
    dict_data = {}
    driver.get(link)
    # 等待所有目标元素加载完成,最长等待10秒
    stats_elements = WebDriverWait(driver, 10).until(
        EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".css-1c8c51m"))
    )
    # 按索引提取对应数据
    dict_data['market cap'] = stats_elements[0].text
    dict_data['24H volume'] = stats_elements[1].text
    
    print(f"市值: {dict_data['market cap']}")
    print(f"24小时交易量: {dict_data['24H volume']}")
    return dict_data

方案2:使用精准层级的CSS选择器定位

根据你提供的HTML结构,两个数值分别在.css-1y4us2f下的第1个和第2个.css-95687q容器内,用nth-child定位父容器后再取子元素:

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

def get_data(driver: webdriver.Chrome, link):
    dict_data = {}
    driver.get(link)
    wait = WebDriverWait(driver, 10)
    
    # 定位第一个容器中的市值
    market_cap = wait.until(
        EC.presence_of_element_located((By.CSS_SELECTOR, ".css-1y4us2f > div.css-95687q:nth-child(1) > p.css-1c8c51m"))
    ).text
    # 定位第二个容器中的24小时交易量
    volume = wait.until(
        EC.presence_of_element_located((By.CSS_SELECTOR, ".css-1y4us2f > div.css-95687q:nth-child(2) > p.css-1c8c51m"))
    ).text
    
    dict_data['market cap'] = market_cap
    dict_data['24H volume'] = volume
    
    print(f"市值: {market_cap}")
    print(f"24小时交易量: {volume}")
    return dict_data

重要提示

  • 必须添加显式等待:页面加载需要时间,直接调用find_element很容易因为元素未渲染完成抛出NoSuchElementException,用WebDriverWait等待元素出现后再操作是最佳实践;
  • 写CSS选择器时要注意层级:>表示直接子元素,nth-child(n)是针对当前父元素的子元素排序,不要把不同元素的ID和class错误合并。

内容的提问来源于stack exchange,提问作者Lewis-010

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 15:20:22