【发布时间】:2018-12-23 02:37:04
【问题描述】:
我想在向其中注入一些数据后对页面进行截图:
(async () => {
const browser = await puppeteer.launch({dumpio: true});
const page = await browser.newPage();
await page.evaluate((data) => {
console.log("-> evaluate");
window.TestMe = {};
window.TestMe.data = data;
}, jsonData)
await page.goto(url);
await page.screenshot({
path: 'img.png',
});
await browser.close();
})();
我在这个简单的页面上进行测试:
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
<div id="content"></div>
<script>
let hasData = window.TestMe && window.TestMe.data;
if (!hasData) {
console.log("ERROR: No data provided by Puppeteer at window.TestMe.data.");
} else {
document.getElementById("content").innerHTML = JSON.stringify(window.TestMe.data);
}
</script>
</body>
</html>
我得到的评估似乎不起作用:
[0715/103457.665633:INFO:CONSOLE(2)] "-> evaluate", source: __puppeteer_evaluation_script__ (2)
[0715/103457.698770:INFO:CONSOLE(11)] "ERROR: No data provided by Puppeteer at window.TestMe.data.", source: http://localhost:8989/ (11)
我做错了什么?
【问题讨论】:
-
只要你的注入是异步的并且你的脚本是同步的并且放在开头,它可能还没有加载。你的注入代码放在哪里?
-
@Drag13 谢谢。对于这种特定情况,我该如何解决这个问题?
-
是否有与 PhantomJS 的
onInitialized等效的木偶操作者? (phantomjs.org/api/webpage/handler/on-initialized.html)
标签: javascript html node.js puppeteer google-chrome-headless