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

使用Selenium获取Speedtest网速失败及报错问题求助

问题解决指南

一、修复executable_path弃用警告

Selenium 4+不再支持直接传入executable_path,必须通过Service对象配置驱动路径:

from selenium.webdriver.chrome.service import Service
from selenium import webdriver

# 替换为你的ChromeDriver实际路径
CHROME_PATH = "c:/path/to/chromedriver.exe"
service = Service(CHROME_PATH)
# 启动Chrome时传入service参数
driver = webdriver.Chrome(service=service)

二、解决证书解析与USB设备错误

这些属于非致命警告,可通过添加Chrome启动参数抑制,同时需确保ChromeDriver版本与本地Chrome浏览器完全匹配:

options = webdriver.ChromeOptions()
# 忽略证书验证错误
options.add_argument("--ignore-certificate-errors")
# 禁用USB设备扫描,解决USB描述符读取失败问题
options.add_argument("--disable-usb-discovery")
# 合并配置启动Chrome
driver = webdriver.Chrome(service=service, options=options)

三、无法获取网速数值的核心问题修复

1. 替换固定time.sleep为显式等待

固定等待时间不稳定,网络波动会导致测试未完成就尝试定位元素,改用Selenium显式等待确保元素加载完成:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

class TwitterBot:
    def __init__(self, driver):
        self.driver = driver
        self.up = 0
        self.down = 0

    def get_internet_speed(self):
        self.driver.get("https://www.speedtest.net/it")
        
        # 等待并点击隐私政策同意按钮
        WebDriverWait(self.driver, 10).until(
            EC.element_to_be_clickable((By.ID, "onetrust-accept-btn-handler"))
        ).click()
        
        # 等待并点击开始测试按钮
        WebDriverWait(self.driver, 10).until(
            EC.element_to_be_clickable((By.CLASS_NAME, "start-text"))
        ).click()
        
        # 等待下载速度元素加载完成(最长等待120秒)
        down_speed = WebDriverWait(self.driver, 120).until(
            EC.visibility_of_element_located((By.CLASS_NAME, "download-speed"))
        ).text
        
        # 等待上传速度元素加载完成
        up_speed = WebDriverWait(self.driver, 120).until(
            EC.visibility_of_element_located((By.CLASS_NAME, "upload-speed"))
        ).text
        
        return up_speed, down_speed

2. 确保正确调用方法并输出结果

你可能遗漏了调用方法和打印结果的逻辑,添加以下入口代码:

if __name__ == "__main__":
    CHROME_PATH = "c:/path/to/chromedriver.exe"
    service = Service(CHROME_PATH)
    options = webdriver.ChromeOptions()
    options.add_argument("--ignore-certificate-errors")
    options.add_argument("--disable-usb-discovery")
    driver = webdriver.Chrome(service=service, options=options)
    
    bot = TwitterBot(driver)
    upload, download = bot.get_internet_speed()
    print(f"上传速度: {upload} Mbps")
    print(f"下载速度: {download} Mbps")
    
    driver.quit()

3. 验证元素定位准确性

如果仍无法定位元素,打开Speedtest页面按F12调出开发者工具,检查:

  • 下载/上传速度元素的实际class名称是否为download-speed/upload-speed
  • 若页面结构更新,替换为实际的class名或使用更精准的XPath定位

内容的提问来源于stack exchange,提问作者Niccolò Baresani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:17:09