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

如何使用Selenium和Python操作登录弹窗 无法输入账号密码问题求解

问题根源

  • 你使用的CSS选择器包含动态生成的随机ID(比如#login-panel-1767、#login-panel-1205),这类ID每次页面刷新都会变化,无法稳定定位元素
  • 你定位的账号输入框层级是div标签,send_keys方法只能作用于可输入的input标签,给div发送文本无效
  • 没有设置等待逻辑,点击登录按钮后弹窗还未完全渲染完成就执行定位操作,会直接抛出元素不存在的错误

修正方案

核心调整点

  1. 替换动态ID选择器,用更稳定的属性定位:比如账号输入框的name=user_id、密码输入框的name=password,这两个属性是固定的
  2. 加入显式等待,确保登录弹窗渲染完成后再执行定位操作
  3. 直接定位input标签执行输入,不要定位外层的div容器

修正后可运行代码

import openpyxl
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wb = openpyxl.Workbook()
chrome_options = Options()

options = webdriver.ChromeOptions()
#options.add_argument('headless')
options.add_argument('window-size=1920x1080')
options.add_argument("disable-gpu")

sheet = wb.active
sheet.append(["1lable", "2lable"])
wb.save("save.xlsx")
path = "/Users/erer/Desktop/도구/파이썬 작업공간./chromedriver 2"

# 高版本Selenium(4.x)建议用service参数指定chromedriver路径,可替换为下方写法
# from selenium.webdriver.chrome.service import Service
# driver = webdriver.Chrome(service=Service(path), options=options)
driver = webdriver.Chrome(path , chrome_options=options)
wait = WebDriverWait(driver, 10) # 最长等待10秒,直到目标元素加载完成

driver.get('https://otr.co.kr/#!')

# 点击登录按钮
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#site-header .login-window-toggle"))).click()

# 输入账号
account_input = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input[name='user_id']")))
account_input.clear()
account_input.send_keys("你的账号")

# 输入密码
pwd_input = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input[name='password']")))
pwd_input.clear()
pwd_input.send_keys("你的密码")

# 点击登录按钮
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".login-panel .btn-block[type='submit']"))).click()

补充注意事项

  • Selenium 4.0及以上版本已废弃find_element_by_*系列方法,代码中统一使用find_element(By.定位方式, 定位值)的写法兼容性更强
  • 如果输入时遇到元素不可交互的报错,可以在send_keys前先调用click()方法激活输入框状态
  • 不要使用浏览器复制的带随机后缀的ID、类名作为定位依据,优先用name、固定ID、文本内容、业务相关的固定类名定位

内容的提问来源于stack exchange,提问作者김진우

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:36:04