【问题标题】:Puppeteer page request fails only on AWS EC2 instancePuppeteer 页面请求仅在 AWS EC2 实例上失败
【发布时间】:2020-04-16 07:06:36
【问题描述】:

我使用 node (v12.16.2) 和 puppeteer (v2.1.1) 编写了一个小型 javascript 程序,我试图在 AWS EC2 实例上运行。我正在执行附加到此的 url。它在具有类似版本的本地(非 AWS)linux 机器上运行良好,但在 EC2 上,它失败了,根本不显示页面。我试过用 headless=false 和 devtools=true 运行。在浏览器控制台中,我看到了这个:

未捕获的类型错误:无法读取未定义的属性“长度” 在 il_Ev (rs=ACT90oFtPziyty36T_zhgMUEStuCtJgAkQ:1862) 在 il_Hv (rs=ACT90oFtPziyty36T_zhgMUEStuCtJgAkQ:1849) 在 il_Yv.initialize (rs=ACT90oFtPziyty36T_zhgMUEStuCtJgAkQ:1867) 在 il__i (rs=ACT90oFtPziyty36T_zhgMUEStuCtJgAkQ:270) 在 il_Gl.il_Wj.H (rs=ACT90oFtPziyty36T_zhgMUEStuCtJgAkQ:322) 在 rs=ACT90oFtPziyty36T_zhgMUEStuCtJgAkQ:1869

正如我所提到的,同样的代码在不同的 linux 机器上也能正常工作,并且只是加载到浏览器中;没有错误。我难住了。有谁知道可能会发生什么?其他页面,如 google.com,在 EC2 中加载良好,仅供参考。 TIA。

里德

https://www.google.com/imgres?imgurl=https%3A%2F%2Fimg-s-msn-com.akamaized.net%2Ftenant%2Famp%2Fentityid%2FAACPW4S.img%3Fh%3D552%26w%3D750%26m%3D6%26q%3D60%26u%3Dt%26o%3Df%26l%3Df%26x%3D992%26y%3D672&imgrefurl=https%3A%2F%2Fwww.msn.com%2Fen-us%2Flifestyle%2Fpets-animals%2F49-adorable-puppy-pictures-that-will-make-you-melt%2Fss-AACSrEY&tbnid=Ad7wBCCmAXPRDM&vet=12ahUKEwig1NfB0Y7oAhXGHc0KHSzuCMUQMygeegQIARBw..i&docid=jawDJ74qdYREJM&w=750&h=500&q=puppies&ved=2ahUKEwig1NfB0Y7oAhXGHc0KHSzuCMUQMygeegQIARBw

下面是相关代码的摘录,很简单:

   const browser = await puppeteer.launch({
       headless: false,
       devtools: true,
       slowMo: 150
    });
   await browser.userAgent(
      "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36"
   );
   /* Get the first page rather than creating a new one unnecessarily. */
   let page = (await browser.pages())[0];
   await page.setViewport({
      width: 1524,
      height: 768
   });
   try {
await page.goto("https://www.google.com/imgres?imgurl=https%3A%2F%2Fimg-s-msn-com.akamaized.net%2Ftenant%2Famp%2Fentityid%2FAACPW4S.img%3Fh%3D552%26w%3D750%26m%3D6%26q%3D60%26u%3Dt%26o%3Df%26l%3Df%26x%3D992%26y%3D672&imgrefurl=https%3A%2F%2Fwww.msn.com%2Fen-us%2Flifestyle%2Fpets-animals%2F49-adorable-puppy-pictures-that-will-make-you-melt%2Fss-AACSrEY&tbnid=Ad7wBCCmAXPRDM&vet=12ahUKEwig1NfB0Y7oAhXGHc0KHSzuCMUQMygeegQIARBw..i&docid=jawDJ74qdYREJM&w=750&h=500&q=puppies&ved=2ahUKEwig1NfB0Y7oAhXGHc0KHSzuCMUQMygeegQIARBw", {
            timeout: 0,
//            waitUntil: ["load"]
//            waitUntil: ["networkidle2"]
});
     await page.waitForSelector('#irc_shc', {
        visible: true,
        timeout: 0
     });
   } catch(e) {
      console.log("error: e = ", e);
   }

【问题讨论】:

  • 您是否在两个环境中运行相同版本的节点和 puppeteer?同时显示您正在使用的代码。
  • 我是。我将尝试提取代码并将其添加到问题中。
  • 他们可能会阻止数据中心的 IP,这是最明显的原因。
  • @pguardiario 似乎必须发生这样的事情。但这在任何地方都有记录吗?我想我可以检查 devtools 中的网络选项卡是否有任何可疑之处。谢谢。 (顺便说一下,我对 EC2 没有太多经验。)
  • 我不确定你打开的链接是什么,但里面的所有内容都有display: none。尝试删除visible: true

标签: node.js amazon-ec2 puppeteer


【解决方案1】:

事实证明,这只是一个临时的谷歌页面错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 2021-01-06
    • 1970-01-01
    • 2013-10-15
    相关资源
    最近更新 更多