详解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黑魔法之编码转换
Jan 25 Python
简单谈谈python中的多进程
Nov 06 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
Nov 22 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
Feb 13 Python
python绘制评估优化算法性能的测试函数
Jun 25 Python
Python音频操作工具PyAudio上手教程详解
Jun 26 Python
Python爬取智联招聘数据分析师岗位相关信息的方法
Aug 13 Python
tensorboard显示空白的解决
Feb 15 Python
用Python制作音乐海报
Jan 26 Python
Python机器学习工具scikit-learn的使用笔记
Jan 28 Python
Python Flask请求扩展与中间件相关知识总结
Jun 11 Python
关于python中模块和重载的问题
Nov 02 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中socket的用法详解
2014/10/24 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
2016/03/21 PHP
php array_keys 返回数组的键名
2016/10/25 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
2017/04/07 PHP
jquery.boxy插件的iframe扩展代码
2010/07/02 Javascript
给jQuery方法添加回调函数一款插件的应用
2013/01/21 Javascript
鼠标焦点离开文本框时验证的js代码
2013/07/19 Javascript
Jquery取得iframe下内容的方法
2013/11/18 Javascript
完美解决IE低版本不支持call与apply的问题
2013/12/05 Javascript
JavaScript随机生成信用卡卡号的方法
2015/04/07 Javascript
js实现滚动条滚动到某个位置便自动定位某个tr
2021/01/20 Javascript
Javascript实现的SHA-256加密算法完整实例
2016/02/02 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
2016/10/01 Javascript
jquery 抽奖小程序实现代码
2016/10/12 Javascript
nodejs中express入门和基础知识点学习
2018/09/13 NodeJs
在vue中实现某一些路由页面隐藏导航栏的功能操作
2020/09/21 Javascript
[01:03:37]Secret vs VGJ.S Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python端口扫描系统实现方法
2014/11/19 Python
python求解水仙花数的方法
2015/05/11 Python
Python3.4学习笔记之 idle 清屏扩展插件用法分析
2019/03/01 Python
Python面向对象总结及类与正则表达式详解
2019/04/18 Python
20行python代码的入门级小游戏的详解
2019/05/05 Python
Python math库 ln(x)运算的实现及原理
2019/07/17 Python
Python利用requests模块下载图片实例代码
2019/08/12 Python
Matplotlib scatter绘制散点图的方法实现
2020/01/02 Python
python 动态绘制爱心的示例
2020/09/27 Python
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
法国二手MacBook销售网站:Okamac
2019/03/18 全球购物
Claire’s法国:时尚配饰、美容、珠宝、头发
2021/01/16 全球购物
JS原生实现轮播图的几种方法
2021/03/23 Javascript
企业晚会策划方案
2014/05/29 职场文书
学生会辞职信
2015/03/02 职场文书
工程部岗位职责范本
2015/04/11 职场文书
关爱留守儿童捐款倡议书
2015/04/27 职场文书
高三英语教学反思
2016/03/03 职场文书
python中filter,map,reduce的作用
2022/06/10 Python