【问题标题】:Reloading page in puppeteer if response code is not valid如果响应代码无效,则在 puppeteer 中重新加载页面
【发布时间】:2019-10-05 08:33:07
【问题描述】:

所以我知道我可以在 page.goto() 调用后使用 response.status() 函数检查响应代码,但我的程序是为了在网站上抓取并执行一系列操作而构建的。现在有些网站在加载或随机返回 500 错误或 503 错误,而不是提供网页。

所以我想做的是,对于每个导航请求,如果响应代码返回 500 或 503 错误,我想重新加载页面。我一直在看 setRequestInterception 但在发出请求之前就被解雇了。 setResponseInterception 还不存在(但我认为它是 github 中的一个潜在功能)。使用 setResponseInterception 会很轻松:

  1. 检查响应代码
  2. 如果是 500 或 503,则重新加载页面

我想知道我现在是否可以使用 setRequestInterception 执行类似的操作。或者我可能必须单独监控每个导航调用,并在继续之前检查它是否返回有效代码。

【问题讨论】:

    标签: javascript puppeteer google-chrome-headless


    【解决方案1】:

    你没有提供任何代码示例,所以我不知道你的代码结构是谁,但这是一种方法

    async function init_puppeteer( test  ) {
    
    
        var browser = await puppeteer.launch({headless: false    ,  args: ['--no-sandbox', '--disable-setuid-sandbox' , ]});
    
        let success = false ;
        while(!success)
        {
           success = await open_page( browser , link );
        }
        browser.close();
    }
    
    
    async function open_page( browser , link ){
    
        try 
        {
            const page = await browser.newPage();
            await page.goto( link ).catch(function (error) {  throw new Error('TimeoutBrows');  });
    
            // also you can check status code and throw error if its 500 or 503
    
            return true ; 
        }
        catch(e){
            return false; 
        }
    }
    

    【讨论】:

    • 那么您检查状态的代码在哪里?这并不是 OP 问题的真正答案
    • @GianlucaPietrobon 阅读了第一行问题,OP 知道如何检查他的问题是关于处理导航的状态
    猜你喜欢
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多