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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 01:36:34