详解Selenium-webdriver绕开反爬虫机制的4种方法


Posted in Python onOctober 28, 2020

之前爬美团外卖后台的时候出现的问题,各种方式拖动验证码都无法成功,包括直接控制拉动,模拟人工轨迹的随机拖动都失败了,最后发现只要用chrome driver打开页面,哪怕手动登录也不可以,猜测driver肯定是直接被识别出来了。一开始尝试了改user agent等方式,仍然不行,由于其他项目就搁置了。今天爬淘宝生意参谋又出现这个问题,经百度才知道原来chrome driver的变量有一个特征码,网站可以直接根据特征码判断,经百度发现有4种方法可以解决,记录一下自己做的尝试。

1、mitproxy拦截请求 √

本质上就是在响应中利用mitproxy将包含的webdriver的JS中的关键字替换成其他的字符
1.给本机设置代理ip 127.0.0.1端口8001(为了让所有流量走mitmproxy)具体方法请百度。
2.启动mitmproxy。

windows:

mitmdump -p 8001

3.打开chrome的开发者工具,查各个.js文件,是否存在driver字样,最终找到需要的.js文件。

4.干扰脚本

def response(flow): 
  if '/js/yoda.' in flow.request.url:
  for webdriver_key in ['webdriver', '__driver_evaluate', '__webdriver_evaluate', '__selenium_evaluate', '__fxdriver_evaluate', '__driver_unwrapped', '__webdriver_unwrapped', '__selenium_unwrapped', '__fxdriver_unwrapped', '_Selenium_IDE_Recorder', '_selenium', 'calledSelenium', '_WEBDRIVER_ELEM_CACHE', 'ChromeDriverw', 'driver-evaluate', 'webdriver-evaluate', 'selenium-evaluate', 'webdriverCommand', 'webdriver-evaluate-response', '__webdriverFunc', '__webdriver_script_fn', '__$webdriverAsyncExecutor', '__lastWatirAlert', '__lastWatirConfirm', '__lastWatirPrompt', '$chrome_asyncScriptInfo', '$cdc_asdjflasutopfhvcZLmcfl_' ]:
   ctx.log.info('Remove "{}" from {}.'.format(
   webdriver_key, flow.request.url
   )) 
  flow.response.text = flow.response.text.replace('"{}"'.format(webdriver_key), '"NO-SUCH-ATTR"') 
 flow.response.text = flow.response.text.replace('t.webdriver', 'false')
 flow.response.text = flow.response.text.replace('ChromeDriver', '')

5.退出刚才的mitmproxy状态,重新用命令行启动mitmproxy干扰脚本 监听8001端口的请求与响应。

mitmdump -s DriverPass.py -p 8001

2、修改源码 ×

修改js/call_function.js,129行。

var doc = opt_doc || document;
 var key = '$cdc_asdjflasutopfhvcZLmcfl_';
 if (!(key in doc))
 doc[key] = new Cache();
 return doc[key];
}

?>修改后

function getPageCache(opt_doc) {
 var doc = opt_doc || document;
 var key = ‘$bobo_zhangyx_';
if (!(key in doc))
 doc[key] = new Cache();
 return doc[key];
 }

经测试似乎已失效,可能由于版本迭代问题。

3、手动打开跑程序√

cmd 运行命令

chrome.exe --remote-debugging-port=9222

打开一个浏览器,然后py代码里

chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")

4、换V63之前的chrome与driver

(似乎也是个好方法但是没有尝试)

到此这篇关于详解Selenium-webdriver绕开反爬虫机制的4种方法的文章就介绍到这了,更多相关Selenium webdriver 反爬虫内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python re模块介绍
Nov 30 Python
Python使用multiprocessing创建进程的方法
Jun 04 Python
Python程序运行原理图文解析
Feb 10 Python
Python3连接SQLServer、Oracle、MySql的方法
Jun 28 Python
Python中的 enum 模块源码详析
Jan 09 Python
Flask框架钩子函数功能与用法分析
Aug 02 Python
大家都说好用的Python命令行库click的使用
Nov 07 Python
关于ZeroMQ 三种模式python3实现方式
Dec 23 Python
python实现逆滤波与维纳滤波示例
Feb 26 Python
pycharm部署、配置anaconda环境的教程
Mar 24 Python
UI自动化定位常用实现方法代码示例
Oct 27 Python
Python常用GUI框架原理解析汇总
Dec 07 Python
详解Python流程控制语句
Oct 28 #Python
详解selenium + chromedriver 被反爬的解决方法
Oct 28 #Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
Nov 25 #Python
Python字典实现伪切片功能
Oct 28 #Python
python使用selenium爬虫知乎的方法示例
Oct 28 #Python
怎么解决pycharm license Acti的方法
Oct 28 #Python
python如何快速拼接字符串
Oct 28 #Python
You might like
PHP使用者状态管理功能的应用
2006/10/09 PHP
php发送邮件的问题详解
2015/06/22 PHP
php中的异常和错误浅析
2017/05/03 PHP
PHP二维关联数组的遍历方式(实例讲解)
2017/10/18 PHP
PHP正则匹配到2个字符串之间的内容方法
2018/12/24 PHP
thinkPHP+LayUI 流加载实现功能
2019/09/27 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
JavaScript中的私有成员
2006/09/18 Javascript
[原创]提供复制本站内容时出现,该文章转自脚本之家等字样的js代码
2007/03/27 Javascript
Js callBack 返回前一页的js方法
2008/11/30 Javascript
JS遮罩层效果 兼容ie firefox jQuery遮罩层
2010/07/26 Javascript
jQuery设置div一直在页面顶部显示的方法
2013/10/24 Javascript
用JavaScript实现类似于ListBox功能示例代码
2014/03/09 Javascript
JS动态增加删除UL节点LI及相关内容示例
2014/05/21 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
Javascript前端UI框架Kit使用指南之kitjs事件管理
2014/11/28 Javascript
javascript将DOM节点添加到文档的方法实例分析
2015/08/04 Javascript
AngularJS 基础ng-class-even指令用法
2016/08/01 Javascript
Vuejs第七篇之Vuejs过渡动画案例全面解析
2016/09/05 Javascript
数组Array的一些方法(总结)
2017/02/17 Javascript
vue中v-text / v-html使用实例代码详解
2019/04/02 Javascript
微信公众号获取用户地理位置并列出附近的门店的示例代码
2019/07/25 Javascript
electron-vue开发环境内存泄漏问题汇总
2019/10/10 Javascript
python3生成随机数实例
2014/10/20 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
2017/08/05 Python
python处理Excel xlrd的简单使用
2017/09/12 Python
简单瞅瞅Python vars()内置函数的实现
2019/09/27 Python
python模块hashlib(加密服务)知识点讲解
2019/11/25 Python
python GUI库图形界面开发之PyQt5信号与槽事件处理机制详细介绍与实例解析
2020/03/08 Python
python实现程序重启和系统重启方式
2020/04/16 Python
会计系毕业个人自荐信格式
2013/09/23 职场文书
计算机专业毕业生推荐信
2013/11/25 职场文书
《手指教学》反思
2014/02/14 职场文书
python基础之模块的导入
2021/10/24 Python
Python实现制作销售数据可视化看板详解
2021/11/27 Python
Windows Server 2008 修改远程登录端口以及配置防火墙
2022/04/28 Servers