如何在任何网络浏览器中 运行 Puppeteer 代码?
How to run Puppeteer code in any web browser?
我正在尝试使用 Puppeteer 进行一些网络抓取,我需要将值检索到我正在构建的网站中。
我试图将 Puppeteer 文件加载到 html 文件中,就好像它是 JavaScript 文件一样,但我一直收到错误消息。但是,如果我 运行 它在 cmd window 中运行良好。
Scraper.js:
getPrice();
function getPrice() {
const puppeteer = require('puppeteer');
void (async () => {
try {
const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.goto('http://example.com')
await page.setViewport({ width: 1920, height: 938 })
await page.waitForSelector('.m-hotel-info > .l-container > .l-header-section > .l-m-col-2 > .m-button')
await page.click('.m-hotel-info > .l-container > .l-header-section > .l-m-col-2 > .m-button')
await page.waitForSelector('.modal-content')
await page.click('.tile-hsearch-hws > .m-search-tabs > #edit-search-panel > .l-em-reset > .m-field-wrap > .l-xs-col-4 > .analytics-click')
await page.waitForNavigation();
await page.waitForSelector('.tile-search-filter > .l-display-none')
const innerText = await page.evaluate(() => document.querySelector('.tile-search-filter > .l-display-none').innerText);
console.log(innerText)
} catch (error) {
console.log(error)
}
})()
}
index.html:
<html>
<head></head>
<body>
<script src="../js/scraper.js" type="text/javascript"></script>
</body>
</html>
在Chrome的控制台中预期的结果应该是这个:
但我收到了这个错误:
我做错了什么?
编辑:由于 puppeteer 删除了对 puppeteer-web 的支持,我将其移出 repo 并尝试对其进行一些修补。
它确实适用于浏览器。该包名为 puppeteer-web,专门针对此类情况制作。
但要点是,某些服务器上必须有一些 chrome 运行 的实例。只有这样你才能连接到它。
稍后您可以在网页中使用它通过其 WS 端点驱动另一个浏览器实例:
<script src="https://unpkg.com/puppeteer-web">
</script>
<script>
const browser = await puppeteer.connect({
browserWSEndpoint: `ws://0.0.0.0:8080`, // <-- connect to a server running somewhere
ignoreHTTPSErrors: true
});
const pagesCount = (await browser.pages()).length;
const browserWSEndpoint = await browser.wsEndpoint();
console.log({ browserWSEndpoint, pagesCount });
</script>
我在 puppeteer 和 webpack 上玩得很开心,
查看这些答案以全面了解创建服务器等,
- Official link to puppeteer-web
- Puppeteer with local wsEndpoint
我正在尝试使用 Puppeteer 进行一些网络抓取,我需要将值检索到我正在构建的网站中。
我试图将 Puppeteer 文件加载到 html 文件中,就好像它是 JavaScript 文件一样,但我一直收到错误消息。但是,如果我 运行 它在 cmd window 中运行良好。
Scraper.js:getPrice();
function getPrice() {
const puppeteer = require('puppeteer');
void (async () => {
try {
const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.goto('http://example.com')
await page.setViewport({ width: 1920, height: 938 })
await page.waitForSelector('.m-hotel-info > .l-container > .l-header-section > .l-m-col-2 > .m-button')
await page.click('.m-hotel-info > .l-container > .l-header-section > .l-m-col-2 > .m-button')
await page.waitForSelector('.modal-content')
await page.click('.tile-hsearch-hws > .m-search-tabs > #edit-search-panel > .l-em-reset > .m-field-wrap > .l-xs-col-4 > .analytics-click')
await page.waitForNavigation();
await page.waitForSelector('.tile-search-filter > .l-display-none')
const innerText = await page.evaluate(() => document.querySelector('.tile-search-filter > .l-display-none').innerText);
console.log(innerText)
} catch (error) {
console.log(error)
}
})()
}
index.html:
<html>
<head></head>
<body>
<script src="../js/scraper.js" type="text/javascript"></script>
</body>
</html>
在Chrome的控制台中预期的结果应该是这个:
但我收到了这个错误:
我做错了什么?
编辑:由于 puppeteer 删除了对 puppeteer-web 的支持,我将其移出 repo 并尝试对其进行一些修补。
它确实适用于浏览器。该包名为 puppeteer-web,专门针对此类情况制作。
但要点是,某些服务器上必须有一些 chrome 运行 的实例。只有这样你才能连接到它。
稍后您可以在网页中使用它通过其 WS 端点驱动另一个浏览器实例:
<script src="https://unpkg.com/puppeteer-web">
</script>
<script>
const browser = await puppeteer.connect({
browserWSEndpoint: `ws://0.0.0.0:8080`, // <-- connect to a server running somewhere
ignoreHTTPSErrors: true
});
const pagesCount = (await browser.pages()).length;
const browserWSEndpoint = await browser.wsEndpoint();
console.log({ browserWSEndpoint, pagesCount });
</script>
我在 puppeteer 和 webpack 上玩得很开心,
查看这些答案以全面了解创建服务器等,
- Official link to puppeteer-web
- Puppeteer with local wsEndpoint