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

如何在JHipster 7.9.4单体应用中集成Puppeteer?编译问题求助

JHipster 7.9.4 集成浏览器自动化工具的解决方案

错误根源分析

你把Puppeteer代码写在了Angular前端代码中,这是核心问题:
Puppeteer是Node.js环境专属的浏览器自动化工具,它需要直接操作本地浏览器进程,依赖fs、child_process等Node.js核心模块——这些模块在浏览器环境中完全不存在,Webpack 5取消默认polyfill只是表象,本质上浏览器无法提供启动外部进程、访问本地文件的能力,加polyfill也无法解决。


正确集成方案:将自动化逻辑移至后端/独立脚本

方案1:独立Node.js脚本(推荐)

直接写一个独立的Node.js脚本,从MongoDB读取nodes实体数据,执行自动化登录:

  1. 在项目根目录新建automation文件夹,创建login-automation.js:
const puppeteer = require('puppeteer');
const { MongoClient } = require('mongodb');

async function autoLoginFromNodes() {
    // 连接JHipster使用的MongoDB数据库
    const client = await MongoClient.connect('mongodb://localhost:27017/myapp');
    const db = client.db('myapp');
    const nodes = await db.collection('nodes').find().toArray();

    // 启动Puppeteer浏览器
    const browser = await puppeteer.launch({ headless: 'new' });

    for (const node of nodes) {
        const page = await browser.newPage();
        try {
            await page.goto(node.loginUrl);
            // 填充登录凭证
            await page.type('#username', node.username);
            await page.type('#password', node.password);
            await page.click('#login-button');
            // 等待登录完成
            await page.waitForNavigation({ waitUntil: 'networkidle2' });
            console.log(`✅ 成功登录 ${node.loginUrl}`);
            await page.screenshot({ path: `login-success-${node._id}.png` });
        } catch (err) {
            console.error(`❌ 登录 ${node.loginUrl} 失败:`, err);
        } finally {
            await page.close();
        }
    }

    await browser.close();
    await client.close();
}

autoLoginFromNodes().catch(console.error);
  1. 安装依赖(在automation文件夹下执行):
npm init -y
npm install puppeteer mongodb
  1. 运行脚本:
node login-automation.js

方案2:封装为JHipster后端REST接口

如果需要通过前端触发自动化操作,可以在Java后端中调用Node.js脚本,或者使用Java原生的浏览器自动化工具(如Selenium WebDriver):

  • 集成Selenium时,逻辑和Puppeteer一致:从MongoDB读取nodes数据,驱动浏览器完成登录,无需依赖Node.js环境。

前端端到端测试替代方案

如果你的需求是前端自动化测试,JHipster已经默认集成了Cypress,直接用Cypress编写测试即可,无需引入Puppeteer:

// 在cypress/e2e/login-auto.cy.js中编写测试
describe('自动登录测试', () => {
    it('从nodes实体获取凭证完成登录', () => {
        // 调用后端接口获取nodes数据
        cy.request('GET', '/api/nodes').then((response) => {
            const nodes = response.body;
            nodes.forEach(node => {
                cy.visit(node.loginUrl);
                cy.get('#username').type(node.username);
                cy.get('#password').type(node.password);
                cy.get('#login-button').click();
                // 验证登录成功
                cy.url().should('not.include', '/login');
                cy.screenshot(`login-success-${node.id}`);
            });
        });
    });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 21:59:56