gpt4 book ai didi

javascript - 我可以在 chrome 扩展中使用 puppeteer

转载 作者:行者123 更新时间:2023-12-02 19:10:31 43 4
gpt4 key购买 nike

我想构建一个供个人使用的 Chrome 扩展。该扩展程序将抓取一些网页并呈现一些信息。所以我认为 puppeteer 师可以帮助我。我知道我需要在 chrome 扩展中运行节点。是否可以?我找到了一些答案,但它们已经过时了。

最佳答案

我知道这已经晚了 9 个月,但我在 Window 机器上有相同的用例,但你可以让它在 Mac 上工作。

诀窍是使用 puppeteer-web https://github.com/puppeteer/puppeteer/tree/master/utils/browser#bundling-for-web-browsers

捆绑存储库并将其放置在您的 chrome 扩展文件夹中,然后在您的 popup.html 中引用它类似的东西

<script src="./puppeteer/utils/browser/puppeteer-web.js"></script>

然后,您需要利用 Chrome 的远程调试功能,因为 puppeteer-web 无法通过 puppeteer.launch() 启动自己的实例。并且只能使用puppeteer.connect()连接到已经存在的 chrome 实例。

在 Windows 上添加 --remote-debugging-port=9222到 chrome 快捷方式目标字段的末尾,按照 How to make Chrome always launch with remote-debugging-port flag

或者在 Mac 上 /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222 --no-first-run --no-default-browser-check --user-data-dir=$(mktemp -d -t 'chrome-remote_data_dir')

激活远程调试后,您将能够看到 webSocketDebuggerUrl访问属性http://127.0.0.1:9222/json/version在您的浏览器上。这是browserWSEndpoint connect 方法将被调用。

您还需要将端口地址添加到 permissions manifest.json 中的数组文件,否则 ajax 请求将无法在 chrome 扩展中工作。

例如:

"permissions": [ "tabs" , "identity", "http://127.0.0.1:9222/*"],

示例 popup.html文件

<!DOCTYPE html>
<html>
<head>
<title>Example popup</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div>
<button id='puppeteer-button'>Do Puppeteer Things</button>
<script src="./puppeteer/utils/browser/puppeteer-web.js"></script>
<script type="module" src="popup.js"></script>
</div>
</body>
</html>

示例 popup.js文件

let browserWSEndpoint = '';
const puppeteer = require("puppeteer");

async function initiatePuppeteer() {
await fetch("http://127.0.0.1:9222/json/version")
.then(response => response.json())
.then(function(data) {
browserWSEndpoint = data.webSocketDebuggerUrl;
})
.catch(error => console.log(error));
}

initiatePuppeteer();

// Assign button to puppeteer function

document
.getElementById("puppeteer-button")
.addEventListener("click", doPuppeteerThings);

async function doPuppeteerThings() {
const browser = await puppeteer.connect({
browserWSEndpoint: browserWSEndpoint
});
const page = await browser.newPage();

// Your puppeteer code goes here

}

希望有所帮助,尽管感觉有点老套,但通过将远程调试附加到我的工作窗口计算机上的目标字段,我没有遇到任何问题。我写了一篇简短的博客文章,具有更好的语法突出显示here.

关于javascript - 我可以在 chrome 扩展中使用 puppeteer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55184255/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com