相关疑难解决方法(0)

Puppeteer 不断收到 TimeoutError:超出导航超时 80000 毫秒

我试图抓取传递给 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

9
推荐指数
1
解决办法
2万
查看次数

为什么 Headless 需要为 false 才能让 Puppeteer 工作?

我正在创建一个 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)

javascript web-scraping puppeteer

3
推荐指数
1
解决办法
6812
查看次数