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

使用Selenium无法点击Reddit登录按钮的问题求助

解决Selenium无法点击Reddit登录按钮的问题

你的问题核心在于硬等待不可靠和定位器过于依赖不稳定的DOM结构,同时没有确保元素处于可交互状态就执行操作,导致点击失败。以下是具体修复方案:

问题分析

  1. time.sleep()是硬等待,无法适配页面实际加载速度,可能元素还未渲染完成就触发操作,引发找不到元素或点击无效的问题
  2. 你使用的CSS选择器#login > auth-flow-modal > div.w-100 > faceplate-tracker > button依赖多层DOM层级,Reddit页面结构一旦微调,这个选择器就会直接失效
  3. 没有处理元素可能处于不可点击、未完全加载的状态

修复方案

1. 用显式等待替代硬等待

Selenium的WebDriverWait可以等待元素满足特定条件(比如可点击、已加载)后再执行操作,这是比硬等待更可靠的最佳实践。

2. 使用更稳定的定位器

登录按钮可以通过type="submit"属性或按钮文本定位,这类属性不会轻易随页面结构变化而改变:

  • CSS选择器:button[type='submit']
  • XPath://button[contains(text(), 'Log In')]

修改后的代码

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


class Bot:
    def __init__(self):
        self.driver = webdriver.Chrome()
        self.wait = WebDriverWait(self.driver, 10)  # 最多等待10秒

    def interact(self, selector: str, text: str=None, by=By.CSS_SELECTOR):
        # 等待元素可交互后再操作
        element = self.wait.until(EC.element_to_be_clickable((by, selector)))
        if text is None:
            element.click()
        else:
            element.send_keys(text)


class RedditBot(Bot):
    def __init__(self):
        super().__init__()
        self.driver.get("https://www.reddit.com/login/")


if __name__ == "__main__":
    rb = RedditBot()
    rb.interact("input[id='login-username']", text="Brave_Primary1797")
    rb.interact("input[id='login-password']", text="EcOjllIrz3M87q9S08M")
    # 使用更稳定的定位器点击登录按钮
    rb.interact("button[type='submit']")

额外注意事项

  • 如果遇到Reddit的反爬验证(比如验证码),需要手动完成验证或借助打码服务处理
  • 确保ChromeDriver版本与本地Chrome浏览器版本完全匹配,版本不兼容也会导致元素交互失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 12:43:10