如何调试无法打开的页面(空白页面)

时间:2018-09-27 17:06:01

标签: javascript node.js puppeteer

这是我打开标签页的方式

    await page.goto( url , {timeout: 90000} )
        .catch(function(error){
            page.close();

        }
    );

我在一个循环中在一个浏览器中打开多个页面,一个粒子页面(这是我打开的第一个选项卡)不会第一次打开(第一个循环),并且出现超时错误,它可以在下一个循环中正常工作。 ..我试图捕获屏幕截图,而它只是一个空白页..我在相同的代码上可以正常工作

所以我的问题是是否仍要收集有关为何无法打开页面的信息?是迟到的反应还是其他?

1 个答案:

答案 0 :(得分:3)

Puppeteer文档包括debugging tips,其中列出:

  1. 使用headless : false关闭无头模式以查看浏览器显示的内容:

    const browser = await puppeteer.launch( { headless : false } );
    
  2. 使用slowMo选项放慢Puppeteer的操作,以帮助查看发生了什么事情:

    const browser = await puppeteer.launch({
        headless : false,
        slowMo   : 200    // slow down by 200ms
    });
    
  3. 捕获控制台输出:

    page.on( 'console', msg => { console.log( 'Page Log from Evaluate:', msg.text() ); } );
    
    await page.evaluate( () => { console.log( 'Current URL:', location.href ); } );
    
  4. 停止测试执行并在浏览器中使用调试器:

    • 在启动Puppeteer时使用devtools : true

      const browser = await puppeteer.launch( { devtools : true } );
      
    • 更改默认测试超时:

      jest.setTimeout( 100000 );                 // Jest
      jasmine.DEFAULT_TIMEOUT_INTERVAL = 100000; // Jasmine
      this.timeout( 100000 );                    // Mocha
      
    • 添加内部带有debugger的评估语句,或将debugger添加至现有的评估语句:

      await page.evaluate( () => { debugger; } );
      
  5. 启用详细日志记录:

    # Basic verbose logging
    env DEBUG="puppeteer:*" node script.js
    
    # Debug output can be enabled/disabled by namespace
    env DEBUG="puppeteer:protocol" node script.js # protocol connection messages
    env DEBUG="puppeteer:session" node script.js # protocol session messages (protocol messages to targets)
    
    # Protocol traffic can be rather noisy. This example filters out all Network domain messages
    env DEBUG="puppeteer:session" env DEBUG_COLORS=true node script.js 2>&1 | grep -v '"Network'
    
  6. 使用ndbnpx调试Puppeteer(Node.js)代码:

    • npm install -g ndb
    • 在伪人(Node.js)代码中添加debugger
    • ndb jestndb mocha(或npx ndb jest / npx ndb mocha

您可能还需要查看有关error handling的Puppeteer文档:

  

对于某些类型的错误,Puppeteer使用特定的错误类别。这些类可通过require('puppeteer/Errors')获得。

支持的类列表:

示例用法:

const { TimeoutError } = require( 'puppeteer/Errors' );

// ...

try {

    await page.waitForSelector( '.foo' );

} catch ( e ) {

    if ( e instanceof TimeoutError ) {
        // Handle TimeoutError here ...
    }

}