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

使用Puppeteer点击登录按钮后模态框消失无重定向无报错如何解决

问题根因
  • 直接通过$eval修改输入框value属性仅修改了DOM属性值,无法触发站点前端框架绑定的input、change等表单监听事件,表单状态管理逻辑感知不到输入的账号密码,提交时读取到的是空值,直接触发模态框关闭逻辑,没有走账号密码校验流程,因此不会出现错误提示。
  • 缺少元素等待逻辑,可能出现元素未完全渲染完成就执行操作的异常。
修复方案

将直接赋值的操作替换为page.type()模拟真实用户输入,该方法会触发完整的输入事件,让站点表单逻辑正确捕获输入内容;同时添加元素等待逻辑提升脚本稳定性,修复后代码如下:

const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch({ headless: false });
    const page = await browser.newPage();
    await page.setViewport({
        width: 1550,
        height: 700,
        deviceScaleFactor: 1,
    });
    // 等待页面网络空闲后再执行后续操作,避免资源未加载完成导致的异常
    await page.goto('https://splinterlands.com', { waitUntil: 'networkidle2' });
    
    // 等待登录按钮可见后点击唤起登录模态框
    await page.waitForSelector("#log_in_button button", { visible: true });
    await page.click("#log_in_button button");

    // 模拟用户输入邮箱,添加输入间隔更贴近真实操作行为
    await page.waitForSelector("input#email.form-control", { visible: true });
    await page.type("input#email.form-control", "test@gmail.com", { delay: 80 });
    
    // 模拟用户输入密码
    await page.waitForSelector("input#password.form-control", { visible: true });
    await page.type("input#password.form-control", "wrongpass", { delay: 80 });

    // 点击登录提交按钮
    await page.waitForSelector(".form-horizontal button.btn.btn-primary.btn-lg", { visible: true });
    await page.click(".form-horizontal button.btn.btn-primary.btn-lg");
})();
效果验证

修改后提交错误的账号密码,站点会走正常的校验流程,弹出账号密码不匹配的错误提示,登录模态框不会直接消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:06:04