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
相关产品推荐
相关产品推荐

