| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> python+undetected_chromedriver+chrome绕过五秒盾(cloudflare) -> 正文阅读 |
|
[Python知识库]python+undetected_chromedriver+chrome绕过五秒盾(cloudflare) |
公司是做外贸的,所以需要爬取一些外国网站的商品竞品数据,但是在爬取某个网站的时候,遇到了五秒盾的阻拦。 说实话,一开始自己并不了解五秒盾,毕竟在之前爬国内网站的时候,并没有遇到过这种防护措施,但是在爬取这个外国邮件网站的时候,返回的文本中,总是有如下的信息: ? ?一直让 “Just a moment...”,一开始自己以为是加载缓慢,但是每次都有,这就不得不引起警觉。 在vscode中显示了一下html代码,并在浏览器上看了一下界面,发现是这样的 ?这个.? ?"DDoS protection by Cloudflare" 是个啥子鬼? 但是看到DDoS?protection by这种字样,感觉应该是防止DDoS攻击的,但是这个“Cloudflare”又是个啥? 在网上查询了一下,原来是所谓“五秒盾”的东东,而且网上有针对这小盾盾现成的python模块,也就是cloudscraper模块,使用requests和scrapy都可以. 网上针对requests使用cloudscraper的比较多,但是本人使用scrapy,所以参考AroayCloudScraper(https://githubmemory.com/repo/hwpchn/AroayCloudScraper)模块重新修改了一下,进行爬取的时候,毫不费力的就饶过了对方设置五秒盾的网站,简直不要太过完美! 事情原本到这步已经告一段落,毕竟其他的事情就是用scrapy的xpath获取数据就可以了,但是........ 两周后,当领导要求再次爬取得这个网站的时候,我发现,原来的代码竟然不管用了! 原因是代码返回了这个错误: ?what? 要钱了?! 本着能白嫖绝不付费的原则,我找了一下该模块的git,但是上面显示并没有付费内容,而且提示了貌似一年才更新一次..... 但是这个模块还能否继续使用呢?我决定在google先查为妙,查询结果中,有一个是在scrapy中设置:?????????'COOKIES_ENABLED': True,?即可使用,但是我试了一下,并没有神马卵用...... 事到如今,看来这种方法应该是行不通了,还有其他办法,当然有! 首先想到的就是用selenium+chrome模拟浏览器去将数据采集下来,这种方法虽然有些繁琐,且一直为高级爬虫工程师所不齿,但是我大中华某位伟人曾经说过:“不管黑猫白猫,只要抓住耗子的就是好cat”。 说干就干! 立马在电脑上开始安装selenium,chromedriver,至于chrome,因为公司配的都是苹果电脑(不要问为啥,就是这么豪横!),但是我的是M1芯片的,所以要使用ARM架构的chrome。 安装步骤,以及对应版本的chromedriver就不展示了,总之万事皆备,只欠代码了! 忙不迭的将原来写过测试某宝的代码贴上测试一波,其中覆盖window.navitor.webdirver的值都已经妥妥的安排明白了,但是,竟然不行! 打开的浏览器界面,依然停留在五秒盾,我与对面的数据依旧还有一盾之隔! 怎么办?!怎么办?!领导限定的日期已经到了,再不出数据,就要被用键盘打死了😭 😭 😭 但是越是到这个时候,越不能慌张,毕竟写bug咱在行,找解决方法尤甚啊! 于是乎,我开启了疯狂搜索模式,功夫不负有心人,众里寻她千百度,方法就在隔壁拐角处! 我找到了一个webdirver的驱动模块,但是并不是selenium,而是undetected_chromedriver(GitHub - ultrafunkamsterdam/undetected-chromedriver: Custom Selenium Chromedriver | Zero-Config | Passes ALL bot mitigation systems (like Distil / Imperva/ Datadadome / CloudFlare IUAM)) 这个模块可以完美的模拟chrome浏览器,并且不用设置js默认值,也就是无需自己再添加瞒天过海的设置,只要简单的几行代码就可以。 测试了一下,报错,说是我chrome的版本不匹配,而且undetected_chromedriver只支持chrome96及以上的版本!但是我的mac下载的就是最新的ARM架构的chrome,最多就是95。 为山九仞,可不能功亏一篑,我急忙查看该模块的git说明,幸好,有解释: ?也就是说该模块支持自定义chrome版本! 可以可以,这个结果很让我满意,忙不迭的测试一波,原本的数据页面在等待了五秒验证之后,真的出现了!果然很好很强大! ?但是在之前代码中,我使用递归函数的方式,但是需要每翻一页就要打开安装一次chrome,本着提(能)高(懒)效(即)率(懒)的方式,修改了下代码,换成了循环遍历的方式: ?好了,本次使用python+undetected_chromedriver+chrome绕过五秒盾的方法分享就到这,下次再见!😜 😜 😜 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 0:21:12- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |