找回密码
 会员注册
查看: 26|回复: 0

Python反反爬篇--selenium被检测到的解决办法

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
72326
发表于 2024-9-6 22:52:12 | 显示全部楼层 |阅读模式
1.反爬有时候,我们利用Selenium自动化爬取某些网站时,极有可能会遭遇反爬。实际上,我们使用默认的方式初始化WebDriver打开一个网站,下面这段JS代码永远为true,而手动打开目标网站的话,则为:undefined#通过这段JS脚本区分是爬虫还是人工操作window.navigator.webdriver123稍微有一点反爬经验的工程师利用上面的差别,很容易判断访问对象是否为一个爬虫,然后对其做反爬处理,返回一堆脏数据或各种验证码。如果要实现后面的自动化操作,首先要解决的就是这个反爬的问题。常见的反反爬方案包含:设置参数excludeSwitches、mitmproxy拦截过滤、cdp命令,下面分别来说说。2.设置参数excludeSwitchesChrome79之前可以通过配置ChromeOptions驱动参数,来达到反反爬的目的。只需要将参数打开,设置excludeSwitches值为enable-automation即可。fromselenium.webdriverimportChromefromselenium.webdriverimportChromeOptionsoption=ChromeOptions()#打开参数option.add_experimental_option('excludeSwitches',['enable-automation'])driver=Chrome(options=option)driver.implicitly_wait(10)driver.get("http://www.google.com")12345678910这个参数是实验性参数,所以右上角会提示:请停用开发者模式运行的扩展程序,不能点击停用。这样,设置这个参数后:window.navigator.webdriver的值就变成undefined了。3.mitproxy拦截众所周知,mitproxy可以拦截到网络请求,做其他处理,这里只需要进行JS代码注入即可。#待执行的JS代码,修改window.navigator.webdriver的值js_exec='Object.defineProperties(navigator,{webdriver:{get)=>false}});'#重写response,截获网络请求,js注入defresponse(slef,flow:mitmproxy.http.HTTPFlow):if'google'inflow.request.url:flow.response.text=js_exec+flow.response.text12345678然后启动mitmdump#启动mitmproxymitmdump-p8888-s111.py123最后,配置ChromeOptions指向mitmdump代码即可。#配置ChromeOptionsoption.add_argument("--proxy-server=http://127.0.0.1:8888")1234.cdp命令(经验证可以)cdp全称是:ChromeDevtools-Protocol通过addScriptToEvaluateOnNewDocument()方法可以在页面还未加载之前,运行一段脚本。如此,我们只需要提前设置:window.navigator.webdriver的值为undefined即可。fromselenium.webdriverimportChromefromselenium.webdriverimportChromeOptionsoption=ChromeOptions()#打开参数#option.add_argument("--proxy-server=http://127.0.0.1:8888")#driver=Chrome(options=option)driver=Chrome()driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",{"source":"""Object.defineProperty(navigator,'webdriver',{get)=>undefined})"""})driver.implicitly_wait(10)driver.get("http://www.google.com")1234567891011121314151617181920215.其他通过上面的3种方法可以很好的解决Selenium自动化被反爬的问题。感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。一、Python所有方向的学习路线Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。二、Python必备开发工具工具都帮大家整理好了,安装就可直接上手!三、最新Python学习笔记当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。四、Python视频合集观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。五、实战案例纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。六、面试宝典简历模板若有侵权,请联系删除
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-11 11:38 , Processed in 0.696751 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表