详解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中使用enumerate函数遍历元素实例
Jun 16 Python
在Python中操作字典之clear()方法的使用
May 21 Python
解决nohup重定向python输出到文件不成功的问题
May 11 Python
python中的插值 scipy-interp的实现代码
Jul 23 Python
如何通过Python实现标签云算法
Jul 02 Python
Python安装及Pycharm安装使用教程图解
Sep 20 Python
python numpy存取文件的方式
Apr 01 Python
使用Python+selenium实现第一个自动化测试脚本
Mar 17 Python
Python openpyxl 插入折线图实例
Apr 17 Python
Python制作运行进度条的实现效果(代码运行不无聊)
Feb 24 Python
python opencv通过按键采集图片源码
May 20 Python
 Python 中 logging 模块使用详情
Mar 03 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
Windows下安装Memcached的步骤说明
2010/04/25 PHP
fleaphp rolesNameField bug解决方法
2011/04/23 PHP
PHP与MYSQL中UTF8编码的中文排序实例
2014/10/21 PHP
php+mysql实现用户注册登陆的方法
2015/01/03 PHP
php实现汉字验证码和算式验证码的方法
2015/03/07 PHP
PHP微信公众号自动发送红包API
2016/06/01 PHP
找到一点可怜的关于dojo资料,谢谢作者!
2006/12/06 Javascript
JavaScript 小型打飞机游戏实现原理说明
2010/10/28 Javascript
php跨域调用json的例子
2013/11/13 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
javascript+css3 实现动态按钮菜单特效
2016/02/06 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
2016/02/25 Javascript
jquery.tableSort.js表格排序插件使用方法详解
2020/08/12 Javascript
浅谈angular2 组件的生命周期钩子
2017/08/12 Javascript
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
Webpack实战加载SVG的方法
2017/12/26 Javascript
js常用正则表达式集锦
2019/05/17 Javascript
JavaScript实现拖拽盒子效果
2020/02/06 Javascript
Javascript原型链及instanceof原理详解
2020/05/25 Javascript
python获取图片颜色信息的方法
2015/03/18 Python
详解如何设置Python环境变量?
2019/05/13 Python
十行代码使用Python写一个USB病毒
2019/06/21 Python
Django forms表单 select下拉框的传值实例
2019/07/19 Python
使用python实现滑动验证码功能
2019/08/05 Python
Django model 中设置联合约束和联合索引的方法
2019/08/06 Python
python enumerate内置函数用法总结
2020/01/07 Python
塑料制成的可水洗的编织平底鞋和鞋子:Rothy’s
2018/09/16 全球购物
Cult Gaia官网:美国生活方式品牌
2019/08/16 全球购物
俄罗斯卫浴采暖及维修用品超级市场:Dkrussia
2020/05/12 全球购物
EJB发布WEB服务一般步骤
2012/10/31 面试题
师范学院毕业生求职信
2014/06/24 职场文书
车间核算员岗位职责
2014/07/01 职场文书
社区活动总结
2015/02/04 职场文书
会计专业2019暑假实习报告
2019/06/21 职场文书
签证扫盲贴,41个常见签证知识,需要的拿走
2019/08/09 职场文书
Python实现Excel文件的合并(以新冠疫情数据为例)
2022/03/20 Python