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

Selenium send_keys函数失效:GitHub登录代码仅1/10执行成功

GitHub登录Selenium代码输入失败问题分析及修复

我写了一段用Selenium登录GitHub的代码,但只有10%的概率能正常执行。前半部分跳转登录页的操作100%没问题,但到输入账号密码的send_keys环节,90%的情况都无法成功输入内容,偶尔才能成功。

输入部分的原代码片段:

username_box = browser.find_element(By.ID, 'login_field')
username_box.send_keys(username + Keys.RETURN)

password_box = browser.find_element(By.ID, 'password')
password_box.send_keys(password + Keys.RETURN)

问题原因

这大概率是你的代码问题,核心原因如下:

  • 没有等待元素完全就绪就执行输入操作:GitHub登录页面加载可能存在延迟,元素虽然被find_element找到,但可能还处于不可交互状态,直接调用send_keys会失效。
  • 输入与回车操作绑定过于仓促:直接在send_keys里拼接Keys.RETURN,可能导致内容还没输入完成就触发页面跳转,后续操作直接失败。

解决方案

  • 使用显式等待替代直接查找元素,确保元素可见且可交互后再执行操作
  • 避免使用绝对XPATH定位元素,改用更稳定的ID、CSS选择器或链接文本
  • 拆分输入与登录触发动作,先完成内容输入,再单独触发登录

修改后的完整代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


def github_login(username, password, github_username):
    browser = webdriver.Chrome()
    browser.get('https://github.com')
    
    # 等待登录按钮并点击,用CSS选择器替代绝对XPATH
    login_btn = WebDriverWait(browser, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, 'a[href="/login"]'))
    )
    login_btn.click()
    
    # 等待账号输入框可交互,输入账号
    username_box = WebDriverWait(browser, 10).until(
        EC.visibility_of_element_located((By.ID, 'login_field'))
    )
    username_box.clear()  # 清空可能存在的默认内容
    username_box.send_keys(username)
    
    # 等待密码输入框可交互,输入密码
    password_box = WebDriverWait(browser, 10).until(
        EC.visibility_of_element_located((By.ID, 'password'))
    )
    password_box.clear()
    password_box.send_keys(password)
    
    # 点击登录按钮(也可用password_box.send_keys(Keys.RETURN))
    submit_btn = WebDriverWait(browser, 10).until(
        EC.element_to_be_clickable((By.NAME, 'commit'))
    )
    submit_btn.click()
    
    # 等待用户菜单按钮并点击
    user_menu = WebDriverWait(browser, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, 'details summary img.avatar'))
    )
    user_menu.click()
    
    # 等待个人主页链接并点击
    profile_link = WebDriverWait(browser, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, f'details-menu a[href="/{github_username}"]'))
    )
    profile_link.click()
    
    if browser.current_url == f'https://github.com/{github_username}':
        print('GitHub登录成功')
        return '登录成功'
    else:
        print('GitHub登录失败')
        return '登录失败'


login = github_login(username='code7g', password='randompassword', github_username='Code7G')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:00:59