Selenium无法定位元素触发TimeoutException问题求助
问题分析与解决
核心错误原因
你用By.CLASS_NAME传入了多个类名search_list_tidbit center time_100,但Selenium的CLASS_NAME定位器只支持单个类名,它会把这三个类名当成一个完整的类名去查找,自然找不到目标元素,触发超时异常。
修复方案
改用CSS_SELECTOR或XPATH来定位带有多个类名的元素,这两种定位器支持多类名匹配。同时,动态加载的元素建议等待其可见(而非仅存在),确保元素已渲染完成并能获取到文本。
修改后的代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys # 导入Keys类,用ENTER更规范 from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Firefox(executable_path= r"/Users/username/anaconda3/bin/geckodriver") driver.get('https://howlongtobeat.com/#search') # 关闭Cookie弹窗 WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, 'onetrust-reject-all-handler'))).click() # 输入搜索内容并提交 inputElement = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, 'global_search_box'))) inputElement.send_keys('The Legend of Zelda: Ocarina of Time') inputElement.send_keys(Keys.ENTER) # 用Keys.ENTER替代unicode编码,更易读 # 等待目标元素可见并获取文本 game_time_element = WebDriverWait(driver, 20).until( EC.visibility_of_element_located((By.CSS_SELECTOR, '.search_list_tidbit.center.time_100')) ) gameTime = game_time_element.text print(gameTime) driver.quit() # 记得关闭浏览器
关键修改点
- 用
By.CSS_SELECTOR替换By.CLASS_NAME,CSS选择器中多个类名用.连接,格式为.类名1.类名2.类名3 - 导入
Keys类,用Keys.ENTER提交搜索,替代u'\ue007',代码更规范易读 - 等待元素时使用
EC.visibility_of_element_located,确保元素已显示而非仅存在于DOM中 - 新增
driver.quit(),避免浏览器进程残留
内容的提问来源于stack exchange,提问作者PolarW
相关产品推荐
相关产品推荐

