详解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中itertools模块用法详解
Sep 25 Python
python执行shell获取硬件参数写入mysql的方法
Dec 29 Python
修改Python的pyxmpp2中的主循环使其提高性能
Apr 24 Python
python删除指定类型(或非指定)的文件实例详解
Jul 06 Python
python2.7实现FTP文件下载功能
Apr 15 Python
python写入并获取剪切板内容的实例
May 31 Python
python操作mysql代码总结
Jun 01 Python
Python 利用切片从列表中取出一部分使用的方法
Feb 01 Python
python按照多个条件排序的方法
Feb 08 Python
Python通过VGG16模型实现图像风格转换操作详解
Jan 16 Python
python2.7使用scapy发送syn实例
May 05 Python
python文件与路径操作神器 pathlib
Apr 01 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 压缩文件夹的类代码
2009/11/05 PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
2013/07/05 PHP
Server.HTMLEncode让代码在页面里显示为源代码
2013/12/08 PHP
CL vs ForZe BO5 第五场 2.13
2021/03/10 DOTA
网页常用特效代码整理
2006/06/23 Javascript
jQuery.each()用法分享
2012/07/31 Javascript
js document.write()使用介绍
2014/02/21 Javascript
javascript实现禁止复制网页内容
2014/12/16 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
2015/09/01 Javascript
JS控件bootstrap suggest plugin使用方法详解
2017/03/25 Javascript
JavaScript ES6箭头函数使用指南
2018/12/30 Javascript
详解Vue项目部署遇到的问题及解决方案
2019/01/11 Javascript
Vue 利用指令实现禁止反复发送请求的两种方法
2019/09/15 Javascript
[02:27]2014DOTA2国际邀请赛 VG赛后采访:更大的挑战在等着我们
2014/07/13 DOTA
python list中append()与extend()用法分享
2013/03/24 Python
Python 字符串操作实现代码(截取/替换/查找/分割)
2013/06/08 Python
Python3 能振兴 Python的原因分析
2014/11/28 Python
python检查字符串是否是正确ISBN的方法
2015/07/11 Python
python对日志进行处理的实例代码
2018/10/06 Python
对Python3+gdal 读取tiff格式数据的实例讲解
2018/12/04 Python
Python 一行代码能实现丧心病狂的功能
2020/01/18 Python
django前端页面下拉选择框默认值设置方式
2020/08/09 Python
python将字典内容写入json文件的实例代码
2020/08/12 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
2020/09/30 Python
意大利奢侈品购物网站:Giglio
2018/01/05 全球购物
微软马来西亚官方网站:Microsoft马来西亚
2019/11/22 全球购物
法国在线药房:Shop Pharmacie
2019/11/26 全球购物
Eton丹麦官网:精美的男式衬衫
2020/05/27 全球购物
教师简历自我评价
2014/02/03 职场文书
优质护理服务演讲稿
2014/05/07 职场文书
重阳节标语大全
2014/10/07 职场文书
2014年销售员工作总结
2014/12/01 职场文书
七年级作文之秋游
2019/10/21 职场文书
解决hive中导入text文件遇到的坑
2021/04/07 Python
php修改word的实例方法
2021/11/17 PHP