如何突破网站对selenium的屏蔽
使用selenium模拟浏览器进行数据抓取无疑是当下最通用的数据采集方案,它通吃各种数据加载方式,能够绕过客户JS加密,绕过爬虫检测,绕过签名机制。它的应用,使得许多网站的反采集策略形同虚设。由于selenium不会在HTTP请求数据中留下指纹,因此无法被网站直接识别和拦截。
这是不是就意味着selenium真的就无法被网站屏蔽了呢?非也。selenium在运行的时候会暴露出一些预定义的Javascript变量(特征字符串),例如"window.navigator.webdriver",在非selenium环境下其值为undefined,而在selenium环境下,其值为true(如下图所示为selenium驱动下Chrome控制台打印出的值)。
除此之外,还有一些其它的标志性字符串(不同的浏览器可能会有所不同),常见的特征串如下所示:
- 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_
了解了这个特点之后,就可以在浏览器客户端JS中通过检测这些特征串来判断当前是否使用了selenium,并将检测结果附加到后续请求之中,这样服务端就能识别并拦截后续的请求。
下面讲一个具体的例子。
鲲之鹏的技术人员近期就发现了一个能够有效检测并屏蔽selenium的网站应用:大众点评网的验证码表单页,如果是正常的浏览器操作,能够有效的通过验证,但如果是使用selenium就会被识别,即便验证码输入正确,也会被提示“请求异常,拒绝操作”,无法通过验证(如下图所示)。
分析页面源码,可以找到 https://static.meituan.net/bs/yoda-static/file:file/d/js/yoda.e6e7c3988817eb17.js 这个JS文件,将代码格式化后,搜索webdriver可以看到如下代码:
可以看到它检测了"webdriver", "__driver_evaluate", "__webdriver_evaluate"等等这些selenium的特征串。提交验证码的时候抓包可以看到一个_token参数(很长),selenium检测结果应该就包含在该参数里,服务端借以判断“请求异常,拒绝操作”。
现在才进入正题,如何突破网站的这种屏蔽呢?
我们已经知道了屏蔽的原理,只要我们能够隐藏这些特征串就可以了。但是还不能直接删除这些属性,因为这样可能会导致selenium不能正常工作了。我们采用曲线救国的方法,使用中间人代理,比如fidder, proxy2.py或者mitmproxy,将JS文件(本例是yoda.*.js这个文件)中的特征字符串给过滤掉(或者替换掉,比如替换成根本不存在的特征串),让它无法正常工作,从而达到让客户端脚本检测不到selenium的效果。
下面我们验证下这个思路。这里我们使用mitmproxy实现中间人代理),对JS文件(本例是yoda.*.js这个文件)内容进行过滤。启动mitmproxy代理并加载response处理脚本:
- mitmdump.exe -S modify_response.py
其中modify_response.py脚本如下所示:
view plaincopy to clipboardprint?
# coding:utf-8 # modify_response.pyimport re from mitmproxy import ctxdef response(flow):"""修改应答数据"""if '/js/yoda.' in flow.request.url:# 屏蔽selenium检测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','')
在selnium中使用该代理(mitmproxy默认监听127.0.0.1:8080)访问目标网站,mitmproxy将过滤JS中的特征符串,如下图所示:
经多次测试,该方法可以有效的绕过大众点评的selenium检测,成功提交大众点评网的验证码表单。
转载自:http://www.site-digger.com/html/articles/20180821/653.html
如何突破网站对selenium的屏蔽相关推荐
- 突破网站对Selenium的屏蔽
文章目录 问题描述 检测Selenium 解决方案 1. 使用Firefox 2. 半自动爬虫 3. 使用pyppeteer 4. Chrome开发工具协议 参考文献 问题描述 使用 selenium ...
- seleuium 禁止检测_如何突破网站对selenium的屏蔽
使用selenium模拟浏览器进行数据抓取无疑是当下最通用的数据采集方案,它通吃各种数据加载方式,能够绕过客户JS加密,绕过爬虫检测,绕过签名机制.它的应用,使得许多网站的反采集策略形同虚设.由于se ...
- 以淘宝为例教你如何突破网站对selenium的屏蔽
背景介绍: 一般情况下,访问网站都会消耗服务器的资源.而机器人可以做到比人更快的访问速度,更持续的访问时间,这对网站资源占用消耗是远远超过人的,而当服务器资源被大量占用的时候, 就不能为人提供正常的网 ...
- 网站链接被微信屏蔽禁止访问的解决办法
最近网站链接被微信屏蔽禁止访问,微信内打开网址显示如下提醒:已停止访问该网页,网页包含诱导分享.关注等诱导行为内容,被多人投诉,为维护绿色上网环境,已停止访问. 出现这种情况的原因是此域名(包括主域名 ...
- 网站被运营商屏蔽的经理和解决方法
网站被运营商屏蔽的经理和解决方法 参考文章: (1)网站被运营商屏蔽的经理和解决方法 (2)https://www.cnblogs.com/maja/p/10194520.html (3)https: ...
- index of rmvb mp3 rm突破网站入口下载
首先打开Google,在关键词输入框中输入"index of/"inurl:lib(双引号为英文状态下) ,选择"搜索简体中文网页"选项,回车搜索,得到了一些网 ...
- 网站识别selenium爬虫的原理以及解决方法
我们经常会拿selenium进行自动登录来搭建cookie池,对于不想自己网站被爬的站主/开发人员来说,防止自动化脚本操作网站自然是反爬必须要做的工作.那么,他们究竟有哪些手段来检测用户是否是sele ...
- python如何登录一个需要第三方验证的网站_python+selenium 之如何跳过登录验证
忙了一段时间没来学习了,今天学习下如何跳过登录验证码登录 首先我们很多系统的登录机制都会有短信验证或者图形验证等,每次自动化代码走到登录的时候,因为随机的验证码,导致无从下手 其实据我所知是有很多种方 ...
- hosts屏蔽网站以及代理越过屏蔽
用修改hosts的办法屏蔽了一些网站,这样就可以不必分心上网乱逛了. 如 127.0.0.1 news.baidu.com 也就是说ie解析时查看hosts,将news.baidu.com的链接指向1 ...
最新文章
- plsql programming 10 日期和时间戳
- 【JOURNAL】911的虚惊
- java拆装_JAVA线性表拆解
- 为iOS 项目引入其它开发包 的方法
- Android自定义view之基础知识
- 很多人想不通为什么创业失败者众成功者少
- 直接插入排序中的监视哨问题
- 2021-06-23元素的排列,浮动和display
- switchHosts 介绍
- 工业相机和镜头基础知识(转载)
- 求斐波那契数列的三种方法
- 51单片机LED灯闪烁
- 行政组织理论-阶段测评4
- 美团CAT客户端(windows版)接入指南
- 跳转指令JMP(04)和跳转结束指令JME(05)
- 如何利用番茄工作法提高学习和工作的效率
- 设计师计算机配置,超全面!写给设计师的电脑配置攻略之PS篇
- 数据清洗是清洗什么?
- JS输入框检验字符数(中文为2个字符,英文为1个字符)
- 从键盘输入一个字符,如果是小写字母,则将其转换成大写字母输出;如果是大写字母,则将其转换成小写字母输出;如果是其它字符,则原样输出。
热门文章
- python+selenium实现疫情期间全自动打卡
- 错过金三银四,找工作4个月,面试15家,终于拿到3个offer,定级P7+
- Hexo yilia 主题添加相册功能
- 笔记本不显示“选择关闭盖子的功能”
- 讲JAVA比较好的直播_有哪些比较好的课程直播平台?
- 最新二级域名分发系统网站源码 可商用
- 滴!请查收携程机票增值会员团队的一年敏捷账单
- 【实用手记】如何在当前终端打开一个相同路径的终端
- 微信小程序使用swiper制作左右滑动tabs导航
- java oracle 序列_Oracle之序列