簡體   English   中英

如何調試打不開的頁面(空白頁面)

[英]how to debug a page that wont open (blank page)

這是我打開標簽的方式

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

        }
    );

我在一個瀏覽器中循環打開多個頁面,一個粒子頁面(這是我打開的第一個選項卡)不會第一次打開(第一個循環)並且我收到超時錯誤,它在下一個循環中工作得很好......我試圖捕捉屏幕截圖,它只是一個空白頁......我有相同的代碼工作正常

所以我的問題是無論如何要收集有關為什么頁面無法打開的信息? 是反應遲了還是別的什么?

Puppeteer 文檔包括調試提示,其中列出了:

  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
    • 向 Puppeteer (Node.js) 代碼添加debugger
    • ndb jestndb mocha (或npx ndb jest / npx ndb mocha

您可能還想查看有關錯誤處理的 Puppeteer 文檔:

對於某些類型的錯誤,Puppeteer 使用特定的錯誤類。 這些類可以通過require('puppeteer/Errors')

支持的類列表:

示例用法:

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

// ...

try {
  await page.waitForSelector('.foo');
} catch (e) {
  if (e instanceof TimeoutError) {
    // Handle TimeoutError here ...
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM