You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用CefSharp自动登录Discord网页端时输入内容不被识别的问题求助

解决Discord登录表单自动输入无效的问题

这个问题的核心原因是Discord的登录表单使用了React(或类似前端框架)的受控组件,这类组件的值由框架内部状态管理,而非直接绑定到DOM元素的value属性。你直接修改DOM的value只会改变页面视觉显示,但不会同步到框架状态中,所以点击登录按钮时,系统仍然认为输入框是空的。

为什么Chrome控制台里能看到内容但value属性没更新?

在React这类框架中,DOM只是状态的“渲染结果”。当你手动修改DOM的value时,框架并没有感知到这个变化,它的内部状态还是原来的空值。你看到的视觉内容只是DOM的临时修改,组件的真实值仍存在框架状态里,所以元素的value属性实际上并没有被真正更新。

正确的解决方法:模拟真实用户输入

要让框架识别到输入内容,你需要模拟真实的用户输入行为——不仅要设置value,还要触发input事件,让框架捕获到变化并更新内部状态。

修改你的脚本如下:

(function() {
    // 获取邮箱输入框并模拟输入
    const emailInput = document.querySelector('input[name="email"]');
    emailInput.value = '你的邮箱';
    emailInput.dispatchEvent(new Event('input', { bubbles: true }));

    // 获取密码输入框并模拟输入
    const passwordInput = document.querySelector('input[name="password"]');
    passwordInput.value = '你的密码';
    passwordInput.dispatchEvent(new Event('input', { bubbles: true }));

    // 等待一下再点击登录(可选,确保状态同步完成)
    setTimeout(() => {
        const loginBtn = document.querySelector('button[type="submit"]');
        loginBtn.click();
    }, 500);

    return '操作完成';
})();

对应的C#代码调整:

const string email = @"你的邮箱";
const string password = @"你的密码";
const string script = $@"(function() {{
    const emailInput = document.querySelector('input[name=""email""]');
    emailInput.value = '{email}';
    emailInput.dispatchEvent(new Event('input', {{ bubbles: true }}));

    const passwordInput = document.querySelector('input[name=""password""]');
    passwordInput.value = '{password}';
    passwordInput.dispatchEvent(new Event('input', {{ bubbles: true }}));

    setTimeout(() => {{
        const loginBtn = document.querySelector('button[type=""submit""]');
        loginBtn.click();
    }}, 500);

    return '操作完成';
}})();";

var javascriptResponse = await browser.EvaluateScriptAsync(script);
dynamic result = javascriptResponse.Result;

额外注意事项

  • 确保执行脚本时页面已经完全加载完成,可以通过监听FrameLoadEnd事件或者等待特定元素出现后再执行。
  • Discord可能有反自动化机制,频繁的自动登录操作可能会触发验证码或账号限制,建议测试时不要过于频繁。
  • 如果登录按钮的选择器失效,可以用更稳定的选择器,比如button[type="submit"],比依赖类名更可靠(类名可能会随Discord的UI更新而变化)。

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

火山引擎 最新活动