我试图抓取传递给 scrape 函数的任何网页,但无论 page.goto() 设置的超时如何,我都会收到超时错误,如果设置为 0,应用程序只会继续等待。
const express = require('express');
const cors = require('cors');
const MYPORT = process.env.PORT || 4001;
const app = express();
const puppeteer = require('puppeteer');
app.use(express.json());
app.use(cors());
const scrape = async (url) => {
var body;
try {
const browser = await puppeteer.launch({
headless: true,
args: ['--no-sandbox'],
timeout: 0
});
console.log('Browser launched');
const page = await browser.newPage();
console.log('Page opened');
await page.goto(url, { waitUntil: 'load', timeout: 3 * 60000 });
await page.waitForSelector('body', {waitUntil: 'load'})
console.log('Link opened');
await page.waitForNavigation({waitUntil: …Run Code Online (Sandbox Code Playgroud)node.js express windows-subsystem-for-linux puppeteer ubuntu-18.04
我正在创建一个 Web api,它可以抓取给定的 url 并将其发回。我正在使用 Puppeteer 来做到这一点。我问了这个问题:Puppeteer 的行为不像开发者控制台
并收到一个答案,表明只有当 headless 设置为 false 时它才有效。我不想不断打开我不需要的浏览器用户界面(我只需要数据!),所以我正在寻找为什么 headless 必须为 false,我可以得到一个修复程序,让 headless = true 。
这是我的代码:
express()
.get("/*", (req, res) => {
global.notBaseURL = req.params[0];
(async () => {
const browser = await puppet.launch({ headless: false }); // Line of Interest
const page = await browser.newPage();
console.log(req.params[0]);
await page.goto(req.params[0], { waitUntil: "networkidle2" }); //this is the url
title = await page.$eval("title", (el) => el.innerText);
browser.close();
res.send({
title: title,
});
})();
})
.listen(PORT, () => …Run Code Online (Sandbox Code Playgroud)