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

Selenium中button.click()无法点击按钮问题求助

问题分析与修复方案

你的代码存在几个关键问题:

  • 同时初始化了两个独立的WebDriver实例(browser和driver),但操作时混用了两者:用driver打开页面,却用browser查找元素,两者属于不同的浏览器窗口,必然找不到目标元素。
  • By.CLASS_NAME不支持传入多个类名(空格分隔的字符串),它只能匹配单个类名,多类元素需要用CSS选择器定位。
  • 硬编码的time.sleep(5)可靠性差,页面加载速度受网络影响,应该用显式等待确保元素可交互后再操作。
  • 新版本Selenium(4.x+)已废弃executable_path参数,需用Service类指定驱动路径,或依赖自动驱动管理。

修正后的代码:

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 selenium.webdriver.chrome.service import Service

# 初始化驱动(用Service指定路径,或省略service参数让Selenium自动管理)
service = Service(r"C:\Program Files (x86)\chromedriver\chromedriver.exe")
driver = webdriver.Chrome(service=service)

# 打开目标页面
driver.get("https://quizlet.com/217866991/match")

# 显式等待按钮可点击,最长等待10秒
button = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, ".UIButton.UIButton--hero"))
)

# 点击按钮
button.click()

# 操作完成后可关闭驱动
# driver.quit()

关键修改说明:

  • 只保留一个WebDriver实例driver,所有操作统一使用它。
  • 用By.CSS_SELECTOR替代By.CLASS_NAME,通过.类名1.类名2的语法匹配多类元素。
  • 替换time.sleep为WebDriverWait+element_to_be_clickable,确保元素加载完成且可交互后再执行点击。
  • 使用Service类指定ChromeDriver路径,符合Selenium 4.x+的规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:05:22