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

使用Python+Selenium爬取博彩网站时遇NoSuchElementException错误求助

解决Selenium爬取888sport网球赛事时的NoSuchElementException错误

问题

尝试用Selenium爬取888sport网球板块的首场即将到来赛事的运动员名称,执行代码时抛出NoSuchElementException。

原代码

import os
from selenium import webdriver
from selenium.webdriver.common.by import By

os.environ['PATH'] += r"C:/Users/dub6m/OneDrive/Documents/chromedriver_win32"
driver = webdriver.Chrome()
driver.get('https://www.888sport.com/tennis/')
athlete1 = driver.find_element(By.CLASS_NAME, 'featured-matches-widget__event-text featured-matches-widget__event-competitor')
print(athlete1.text)

报错信息

Traceback (most recent call last):
  File "C:\Users\dub6m\OneDrive\Desktop\betbot\888sports.py", line 8, in <module>
    element = driver.find_element(By.CLASS_NAME, 'featured-matches-widget__event-text featured-matches-widget__event-competitor')
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\dub6m\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 831, in find_element
    return self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\dub6m\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 440, in execute
    self.error_handler.check_response(response)
  File "C:\Users\dub6m\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 245, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".featured-matches-widget__event-text featured-matches-widget__event-competitor"}
  (Session info: chrome=112.0.5615.50)
Stacktrace:
Backtrace:
    GetHandleVerifier [0x0070DCE3+50899]
    (No symbol) [0x0069E111]
    (No symbol) [0x005A5588]
    (No symbol) [0x005D08F9]
    (No symbol) [0x005D0AFB]
    (No symbol) [0x005FF902]
    (No symbol) [0x005EB944]
    (No symbol) [0x005FE01C]
    (No symbol) [0x005EB6F6]
    (No symbol) [0x005C7708]
    (No symbol) [0x005C886D]
    GetHandleVerifier [0x00973EAE+2566302]
    GetHandleVerifier [0x009A92B1+2784417]
    GetHandleVerifier [0x009A327C+2759788]
    GetHandleVerifier [0x007A5740+672048]
    (No symbol) [0x006A8872]
    (No symbol) [0x006A41C8]
    (No symbol) [0x006A42AB]
    (No symbol) [0x006971B7]
    BaseThreadInitThunk [0x77007BA9+25]
    RtlInitializeExceptionChain [0x77A7BB3B+107]
    RtlClearBits [0x77A7BABF+191]

错误原因

  1. By.CLASS_NAME不支持多类名:传入了两个空格分隔的类名,但By.CLASS_NAME只能处理单个类名。Selenium会将其解析为无效的CSS选择器.featured-matches-widget__event-text featured-matches-widget__event-competitor(这是后代选择器语法,而非多类选择器)。
  2. 页面未完全加载:直接调用find_element时,页面可能还在渲染,目标元素尚未出现。
  3. Cookie弹窗拦截:网站通常会弹出Cookie授权窗口,遮挡或阻止页面元素的访问。

修复方案

1. 改用CSS选择器处理多类名

使用By.CSS_SELECTOR,用.连接多个类名(正确的多类选择器格式为.class1.class2)。

2. 添加显式等待

通过WebDriverWait等待元素加载完成,避免因页面未就绪导致的查找失败。

3. 处理Cookie弹窗

先关闭Cookie授权窗口,确保页面元素可正常访问。

修复后的代码

import os
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

os.environ['PATH'] += r"C:/Users/dub6m/OneDrive/Documents/chromedriver_win32"
driver = webdriver.Chrome()
driver.get('https://www.888sport.com/tennis/')

try:
    # 等待并关闭Cookie弹窗(如果存在)
    cookie_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, 'button[aria-label="Close"]'))
    )
    cookie_btn.click()

    # 等待首场赛事的运动员元素出现
    first_athlete = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, '.featured-matches-widget__event-text.featured-matches-widget__event-competitor'))
    )
    print(first_athlete.text)
finally:
    driver.quit()

注意事项

  • 若网站结构更新,需重新通过浏览器开发者工具(F12)定位元素,获取最新的CSS选择器。
  • 显式等待比隐式等待更可控,能精准匹配元素的加载状态,减少不必要的等待时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:18:05