详解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小程序
Aug 15 Python
Python中处理时间的几种方法小结
Apr 09 Python
Python使用logging结合decorator模式实现优化日志输出的方法
Apr 16 Python
Python编程实现二叉树及七种遍历方法详解
Jun 02 Python
python下setuptools的安装详解及No module named setuptools的解决方法
Jul 06 Python
python文本数据相似度的度量
Mar 12 Python
python 爬虫 批量获取代理ip的实例代码
May 22 Python
python 使用 requests 模块发送http请求 的方法
Dec 09 Python
tensorflow 只恢复部分模型参数的实例
Jan 06 Python
python正则表达式的懒惰匹配和贪婪匹配说明
Jul 13 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
Aug 07 Python
python 中的命名空间,你真的了解吗?
Aug 19 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/10/09 PHP
mysql 的 like 问题,超强毕杀记!!!
2007/01/18 PHP
PHP SQLite类
2009/05/07 PHP
PHP时间和日期函数详解
2015/05/08 PHP
php+ajax实现无刷新的新闻留言系统
2020/12/21 PHP
php实现基于PDO的预处理示例
2017/03/28 PHP
PHP封装的完整分页类示例
2018/08/21 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
2019/04/04 PHP
JavaScript DOM 学习第七章 表单的扩展
2010/02/19 Javascript
JavaScript XML和string相互转化实现代码
2011/07/04 Javascript
animate动画示例(泪奔的小孩)及stop和delay的使用
2013/05/06 Javascript
浅析Cookie中的Path与domain
2013/12/18 Javascript
jQuery中not()方法用法实例
2015/01/06 Javascript
JQuery中attr方法和removeAttr方法用法实例
2015/05/18 Javascript
javascript+canvas实现刮刮卡抽奖效果
2015/07/29 Javascript
js实现不提交表单获取单选按钮值的方法
2015/08/21 Javascript
JS实现浏览器状态栏显示时间的方法
2015/10/27 Javascript
基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标
2016/01/22 Javascript
AngularJs Understanding the Model Component
2016/09/02 Javascript
jQuery Tree Multiselect使用详解
2017/05/02 jQuery
Vue2.X 通过AJAX动态更新数据
2018/07/17 Javascript
js实现简单分页导航栏效果
2019/06/28 Javascript
深入探索VueJS Scoped CSS 实现原理
2019/09/23 Javascript
Python中shutil模块的学习笔记教程
2017/04/04 Python
Python数据操作方法封装类实例
2017/06/23 Python
详解Python3中setuptools、Pip安装教程
2019/06/18 Python
Python requests模块基础使用方法实例及高级应用(自动登陆,抓取网页源码)实例详解
2020/02/14 Python
Django import export实现数据库导入导出方式
2020/04/03 Python
中国专业的综合网上购物商城:京东
2016/08/02 全球购物
文员岗位职责
2013/11/09 职场文书
酒店保安领班职务说明书
2014/03/04 职场文书
个人事迹材料范文
2014/12/29 职场文书
2015年大学团支部工作总结
2015/05/13 职场文书
2019年大学生职业生涯规划书
2019/03/25 职场文书
《传颂之物 虚伪的假面》BD发售宣传CM公开
2022/04/04 日漫
Windows server 2012搭建FTP服务器
2022/04/29 Servers