我正在尝试遵循instructions here to bundle puppeteer,目的是将其包含在chrome扩展名中,作为在浏览器窗口中进行脚本操作的一种巧妙方式(特别是将页面打印为PDF,这令人惊讶地是不可能的)据我所知,仅使用Chrome Extension API。
根据上面链接中的README
,我已经按照以下步骤设置了Chrome扩展程序:
background.html
<script src="./puppeteer/utils/browser/puppeteer-web.js"></script>
<script src="background.js"></script>
background.js
const puppeteer = require("puppeteer");
引发错误puppeteer/utils/browser/puppeteer-web.js:10877 (anonymous function) Uncaught TypeError: Puppeteer is not a constructor
。
我在这里想念什么?
Chrome版本:69.0.3497.100版
节点版本:7.4.0
答案 0 :(得分:1)
Chrome扩展程序不允许unsafe-eval
,这就是puppeteer无法在chrome扩展程序上运行的原因。在manifest.json
上进行以下设置。
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"
经过以下代码测试,
const puppeteer = require('puppeteer');
async function getTitle() {
const browser = await puppeteer.connect({
browserWSEndpoint: 'ws://127.0.0.1:9222/devtools/browser/9f0a2240-2cb7-4efa-ac3c-8ef883d36d12',
});
const page = await browser.newPage();
await page.goto('http://example.com');
const title = await page.title();
await page.close();
await browser.disconnect();
return title;
}
getTitle().then(console.log);
如果我直接运行它或将其放在页面上,则代码可以完美运行,但不能仅通过chrome扩展程序工作。
这里的asyncawait
检查帮助我找到了罪魁祸首。
let asyncawait = true;
try {
new Function('async function test(){await 1}');
} catch (error) {
asyncawait = false;
}