【问题标题】:Puppeteer Error: Page Crashed! trying to get page with fully loaded bodyPuppeteer 错误:页面崩溃!试图获取带有满载正文的页面
【发布时间】:2020-03-22 18:25:08
【问题描述】:

当我用requestaxios scrape 时,它的体内没有任何东西。

<!DOCTYPE html><html>
<head>
<!--Deleted Head content -->
</head>
<body>
    <ui-root></ui-root>
<script type="text/javascript" src="https://d13fzx7h5ezopb.cloudfront.net/www/v479/product/inline.bundle.js"></script><script type="text/javascript" src="https://d13fzx7h5ezopb.cloudfront.net/www/v479/product/polyfills.bundle.js"></script><script type="text/javascript" src="https://d13fzx7h5ezopb.cloudfront.net/www/v479/product/vendor.bundle.js"></script><script type="text/javascript" src="https://d13fzx7h5ezopb.cloudfront.net/www/v479/product/main.bundle.js"></script>
</body>
</html>

我想获得一个完整加载正文的 HTML 代码。所以我尝试实现 puppeteer。

在节点版本 v10.15.3 上运行 Puppeteer。 这是我的 Puppeteer 代码:

const browser = await puppeteer.launch({
      args: [
        "--no-sandbox", 
        "--disable-setuid-sandbox", 
        "--user-agent=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"]
    })
const page = await browser.newPage()
await page.goto(sourceUrl)
htmlCode = await page.evaluate(() => document.body.innerHTML)
console.log(htmlCode)

我试过了:

await page.goto(sourceUrl, {waitUntil:"networkidle0"})

await page.waitForFunction('window.status==="ready"')

await page.waitFor(5000)

它们似乎都不起作用。结果要么是空的正文/超时/页面崩溃

这是错误信息

(node:966) UnhandledPromiseRejectionWarning: Error: Page crashed!
    at Page._onTargetCrashed (/mnt/c/users/junsoo/desktop/pikk/node_modules/puppeteer/lib/Page.js:216:24)
    at CDPSession.Page.client.on.event (/mnt/c/users/junsoo/desktop/pikk/node_modules/puppeteer/lib/Page.js:124:56)
    at CDPSession.emit (events.js:189:13)
    at CDPSession.EventEmitter.emit (domain.js:441:20)
    at CDPSession._onMessage (/mnt/c/users/junsoo/desktop/pikk/node_modules/puppeteer/lib/Connection.js:200:12)
    at Connection._onMessage (/mnt/c/users/junsoo/desktop/pikk/node_modules/puppeteer/lib/Connection.js:112:17)
    at WebSocketTransport._ws.addEventListener.event (/mnt/c/users/junsoo/desktop/pikk/node_modules/puppeteer/lib/WebSocketTransport.js:44:24)
    at WebSocket.onMessage (/mnt/c/users/junsoo/desktop/pikk/node_modules/ws/lib/event-target.js:120:16)
    at WebSocket.emit (events.js:189:13)
    at WebSocket.EventEmitter.emit (domain.js:441:20)

我正在尝试抓取此页面:https://www.29cm.co.kr/product/178591

【问题讨论】:

    标签: javascript node.js npm web-scraping puppeteer


    【解决方案1】:

    我花了几天时间调试这个错误,我的解决方案是使用以下参数启动 pupeteer:

    const launchOptions = {
        ignoreHTTPSErrors: true,
        args: [
          "--unlimited-storage",
          "--full-memory-crash-report",
          "--disable-gpu",
          "--ignore-certificate-errors",
          "--no-sandbox",
          "--disable-setuid-sandbox",
          "--disable-dev-shm-usage",
          "--lang=en-US;q=0.9,en;q=0.8",
          "--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36",
        ],
      };
      const browser = await puppeteer.launch(launchOptions);
    

    【讨论】:

    • 非常感谢,这也阻止了我的页面崩溃,令人讨厌的是我永远无法捕捉到页面崩溃,即使将我的所有代码包装在 try {} catch {} 语句中,我不再出现任何崩溃,这很好,但仍然很想知道它在我的代码中发生的位置
    猜你喜欢
    • 1970-01-01
    • 2020-01-17
    • 2020-10-31
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多