node.js - 无法在谷歌云功能中调试 Puppeteer 超时

我已经进行了大量的调试,阅读了文章,但无法弄清楚为什么我会得到一个

在 Promise.then (/workspace/node_modules/puppeteer/lib/cjs/puppeteer/common/LifecycleWatcher.js:106:111) name: 'TimeoutError'

对于下面的“goto”行,我尝试调整参数,并尝试返回 package.json 中的 puppeteer 版本,从版本 5 到 4 再到 3。代码在本地运行良好,但在 Google Cloud Function 中一直超时。我通过为 google.com 编写一个简单的获取函数来验证我的 VPC 连接器是否正常工作,所以这纯粹是 GCF 问题中的 Puppeteer。

仅供引用,这是在 PubSub 主题上触发的。

const puppeteer = require('puppeteer')

const PUPPETEER_OPTIONS = {
  headless: true,
  args: [
    '--disable-gpu',
    '--disable-dev-shm-usage',
    '--disable-setuid-sandbox',
    '--no-first-run',
    '--no-sandbox',
    '--no-zygote',
    '--single-process',
    "--proxy-server='direct://'",
    '--proxy-bypass-list=*',
  ],
};

const closeConnection = async (page, browser) => {
  page && (await page.close());
  browser && (await browser.close());
};

exports.runScraper = async (message, context) => {
    const url = Buffer.from(message.data, 'base64').toString()
    console.log( `triggered with ${url}`)
    
    const browser = await puppeteer.launch(PUPPETEER_OPTIONS);
    const page = await browser.newPage();

    try // open url and get price and title
    {
        console.log( "awaiting goto")
        await page.goto(url, { waitUntil: 'networkidle2' })
        console.log( "awaiting evaluate")
        let item = await page.evaluate( async () => {
            let priceArray = document.querySelector('div.cAIbCF').innerText.split('.')
            return {
                title: document.querySelector('h1 > span').innerText,
                whole: priceArray[0],
                part: priceArray[1]
            }
        }) 
    } // try
    catch (error) {
        console.log( error );
        throw error;
    } finally {
        console.log( "finally closeConnection" );
        await closeConnection(page, browser);
        return;
    }
}

最佳答案

我遇到了类似的问题。 我变了

await page.goto(url, { waitUntil: 'networkidle2' })

await page.goto(url, {
    waitUntil: 'load',
    timeout: 0
});

它奏效了。请随意使用它并告诉它是否有效。

https://stackoverflow.com/questions/63530336/

相关文章:

apache-spark - 如何在 pyspark 数据帧读取方法中包含分区列

flutter - 飞镖 :tml and dart:js not found error flut

android - 切换 AdMob 帐户以更改国家/地区的步骤

python - 我的碰撞函数中的 For 循环从未命中?

ios - 快速用户界面 | onDrag - 自定义(dragItem)预览图像外观

node.js - puppeteer overridePermissions 剪贴板读取不适用于

java - Java 库导出的相对路径

reactjs - Expo React-Native 调试器 - 错误 : Unable to r

python - 如何在python中调整直方图上的字体大小

c - 在控制台中移动光标和打印字符不适用于 sleep