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

使用Selenium无法在网站登录表单输入登录凭证问题求助

问题成因
  • 语法调用错误:Python版本Selenium的元素定位API为find_element(),并非Java风格的findElement();By.XPATH是常量属性,不需要加括号调用,错误写法会直接导致元素定位失败。
  • 返回值误用:send_keys()无返回值,执行后返回None,将执行结果赋值给element变量后,后续执行JS操作的是空对象,自然无法生效。
  • 元素交互条件不足:presence_of_element_located仅校验元素存在于DOM树中,不保证元素可见、可交互,此时调用send_keys会被前端拦截无内容写入。
  • 前端事件未触发:目标站点输入框绑定了input/change校验事件,直接修改value属性不会触发对应监听事件,表单不会识别写入的内容。
  • 代码缩进错误:贴出的代码中元素操作部分缩进混乱,会直接抛出语法错误无法运行。
解决方案

修正后的可运行代码如下:

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

# 可根据需要自定义Chrome启动配置
options = webdriver.ChromeOptions()
browser = webdriver.Chrome(
    options=options,
    executable_path=r'\\computerpath\c$\test\drivers\chromedriver.exe'
)

browser.get('https://causewayclub.tennisbookings.com/LoginX.aspx')
wait = WebDriverWait(browser, 30)

# 处理用户名输入
username_ele = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="txtUsername"]')))
username_ele.clear()
username_ele.send_keys("TEST")
# 触发input事件保证前端框架识别输入内容
browser.execute_script("arguments[0].dispatchEvent(new Event('input'))", username_ele)

# 处理密码输入
password_ele = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="txtPassword"]')))
password_ele.clear()
password_ele.send_keys("Password")
browser.execute_script("arguments[0].dispatchEvent(new Event('input'))", password_ele)

# 点击登录按钮
wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="btnLogin"]'))).click()

额外排查点:

  • 确认Chrome浏览器和chromedriver的大版本完全匹配,跨版本会导致元素交互异常。
  • 如果原生send_keys仍无效,可改用剪切板模拟粘贴方案输入内容。
  • 排查目标元素是否嵌套在iframe内,若存在iframe需要先调用browser.switch_to.frame()切入对应iframe后再操作元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 17:51:03