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

新手求助:Undetected ChromeDriver与Selenium元素定位失败问题

问题分析与修复方案

代码中的核心问题

  1. 元素定位方法调用错误:find_element_by_name是driver实例的专属方法,直接调用会触发报错,必须通过driver.find_element_by_name()的形式使用。
  2. 等待方式不严谨:固定时长的time.sleep(5)无法确保页面元素完全加载完成,极易出现元素未找到的异常,应改用Selenium的显式等待机制。
  3. 冗余导入冗余:代码中导入了autogui、webbrowser等未实际使用的库,建议清理以保持代码整洁。

修正后的完整代码

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

# 初始化Undetected ChromeDriver并打开目标页面
driver = uc.Chrome()
driver.get('https://www.iqrpg.com/game.html')

# 初始化显式等待(最长等待10秒)
wait = WebDriverWait(driver, 10)

# 等待用户名输入框加载完成并输入内容
user_field = wait.until(EC.presence_of_element_located((By.NAME, 'login_username')))
user_field.send_keys('Gary')

# 等待密码输入框加载完成并输入内容
pass_field = wait.until(EC.presence_of_element_located((By.NAME, 'login_password')))
pass_field.send_keys('Barry')

# 等待登录按钮可点击并执行点击操作(若页面按钮属性不同,可通过开发者工具调整定位规则)
login_btn = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'input[type="submit"]')))
login_btn.click()

# 如需关闭浏览器可取消下方注释
# driver.quit()

关键改进说明

  • 显式等待:通过WebDriverWait配合expected_conditions,确保元素存在且可操作后再执行动作,比固定等待更适配页面加载的不确定性。
  • 规范元素定位:所有元素定位操作均绑定driver实例或等待对象,避免方法未定义的错误。
  • 登录按钮定位:默认使用type="submit"的CSS选择器定位按钮,若实际页面按钮的ID、class等属性更明确,可替换By.CSS_SELECTOR为By.ID或By.CLASS_NAME并调整对应值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:10:35