详解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实现进程间通信简单实例
Jul 23 Python
开源软件包和环境管理系统Anaconda的安装使用
Sep 04 Python
pandas创建新Dataframe并添加多行的实例
Apr 08 Python
Python3.6简单反射操作示例
Jun 14 Python
python3实现域名查询和whois查询功能
Jun 21 Python
python函数map()和partial()的知识点总结
May 26 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
Jun 08 Python
Python工程师必考的6个经典面试题
Jun 28 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
Sep 03 Python
python实现定时发送邮件
Dec 23 Python
python获取带有返回值的多线程
May 02 Python
Python软件包安装的三种常见方法
Jul 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
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
2006/07/09 PHP
通过php快速统计某个数据库中每张表的数据量
2012/09/04 PHP
使用Linux五年积累的一些经验技巧
2013/06/20 PHP
邮箱正则表达式实现代码(针对php)
2013/06/21 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
2013/06/29 PHP
Parse正式发布开源PHP SDK
2014/08/11 PHP
Yii全局函数用法示例
2017/01/22 PHP
javascript实现tabs选项卡切换效果(自写原生js)
2013/03/19 Javascript
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
2013/06/19 Javascript
批量实现面向对象的实例代码
2013/07/01 Javascript
js中数组排序sort方法的原理分析
2014/11/20 Javascript
JavaScript的原型继承详解
2015/02/15 Javascript
jquery判断当前浏览器的实现代码
2015/11/07 Javascript
JSONP原理及简单实现
2016/06/08 Javascript
Jquery树插件zTree实现菜单树
2017/01/24 Javascript
js实现鼠标左右移动,图片也跟着移动效果
2017/01/25 Javascript
vuejs绑定class和style样式
2017/04/11 Javascript
简单实现JS上传图片预览功能
2017/04/14 Javascript
Node.js net模块功能及事件监听用法分析
2019/01/05 Javascript
小程序扫描普通链接二维码跳转小程序指定界面方法
2019/05/07 Javascript
tsconfig.json配置详解
2019/05/17 Javascript
详解vue之自行实现派发与广播(dispatch与broadcast)
2021/01/19 Vue.js
python3 cvs将数据读取为字典的方法
2018/12/22 Python
解决PySide+Python子线程更新UI线程的问题
2019/01/11 Python
python实现微信定时每天和女友发送消息
2019/04/29 Python
Python入门Anaconda和Pycharm的安装和配置详解
2019/07/16 Python
windows下Pycharm安装opencv的多种方法
2020/03/05 Python
漫威玩具服装及周边商品官方购物网站:Marvel Shop
2019/05/11 全球购物
奥巴马竞选演讲稿
2014/05/15 职场文书
电视节目策划方案
2014/05/16 职场文书
2014国庆65周年领导讲话稿(3篇)
2014/09/21 职场文书
2015元旦晚会主持词(开场白+结束语)
2014/12/14 职场文书
给学校的建议书400字
2015/09/14 职场文书
2016中秋节晚会开场白
2015/11/26 职场文书
Python Django ORM连表正反操作技巧
2021/06/13 Python
搭建zabbix监控以及邮件报警的超级详细教学
2022/07/15 Servers