如何利用puppeteer爬取带反爬的网站(puppeteer 爬虫)

网友投稿 769 2022-09-11


如何利用puppeteer爬取带反爬的网站(puppeteer 爬虫)

本文源于一位读者同学的提问,下图:

看到这位同学如此好学,博主就也研究了一下,发现确实当使用puppeteer爬取上述政府网的时候会卡住,看下方视频演示:

可以看到在打开页面之后就报错了。

后来查找了很多资料终于找到一条可用的方法:

增加参数:--disable-blink-features=AutomationControlled,

作用是:禁用启用Blink运行时的功能

const puppeteer = require('puppeteer');(async () => {const browser = await puppeteer.launch({ headless: false, args: ['--no-sandbox','--disable-setuid-sandbox','--disable-blink-features=AutomationControlled', ], dumpio: false, });const page = await browser.newPage();await page.evaluate('() =>{Object.defineProperties(navigator,{webdriver:{get: () => false}})}' );await page.goto('{ waitUntil: 'networkidle0', });await page.waitForSelector('.intabr.fr', { visible: true, timeout: 3000, });const yqInfoList = await page.evaluate(() => {const elements = Array.from(document.querySelectorAll('.intabr.fr .yqdt .inLists li') );return elements.map((s) => {let a = s.getElementsByTagName('a').item(0);let txt = a.innerHTML;let url = a.getAttribute('href');return { title: txt, url: '+ url }; }); });console.log(yqInfoList);await browser.close();})();

然后我们再次使用脚本来爬取信息可以顺利得到结果了

此时如果审查元素会发现,navigator中webdriver属性没了。

webdriver可以说是Puppeteer最明显的一个特征,检测也非常简单,获取navigator.webdriver这一属性,在默认启动的Puppeteer中,它的值为true,而在正常浏览器中,navigator里是没有这一属性的,是undefined。

所以我们通过把webdriver的返回置为false就可以使检测失效了,从而获取到想要的信息。

await page.evaluate( '() =>{Object.defineProperties(navigator,{webdriver:{get: () => false}})}' );

当然也存在许多其它的检测方法,有兴趣的同学可以自行查阅。欢迎交流????。

使用puppeteer实现产品经理咖啡自动签到

puppeteer抓取开源中国上的推荐软件数据

puppeteer实现百度贴吧自动签到


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:超赞!华为工程师都爱不释手的两份图解网络,助你圆满大厂梦(华为 工程)
下一篇:Hadoop中的压缩与解压缩案例详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~