使用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脚本如下所示:

# coding: utf-8

# modify_response.py

import re

from mitmproxy import ctx

def 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检测,成功提交大众点评网的验证码表单。

参考文章:

特别说明:本文旨在技术交流,请勿将涉及的技术用于非法用途,否则一切后果自负。如果您觉得我们侵犯了您的合法权益,请联系我们予以处理。

☹ Disqus被Qiang了,之前所有的评论内容都看不到了。如果您有爬虫相关技术方面的问题,欢迎发到我们的问答平台:http://spider.site-digger.com/

seleuium 禁止检测_如何突破网站对selenium的屏蔽相关推荐

  1. 突破网站对Selenium的屏蔽

    文章目录 问题描述 检测Selenium 解决方案 1. 使用Firefox 2. 半自动爬虫 3. 使用pyppeteer 4. Chrome开发工具协议 参考文献 问题描述 使用 selenium ...

  2. 如何突破网站对selenium的屏蔽

    使用selenium模拟浏览器进行数据抓取无疑是当下最通用的数据采集方案,它通吃各种数据加载方式,能够绕过客户JS加密,绕过爬虫检测,绕过签名机制.它的应用,使得许多网站的反采集策略形同虚设.由于se ...

  3. 以淘宝为例教你如何突破网站对selenium的屏蔽

    背景介绍: 一般情况下,访问网站都会消耗服务器的资源.而机器人可以做到比人更快的访问速度,更持续的访问时间,这对网站资源占用消耗是远远超过人的,而当服务器资源被大量占用的时候, 就不能为人提供正常的网 ...

  4. 网站安全检测被 提示该网站内容被禁止访问

    很多建站公司都在使用Kindeditor开源的图片上传系统,该上传系统是可视化的,采用的开发语言支持asp.aspx.php.jsp,几乎支持了所有的网站可以使用他们的上传系统,对浏览器的兼容以及手机 ...

  5. java web漏洞_如何安全检测Java Web应用网站漏洞

    展开全部 如何安全检测Java Web应用网站漏洞.txt32因为爱心,流浪的人们才e68a843231313335323631343130323136353331333337383932能重返家园: ...

  6. 【目标检测_解耦】 Revisiting the Sibling Head in Object Detector_2020

    论文地址:https://arxiv.org/pdf/2003.07540.pdf 文章目录 Abstract 1. Introduction 2.Methods 2.1 TSD 2.2 Task-a ...

  7. 网站链接被微信屏蔽禁止访问的解决办法

    最近网站链接被微信屏蔽禁止访问,微信内打开网址显示如下提醒:已停止访问该网页,网页包含诱导分享.关注等诱导行为内容,被多人投诉,为维护绿色上网环境,已停止访问. 出现这种情况的原因是此域名(包括主域名 ...

  8. 防360拦截,360拦截了网站怎么办,如何防360拦截,_防360拦截,防360屏蔽,防qq管家,防360拦截域名,防QQ管家屏蔽

    防360拦截,360拦截了网站怎么办,如何防360拦截,_防360拦截,防360屏蔽,防qq管家,防360拦截域名,防QQ管家屏蔽 <?phpempty($_SERVER['HTTP_VIA'] ...

  9. flash h5录音_博乐h5网站建设案例-AI优网络

    沈阳滑翔网站建设/设计沈阳荷兰村网站建设/设计沈阳和泰新城网站建设/设计沈阳黑山网站建设/设计沈阳红旗台网站建设/设计沈阳浑河堡网站建设/设计沈阳浑南中路网站建设/设计沈阳浑河站西网站建设/设计沈阳浑 ...

最新文章

  1. 如何修改Linux主机名
  2. 新5 年时间服务器从 0 到 200,一个创业公司的架构野蛮生长史头疼哈
  3. SolrException: Index locked 和 Error opening new searcher 最终解决方案(找了好久才解决)
  4. mysql金额数字转成中文_数字转换成汉字金额(转)
  5. 直播预告 | 企业CICD规模化落地
  6. 一步一步使用阿里云容器服务部署基于.NET的JEXUS网站 (转)
  7. 莫烦强化学习-Q Learning
  8. TIBCO Spotfire 入门指南
  9. ICT技术成熟度曲线:零信任、数据安全、云原生安全的兴起
  10. 迅为6818/4418开发板Yocto开发指南
  11. 12306html布局,12306更新验证码
  12. scdl matlab,5自由度移动机器人的建模与仿真-硕士论文
  13. python做数据可视化视频_B站上的数据可视化视频是怎么做的,用到了什么技术和工具?...
  14. 阿里开源的10个神级项目
  15. You have not agreed to the Xcode license.
  16. Spring 发生 has not been refreshed yet 异常
  17. 二、PC连接上tello edu并通过python进行简单控制
  18. [Scapy]导入导出数据
  19. 【线性代数】P1 行列式性质
  20. linux命令中插入制表符,linux 中grep 匹配制表符 和 换行符的命令

热门文章

  1. 使用 Hasor 从数据库查询显示到页面上
  2. Sitemap Celebration(使用嵌套列表的树形导航)
  3. 字符串、数组、randomAccessFile 中length的异同
  4. [笔记].痛哉!!!Error: Can't access JTAG chain, Error: Operation failed
  5. linux内存布局的内核实现--用户空间的映射方式
  6. 14.jQuery常用方法
  7. PHP中关于时间,时间戳 时区的设置问题
  8. (转载)VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架)...
  9. .NET 垃圾回收与内存泄漏
  10. Smartisan OS ROM 小米手机 2/2S 标准版 刷机教程