详解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创建系统目录的方法
Mar 11 Python
python根据开头和结尾字符串获取中间字符串的方法
Mar 26 Python
详解Python中的join()函数的用法
Apr 07 Python
python实现学员管理系统
Feb 26 Python
[机器视觉]使用python自动识别验证码详解
May 16 Python
Python根据服务获取端口号的方法
Sep 25 Python
python 五子棋如何获得鼠标点击坐标
Nov 04 Python
python 计算概率密度、累计分布、逆函数的例子
Feb 25 Python
Django自定义列表 models字段显示方式
Apr 03 Python
django前端页面下拉选择框默认值设置方式
Aug 09 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
Nov 12 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
Jan 08 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
一个简单的自动发送邮件系统(一)
2006/10/09 PHP
apache+codeigniter 通过.htcaccess做动态二级域名解析
2012/07/01 PHP
探讨捕获php错误信息方法的详解
2013/06/09 PHP
php从数组中随机选择若干不重复元素的方法
2015/03/14 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
2015/08/31 PHP
javascript 网页跳转的方法
2008/12/24 Javascript
javascript 全等号运算符使用说明
2010/05/31 Javascript
jQeury淡入淡出需要注意的问题
2010/09/08 Javascript
javascript是怎么继承的介绍
2012/01/05 Javascript
DOM2非标准但却支持很好的几个属性小结
2012/01/21 Javascript
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
Jquery左右滑动插件之实现超级炫酷动画效果附源码下载
2015/12/02 Javascript
谷歌Chrome浏览器扩展程序开发小记
2016/01/06 Javascript
jQuery如何获取动态添加的元素
2016/06/24 Javascript
js判断价格,必须为数字且不能为负数的实现方法
2016/10/07 Javascript
Vue安装浏览器开发工具的步骤详解
2019/05/12 Javascript
layui监听select变化,以及设置radio选中的方法
2019/09/24 Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
2020/08/14 Javascript
Python利用IPython提高开发效率
2016/08/10 Python
Fabric 应用案例
2016/08/28 Python
Python实现的直接插入排序算法示例
2018/04/29 Python
windows下python安装pip图文教程
2018/05/25 Python
Python面向对象程序设计之继承与多继承用法分析
2018/07/13 Python
python机器学习之神经网络实现
2018/10/13 Python
Python3自动签到 定时任务 判断节假日的实例
2018/11/13 Python
深入学习python多线程与GIL
2019/08/26 Python
Django中自定义查询对象的具体使用
2019/10/13 Python
英国领先的家庭时尚品牌:Peacocks
2018/01/11 全球购物
Molly Bracken法国电子商店:法国女性时尚品牌
2019/07/24 全球购物
网络工程师的自我评价
2013/10/02 职场文书
室内设计自我鉴定
2013/10/15 职场文书
求职信需要的五点内容
2014/02/01 职场文书
工厂搬迁方案
2014/05/11 职场文书
党的群众路线教育实践活动个人整改落实情况汇报
2014/10/28 职场文书
公文写作指导之倡议书!
2019/07/03 职场文书
如何创建一个创建MySQL数据库中的datetime类型
2022/03/21 MySQL