详解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 27 Python
分享一个简单的python读写文件脚本
Nov 25 Python
Python中join函数简单代码示例
Jan 09 Python
python使用pdfminer解析pdf文件的方法示例
Dec 20 Python
python+opencv实现霍夫变换检测直线
Oct 23 Python
Python使用folium excel绘制point
Jan 03 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
Oct 24 Python
Python中关于logging模块的学习笔记
Jun 03 Python
python求numpy中array按列非零元素的平均值案例
Jun 08 Python
Django中F函数的使用示例代码详解
Jul 06 Python
Python 中数组和数字相乘时的注意事项说明
May 10 Python
python缺失值填充方法示例代码
Dec 24 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压缩HTML函数轻松实现压缩html/js/Css及注意事项
2013/01/27 PHP
destoon实现底部添加你是第几位访问者的方法
2014/07/15 PHP
浅谈php错误提示及查错方法
2015/07/14 PHP
在Laravel中使用DataTables插件的方法
2018/05/29 PHP
javascript得到XML某节点的子节点个数的脚本
2008/10/11 Javascript
轻量级 JS ToolTip提示效果
2010/07/20 Javascript
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
jquery实现焦点图片随机切换效果的方法
2015/03/12 Javascript
javascript实现输出指定行数正方形图案的方法
2015/08/03 Javascript
整理Javascript数组学习笔记
2015/11/29 Javascript
在页面中输出当前客户端时间javascript实例代码
2016/03/02 Javascript
jQuery根据name属性进行查找的用法分析
2016/06/23 Javascript
AngularJS的ng Http Request与response格式转换方法
2016/11/07 Javascript
轻松理解JavaScript之AJAX
2017/03/15 Javascript
jquery在vue脚手架中的使用方式示例
2017/08/29 jQuery
JavaScript 异步调用
2017/10/25 Javascript
VUE Error: getaddrinfo ENOTFOUND localhost
2018/05/03 Javascript
微信小程序实现弹出菜单动画
2019/06/21 Javascript
Node.js爬虫如何获取天气和每日问候详解
2019/08/26 Javascript
细说webpack6 Babel的使用详解
2019/09/26 Javascript
微信小程序后端无法保持session的原因及解决办法问题
2020/03/20 Javascript
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
Python pickle模块用法实例
2015/04/14 Python
Python字符串逐字符或逐词反转方法
2015/05/21 Python
Python使用pickle模块实现序列化功能示例
2018/07/13 Python
Python构建图像分类识别器的方法
2019/01/12 Python
Python学习笔记之视频人脸检测识别实例教程
2019/03/06 Python
jupyter notebook 中输出pyecharts图实例
2020/04/23 Python
django一对多模型以及如何在前端实现详解
2019/07/24 Python
pandas的排序和排名的具体使用
2019/07/31 Python
Python面向对象之私有属性和私有方法应用案例分析
2019/12/31 Python
5分钟让你掌握css3阴影、倒影、渐变小技巧(小编推荐)
2016/08/15 HTML / CSS
咖啡店的创业计划书,让你hold不住
2014/01/03 职场文书
加拿大留学自荐信
2014/01/28 职场文书
师德自我剖析材料范文
2014/10/06 职场文书
ConditionalOnProperty配置swagger不生效问题及解决
2022/06/14 Java/Android