问题描述
说我想从搜索“ hi google”(只是示例)中抓取结果。我正在使用带有Node.js的Puppeteer进行抓取。我使用以下代码:
const puppeteer = require('puppeteer');
scrape = async function () {
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
await page.goto("https://www.google.com/search?q=hi+google&rlz=1C1CHBF_enUS879US879&oq=hi+google&aqs=chrome..69i57j0l3j46j69i60l3.1667j0j7&sourceid=chrome&ie=UTF-8",{ waitUntil: "networkidle2" });
await page.setViewport({ width: 1366,height: 663 });
await page.waitForSelector('.xpd');
let data = await page.evaluate(() => {
return document.querySelectorAll('.xpd')[16];
});
await browser.close();
return data;
}
scrape()
.then(function(result) {
console.log(result);
})
浏览器启动后,将立即转到reCAPTCHA页面: 有什么办法可以解决这个问题?我已经在网上进行了一些研究,但是这些结果要么是1.非常理论化的,我不知道如何在我的代码中实现这些,要么是2. Python解决方案,我不确定这些解决方案中的某些将如何使用木偶。我遇到的最有帮助的结果是随机安排抓取时间以使请求看起来像人的一样,但是正如您看到的那样,即使仅检索一个数据元素也无法正常工作,并且它立即将您带到reCAPTCHA页面。
谢谢。
解决方法
这取决于很多因素。
首先,您需要使用puppteer-extra-stealth
(https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth)。
此库修补了检测木偶的最常用方法。
第二,您还想模拟逼真的鼠标移动。我发现ghost-cursor
库对此非常有效(https://github.com/Xetera/ghost-cursor)。
但是,仅此一项是行不通的。您还需要利用非垃圾邮件住宅代理或理想的4g代理。
4g代理根据位置在一个池化系统中工作并轮换并在该区域的该网络上的所有移动数据用户之间共享。
我建议使用https://rsocks.net英国或美国的代理-或理想情况下在本地构建自己的4g代理,以免出现饱和。
您仍然会遇到一些Captcha,因此也有必要实现2captcha之类的解决方案。
要进一步提高成功率,您将要使用具有历史记录和合法或“农场”活动的Google帐户Cookie。
附加到帐户的Cookie用于正常浏览的次数越多,会话对您的信任就越高。