【发布时间】: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。
里德
下面是相关代码的摘录,很简单:
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