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

如何使用Python Selenium点击Discord登录页的Login按钮

待点击的Discord目标元素

问题背景

定位Discord登录页面的登录按钮时存在两个阻碍:

  • 元素class属性值每次会话随机生成,无法通过class属性稳定定位
  • 按钮无固定ID,常规ID定位方式失效
    目前已经实现邮箱、密码输入框的文本填入逻辑,需要补充稳定的登录按钮点击能力,现有代码如下:
import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By


driver = webdriver.Chrome(r"C:/Users/sexyv/Downloads/chromedriver_win32/chromedriver.exe")
driver.get("https://discord.com/login")
email_box = driver.find_element(by=By.NAME, value="email")
password_box = driver.find_element(by=By.NAME, value="password")
submit_button = driver.find_element(by=By.ID, value="login-button")

def login(driver, email_box, password_box):
    driver.implicitly_wait(3)
    driver.implicitly_wait(5)
    email_box.send_keys("johnsonkalel15@gmail.com")
    password_box.send_keys("Kalel12345shjd")
    


login(driver=driver,email_box=email_box, password_box=password_box)
修复方案

现有代码存在3个明显问题:

  1. 隐式等待配置位置错误:implicitly_wait是webdriver的全局配置,初始化driver后设置一次即可,无需重复调用,更不应该放在登录函数内
  2. 元素查找时机过早:页面刚触发跳转就立刻查找DOM元素,此时页面元素还未渲染完成,很容易抛出找不到元素的异常
  3. 缺少提交动作:填充完账号密码后没有触发按钮点击,也没有做表单提交

可以用两种稳定的方式实现登录提交,完全不受动态class、随机ID影响:

  • 方案1:通过固定的按钮属性+文本定位,Discord登录按钮的type属性固定为submit,按钮文本固定为登录相关文案,用XPath即可稳定匹配
  • 方案2:密码输入完成后直接触发回车事件,表单默认会触发提交逻辑,不需要额外定位按钮

修正后的完整代码如下:

import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

driver = webdriver.Chrome(r"C:/Users/sexyv/Downloads/chromedriver_win32/chromedriver.exe")
# 全局设置隐式等待,最多等待10秒等待元素加载
driver.implicitly_wait(10)
driver.get("https://discord.com/login")

def login(driver, email, password):
    # 等待元素加载完成后再查找输入框
    email_box = driver.find_element(by=By.NAME, value="email")
    password_box = driver.find_element(by=By.NAME, value="password")
    email_box.clear()
    email_box.send_keys(email)
    password_box.clear()
    password_box.send_keys(password)
    
    # 方式1:通过固定属性+文本定位登录按钮点击
    submit_btn = driver.find_element(by=By.XPATH, value='//button[@type="submit" and normalize-space(text())="Log In"]')
    submit_btn.click()
    
    # 不想定位按钮可以直接用方式2:密码框输入完按回车提交
    # password_box.send_keys(Keys.ENTER)

login(driver=driver, email="johnsonkalel15@gmail.com", password="Kalel12345shjd")

补充说明:如果遇到按钮点击不生效的情况,可以加一步判断按钮可点击状态的显式等待,比隐式等待的判断逻辑更精准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:36:27