我有两个用于 puppeteer 自动化的 Node.js 脚本。
1) 启动器.js
此 Puppeteer 脚本启动 Chrome 浏览器并断开与 chrome 的连接,以便可以使用 WSEndpoint 进行连接。
const puppeteer = require('puppeteer');
module.exports = async () => {
try {
const options = {
headless: false,
devtools: false,
ignoreHTTPSErrors: true,
args: [
`--no-sandbox`,
`--disable-setuid-sandbox`,
`--ignore-certificate-errors`
]
};
const browser = await puppeteer.launch(options);
let pagesCount = await browser.pages();
const browserWSEndpoint = await browser.wsEndpoint();
// console WSEndPoint say : "ws://127.0.0.1:42207/devtools/browser/dbb2525b-ce44-43c2-a335-ff15d0306f36"
console.log("browserWSEndpoint----- :> ", browserWSEndpoint);
await browser.disconnect();
return browserWSEndpoint;
} catch (err) {
console.error(err);
process.exit(1); …Run Code Online (Sandbox Code Playgroud) 我希望我的代码使用 puppeteer 在一个容器中运行,并使用(可能通过“executablePath”启动参数?)来自另一个容器的 chrome 二进制文件。这可能吗?有什么已知的解决方案吗?
使用案例:
工作代码在多个 k8 pod(作为容器)中运行。“有时”(可能经常或不经常)工作人员需要使用 puppeteer 运行代码。我不想让 docker 变得巨大且受限,因为 puppeteer/chrome 容器是(1.5 GB,如果我没记错的话),我只想从另一个正在运行的容器为我的代码提供所需的二进制文件
注意:这不是关于容器化 puppeteer 的问题,我知道这是一种可能性
我正在尝试使用Puppeteer进行一些Web抓取,并且需要将其值检索到我正在构建的网站中。
我试图将Puppeteer文件加载到html文件中,就好像它是JavaScript文件一样,但是我一直收到错误消息。但是,如果我在cmd窗口中运行它,则效果很好。
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 …Run Code Online (Sandbox Code Playgroud)