Firebase 云功能 - Pupeteer 在云中找不到元素,但可以在模拟器中工作

问题描述 投票:0回答:1

我正在尝试使用木偶操纵者从网页上抓取一些数据。我创建了整个脚本并在模拟器中运行它,在模拟器本地一切正常。当我将相同的东西部署到云并运行它时,puppeteer 找不到元素并结束执行。

我的代码:

console.log('Scraping LINKS');
const browser = await getBrowser();
const page = await preparePage(browser, `URL`);
console.log('Page opened');
const handle = await page.$('.sloupec_s_inzeratama');
console.log('Finding handle');
if (!handle) {
    console.log('Can not find "sloupec_s_inzeratama"');
}
if (handle) { 
    // Do something else
}

从控制台记录为屏幕截图:

我尝试过但没有帮助:

  • 注释掉所有木偶操作者的启动参数

  • 将加载策略从“domcontentloaded”更改为“load”或“networkidle2”

    等待页面.goto(url, { 等待:'domcontentloaded', });

  • 在尝试查找选择器之前使用了waitForSelector。 (刚刚超时)

显然,模拟器中发生的情况与云函数中发生的情况存在一些差异。但我无法说出有什么区别以及我应该如何调试它。所以非常欢迎任何建议。

firebase web-scraping google-cloud-functions web-crawler puppeteer
1个回答
0
投票

经过一段时间的调试后,我将

page.content()
添加到控制台日志中,以验证数据与本地主机上的数据相同。我发现 Recaptcha V3 将我的服务器检测为 BOT,并禁止其继续。不过,我的模拟器仍然可以正常工作。

我总是尝试慢慢抓取而不伤害某人的服务器,但这仍然意味着你的木偶操作者可以被检测到,以防有人遇到同样的问题,验证你的机器人只是没有被检测到:)

© www.soinside.com 2019 - 2024. All rights reserved.