详解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 对象中的数据类型
May 13 Python
python之Character string(实例讲解)
Sep 25 Python
Python 实现使用dict 创建二维数据、DataFrame
Apr 13 Python
Python写一个基于MD5的文件监听程序
Mar 11 Python
Django MEDIA的配置及用法详解
Jul 25 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
Sep 20 Python
Pytorch提取模型特征向量保存至csv的例子
Jan 03 Python
基于python 等频分箱qcut问题的解决
Mar 03 Python
在django中form的label和verbose name的区别说明
May 20 Python
python为什么会环境变量设置不成功
Jun 23 Python
浅析Python中字符串的intern机制
Oct 03 Python
Python OpenCV 图像平移的实现示例
Jun 04 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/11/28 PHP
浅谈php中mysql与mysqli的区别分析
2013/06/10 PHP
PHP实现基于3DES算法加密解密字符串示例
2018/08/24 PHP
JSDoc 介绍使用规范JsDoc的使用介绍
2011/02/12 Javascript
IE6/7/8中Option元素未设value时Select将获取空字符串
2011/04/07 Javascript
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
2013/06/25 Javascript
JavaScript中Math对象方法使用概述
2014/01/02 Javascript
懒加载实现的分页&&网站footer自适应
2016/12/21 Javascript
Bootstrap table简单使用总结
2017/02/15 Javascript
微信JS-SDK选取手机照片上传功能
2017/04/21 Javascript
javascript 中select框触发事件过程的分析
2017/08/01 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
2017/11/01 Javascript
JavaScript中click和onclick本质区别与用法分析
2018/06/07 Javascript
JavaScript实现的拼图算法分析
2019/02/13 Javascript
vue实现路由切换改变title功能
2019/05/28 Javascript
[02:54]DOTA2亚洲邀请赛 VG战队出场宣传片
2015/02/07 DOTA
[07:09]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant 选手采访
2021/03/11 DOTA
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
2017/12/20 Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
2019/07/31 Python
python实现输出一个序列的所有子序列示例
2019/11/18 Python
PyTorch中model.zero_grad()和optimizer.zero_grad()用法
2020/06/24 Python
python三引号如何输入
2020/07/06 Python
Hunkemöller瑞士网上商店:欧洲最大的内衣品牌之一
2018/12/03 全球购物
施华洛世奇巴西官网:SWAROVSKI巴西
2019/12/03 全球购物
平面设计岗位职责
2013/12/14 职场文书
1亿有多大教学反思
2014/05/01 职场文书
支部鉴定材料
2014/06/02 职场文书
三月雷锋月活动总结
2014/07/03 职场文书
实习生工作证明范本
2014/09/14 职场文书
幼儿园教师岗位职责
2015/04/02 职场文书
车间质检员岗位职责
2015/04/08 职场文书
惊涛骇浪观后感
2015/06/05 职场文书
五年级语文教学反思
2016/03/03 职场文书
Golang 获取文件md5校验的方法以及效率对比
2021/05/08 Golang
《吸血鬼幸存者》新内容发布 追加多个全新模式
2022/04/07 其他游戏
springboot读取resources下文件的方式详解
2022/06/21 Java/Android