详解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使用webbrowser浏览指定url的方法
Apr 04 Python
python实现逆波兰计算表达式实例详解
May 06 Python
python2.7实现爬虫网页数据
May 25 Python
python对离散变量的one-hot编码方法
Jul 11 Python
解决python3 安装完Pycurl在import pycurl时报错的问题
Oct 15 Python
详解pyenv下使用python matplotlib模块的问题解决
Nov 29 Python
python常用函数与用法示例
Jul 02 Python
Python TCP通信客户端服务端代码实例
Nov 21 Python
使用TensorFlow搭建一个全连接神经网络教程
Feb 06 Python
基于Python共轭梯度法与最速下降法之间的对比
Apr 02 Python
Django 解决由save方法引发的错误
May 21 Python
python实现控制台输出颜色
Mar 02 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自定义函数之递归删除文件及目录
2010/08/08 PHP
php中is_null,empty,isset,unset 的区别详细介绍
2013/04/28 PHP
深入php函数file_get_contents超时处理的方法详解
2013/06/03 PHP
ThinkPHP实现带验证码的文件上传功能实例
2014/11/01 PHP
PHP生成不重复随机数的方法汇总
2014/11/19 PHP
PHP查询快递信息的方法
2015/03/07 PHP
原生js操作checkbox用document.getElementById实现
2013/10/12 Javascript
按下Enter焦点移至下一个控件的实现js代码
2013/12/11 Javascript
javascript实现复制与粘贴操作实例
2014/10/16 Javascript
JavaScript获得url查询参数的方法
2015/07/02 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
2015/12/19 Javascript
bootstrap datetimepicker 日期插件在火狐下出现一条报错信息的原因分析及解决办法
2017/03/08 Javascript
vue 如何添加全局函数或全局变量以及单页面的title设置总结
2017/06/01 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
解决vue打包css文件中背景图片的路径问题
2018/09/03 Javascript
JavaScript中关于base64的一些事
2019/05/06 Javascript
Python之日期与时间处理模块(date和datetime)
2017/02/16 Python
Python cookbook(数据结构与算法)将名称映射到序列元素中的方法
2018/03/22 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
2018/09/17 Python
python调用支付宝支付接口流程
2019/08/15 Python
Anconda环境下Vscode安装Python的方法详解
2020/03/29 Python
Django设置Postgresql的操作
2020/05/14 Python
Python接口测试环境搭建过程详解
2020/06/29 Python
基于css3实现漂亮便签样式
2013/03/18 HTML / CSS
使用css3制作登录表单的步骤
2014/04/07 HTML / CSS
丝芙兰中国官方商城:SEPHORA中国
2018/01/10 全球购物
英国大码女性时装零售商:Evans
2018/08/29 全球购物
一加手机美国官方网站:OnePlus美国
2019/09/19 全球购物
英国时尚高尔夫服装购物网站:Trendy Golf
2020/01/10 全球购物
面向对象编程OOP的优点
2013/01/22 面试题
环境工程专业个人求职信
2013/12/05 职场文书
民事诉讼代理授权委托书
2014/10/11 职场文书
教师批评与自我批评发言稿
2014/10/15 职场文书
小公司融资,商业计划书的8切记
2019/07/15 职场文书
Python 图片添加美颜效果
2022/04/28 Python
Java中生成微信小程序太阳码的实现方案
2022/06/01 Java/Android