今天来分享我在开发自动化点击程序过程中遇到的一个问题:如何绕过Cloudflare的Bot识别?
相信如果你做过自动化程序点击、网页数据抓取,也会跟我有一样的问题和感受。
当我们打开某些网页的时候,是否经常会遇到这样的人机验证页面
像这样:
https://www.perplexity.ai
这样:
https://gitlab.com/users/sign_in
还有这样:
https://www.autohotkey.com
正常情况下,我们只需要勾选☑️ Verify you are human 就可以通过了。
这里我只是拿这些网站举个例子,这样的网站还有很多,但是他们都有一个共同的问题。
那就是这些网站前端的前面都接入了一层Cloudflare来做防护
现代化的网站大部分都会在它们前面接入一层Cloudflare的服务,Cloudflare就可以帮助网站来实现机器人识别、模拟点击识别、反爬虫等自动化操作,所以如果你用Playwright、 Selenium 等自动化框架来开发自动化模拟点击的时候,就会遇到这个噩梦。
我曾经尝试过多种办法,来尝试绕过Cloudflare,直接进入网站的主页,在网上搜索了大量的教程和资料,包括热度不错的Github开源项目和有名的自动化点击框架。
比如:
Cloudscrapy(https://github.com/VeNoMouS/cloudscraper)
SeleniumBase(https://github.com/seleniumbase/SeleniumBase)
Nodriver(https://github.com/ultrafunkamsterdam/nodriver)
诸如此类的框架和项目基本上都尝试过一遍:
https://scrapfly.io/blog/posts/how-to-bypass-cloudflare-anti-scraping
但是都没有解决的我的问题。
直到我找到了一种解决方案,也许你会以为我用了一种特别高级的技术来解决了这个问题,其实不是,而只是利用了一个服务,通过这个调用这个服务来解决了我问题。
就是BrightData(https://brightdata.com/)
所以接下来我们可以BrightData的服务直接来尝试下用它来绕过Cloudflare的效果,我们可以注册一个账号。
注册完账号,来到主页,可以看到它有很多款产品,提供了多种网络访问和数据抓取服务的产品,
而我们这次使用的是Browser API这款产品 ,它可以启动一款BrightData内置的远程浏览器,来帮我们绕过Cloudflare。
点击Browser API,可以看到它描述,可以简化动态抓取操作,在完全托管的浏览器上运行和扩展 Puppeteer、Selenium 和 Playwright 脚本,并内置 CAPTCHA 验证码自动代理管理功能
是的, 这正是我们要的功能。
然后点击Start free trial,进入到后台界面。
我们可以看到官方赠送了一些免费的credits给我们测试,有7天的有效期。
然后点击左边侧边栏,在弹出的栏目中点击Create an API。
选择Browser API
然后继续下一步,这边默认会勾选CAPTCHA Solver ,其他可以不用管。
然后点击Add API。
创建好API后,界面上就出现了访问地址的信息,
对于利用Puppeteer或者Playwright框架的,可以用websocket协议连接远程浏览器
而对于用Selenium框架的,可以用http协议连接远程浏览器。 然后我们进入打开playground体验它的功能,
这里主要分为Playground和API Exampels两个Tab项,Playground主要是两个现成的场景,体验自动化的过程。
而API Examples提供了5种基本的场景代码,可以供我们直接复用。
我们可以先体验下Playground的场景,主要是旅行网站和电商网站两种模式,可以然后点击右边的Run Request就可以运行直观的效果功能。
接下来我们使用API Examples中的Captcha Handling功能,这个就是解决验证的问题,可以绕过Cloudflare。
然后我们可以复制这个代码,到自己的编程环境中,我这里用的python+Playwright,可以在右上角这里选择,
然后复制代码到自己的编程工具中,
因为这里调用的brightdata的远程浏览器,所以本地是看不到浏览器界面实际的效果的,所以为了验证确实绕过了Cloudflare的验证,我在代码中添加了2张截图,分别是解决验证码前后的两张截图对比,这样就能判断是否真的做到了绕过Cloudflare的效果。
然后我对最初测试的3个网站进行了分别测试, 我在命令行启动python程序,
先来测试https://gitlab.com/users/sign_in
可以看到程序在验证前后分别进行了截图,当收到solve_finished的结果时,代表已经绕过Cloudflare成功了
然后我们再来看截图,可以看到绕过前后的截图的状态是不同的
然后来测试https://www.perplexity.ai/,我惊奇的发现,运行过程中命令行中提示:
No captcha detected (may have bypassed already)
而且验证前后的两张截图居然是一样的,
验证前:
验证后:
说明利用brightdata的服务居然直接跳过了cloudflare的验证,有趣。
最后来测试https://www.autohotkey.com/ , 验证前后的截图是不同的,跟测试gitlab的效果是一样的。
绕过前:
绕过后:
OK! 所以到这里,我们已经利用BrightData的服务成功绕过了上面的3个网站中的Cloudflare服务。如果你也好奇这个过程和结果,可以跟我一样来尝试一下。
声明:来自程序员阿灏,仅代表创作者观点。链接:http://eyangzhen.com/4836.html