详解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实现的下载8000首儿歌的代码分享
Nov 21 Python
Python实现购物系统(示例讲解)
Sep 13 Python
python互斥锁、加锁、同步机制、异步通信知识总结
Feb 11 Python
python用fsolve、leastsq对非线性方程组求解
Dec 15 Python
Python爬虫文件下载图文教程
Dec 23 Python
Djang的model创建的字段和参数详解
Jul 27 Python
python 表格打印代码实例解析
Oct 12 Python
python求绝对值的三种方法小结
Dec 04 Python
python3 求约数的实例
Dec 05 Python
OpenCV图像变换之傅里叶变换的一些应用
Jul 26 Python
Python+Selenium实现读取网易邮箱验证码
Mar 13 Python
Python os和os.path模块详情
Apr 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学习笔记 面向对象中[接口]与[多态性]的应用
2011/06/16 PHP
PHP6新特性分析
2016/03/03 PHP
PHP如何获取当前主机、域名、网址、路径、端口等参数
2017/06/09 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
javascript div 弹出可拖动窗口
2009/02/26 Javascript
基于jQuery的星级评分插件
2011/08/12 Javascript
如何利用JS通过身份证号获取当事人的生日、年龄、性别
2016/01/22 Javascript
JavaScript对象数组排序实例方法浅析
2016/06/15 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
2016/12/09 Javascript
vuejs2.0实现一个简单的分页示例
2017/02/22 Javascript
canvas绘制环形进度条
2017/02/23 Javascript
教你用十行node.js代码读取docx的文本
2017/03/08 Javascript
Angular2数据绑定详解
2017/04/18 Javascript
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
JS实现的简单四则运算计算器功能示例
2017/09/27 Javascript
Vue使用Canvas绘制图片、矩形、线条、文字,下载图片
2019/04/26 Javascript
layui使用表格渲染获取行数据的例子
2019/09/13 Javascript
解决vue 给window添加和移除resize事件遇到的坑
2020/07/21 Javascript
jQuery zTree如何改变指定节点文本样式
2020/10/16 jQuery
[01:24:09]Ti4 冒泡赛第二轮DK vs C9 1
2014/07/14 DOTA
python使用自定义user-agent抓取网页的方法
2015/04/15 Python
使用Python脚本操作MongoDB的教程
2015/04/16 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
2017/11/11 Python
Tensorflow 实现释放内存
2020/02/03 Python
了解一下python内建模块collections
2020/09/07 Python
CSS3转换功能transform主要属性值分析及实现分享
2012/05/06 HTML / CSS
美国受欢迎的眼影品牌:BH Cosmetics
2016/10/25 全球购物
正宗的日本零食和糖果订阅盒:Bokksu
2019/11/21 全球购物
生物技术专业毕业生求职信范文
2013/12/14 职场文书
物流管理专业职业生涯规划书
2014/01/06 职场文书
党员承诺书内容
2014/03/26 职场文书
设计专业自荐信
2014/06/19 职场文书
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
2021/05/18 Vue.js
go goroutine 怎样进行错误处理
2021/07/16 Golang
vue实现移动端div拖动效果
2022/03/03 Vue.js
Linux安装Docker详细教程
2022/07/07 Servers