node.js - 超过 30000 毫秒的 Puppeteer 导航超时

标签 node.js ubuntu puppeteer

我正在尝试使用 puppeteer 截取启动页面的屏幕截图,但它引发了错误

TimeoutError: Navigation timeout of 30000 ms exceeded


这是我的代码
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth')();
var Xvfb = require('xvfb');
var express = require('express');

var app = express();

StealthPlugin.onBrowser = () => { };
puppeteer.use(StealthPlugin);

// Required for virtual display in linux environment
var xvfb = new Xvfb({
    displayNum: 99,
    reuse: true,
    silent: true,
    xvfb_args: ['-dpi', 72, "-screen", "0", '1920x1080x24'],
});
xvfb.start((err) => { if (err) console.error(err) })

puppeteer.launch({
    headless: false,
    userDataDir: 'bot',
    args: [
        '--no-sandbox',
        '--proxy-server="direct://"',
        '--proxy-bypass-list=*',
        '--start-fullscreen',
        '--display=' + xvfb._display
    ]
}).then(async browser => {
    console.log('Starting bot ...');
    const page = await browser.newPage();

    app.listen(3000, function(){
        console.log('server is listening at port 3000')
    })

    app.get('/', async function (req, res) {
        res.send('Test')
    })

    page.setDefaultNavigationTimeout(0)
    await page.goto('https://www.facebook.com', { timeout: 0, waitUntil: 'networkidle2' });
    // await page.screenshot({ path: 'example.png' });
});
如果我在我的 Windows localhost 设备中运行,但在 ubuntu 服务器中运行时会在上面抛出错误,则它可以工作。它也无法监听我设置的端口。 await browser.newPage(); 行似乎有错误
我知道这个问题已经发布了很多次,但没有任何效果。

最佳答案

也许你的问题是网站没有正确加载你可以试试这个代码

const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth')();
var Xvfb = require('xvfb');
var express = require('express');

var app = express();

StealthPlugin.onBrowser = () => { };
puppeteer.use(StealthPlugin);

// Required for virtual display in linux environment
var xvfb = new Xvfb({
    displayNum: 99,
    reuse: true,
    silent: true,
    xvfb_args: ['-dpi', 72, "-screen", "0", '1920x1080x24'],
});
xvfb.start((err) => { if (err) console.error(err) })

puppeteer.launch({
    headless: false,
    userDataDir: 'bot',
    args: [
        '--no-sandbox',
        '--proxy-server="direct://"',
        '--proxy-bypass-list=*',
        '--start-fullscreen',
        '--display=' + xvfb._display
    ]
}).then(async browser => {
    console.log('Starting bot ...');
    const page = await browser.newPage();

    app.listen(3000, function(){
        console.log('server is listening at port 3000')
    })

    app.get('/', async function (req, res) {
        res.send('Test')
    })

    await page.goto('https://www.facebook.com', { waitUntil: 'load' });
    // await page.screenshot({ path: 'example.png' });
    await page.waitForNavigation();
});

关于node.js - 超过 30000 毫秒的 Puppeteer 导航超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72209209/

相关文章:

windows - 使用 Eclipse 进行跨平台 java 开发(构建路径问题)

ubuntu - 如何解决rsync error : error in IPC code (code 14) at pipe. c(85) [sender=3.1.2]的报错

javascript - 如何在 Puppeteer 中单击并按住

javascript - puppeteer 师API : only get domain redirects

javascript - Mongoose 类型错误: findOneAndUpdate is not a function

node.js - 下一个 JS : Error: EPERM: operation not permitted, rmdir

javascript - 用 proxyquire 模拟 MongoDB

node.js - 无法在 sequelize 中关联表( Node js + sequelize)

node.js - 通过 node.js 应用程序在 redis 中保存嵌套哈希

linux - Ubuntu 命令行上的语法错误