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

Python使用Selenium按类名定位元素失败,原因及解决方案是什么?

问题原因

  • By.CLASS_NAME仅支持传入单个类名:你传入的h4 mb-10是两个独立类名,Selenium会将其识别为单个类名进行匹配,自然无法找到对应元素。
  • CSS选择器语法错误:你编写的.h4 mb-10选择器的语义是「匹配类为h4的元素后代中名为mb-10的标签」,并非你预期的「匹配同时包含h4和mb-10两个类的元素」。

修正方案

不需要使用XPath,仅修改CSS选择器写法即可:多类名定位的CSS选择器需要给每个类名前加.,且类名之间不需要加空格,同时可以加上目标元素的标签名h3缩小匹配范围,避免匹配到另外两个同类名的元素。

修正后的核心代码如下:

#!/usr/bin/python3

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

path = "/usr/local/bin/chromedriver"
driver = webdriver.Chrome(path)

driver.get("https://blockchair.com/dogecoin/nodes")


def scraping_fnd():
    try:
        # 修正CSS选择器,匹配同时有h4、mb-10类的h3标签
        nodes = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "h3.h4.mb-10")))
        nodes_text = nodes.text
        print(nodes_text)
    finally: 
        driver.quit()
   
    
scraping_fnd()

如果需要从3个同类名元素中手动选第一个,也可以用find_elements方法获取全部匹配元素后取索引:

nodes_list = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".h4.mb-10")))
# 索引0对应第一个匹配元素,也就是你要的Total nodes元素
print(nodes_list[0].text)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:42:00