爬虫与反爬虫
爬虫与反爬虫分享
FserSuN
这个作者很懒,什么都没留下…
展开
-
浏览器反爬虫异常的使用
1 异常在识别中的使用爬虫在抓取浏览器数据时,常会用到代码js代码执行的工具。为了识别,会利用函数栈来进行判断。如下是一个简单的例子来描述问题。如果是在代码执行器中执行就可以暴露出执行器方法名及行列等信息。因此将这些信息上报给后台,与实际信息进行比较,分析判断即可识别出是否是爬虫。(function(){try{ throw new Error("test");}catch(err) { console.log(err.stack);}})();VM754:5 Error:翻译 2020-05-14 00:49:27 · 668 阅读 · 0 评论 -
浏览器反调试绕过无限debugger及代码执行器检测
背景现在做数据爬虫的朋友常有的方法就是利用浏览器的调试能力分析别人JS代码逻辑。如果遇到复杂的代码可能会第三方代码执行功能。例如使用puppeteer的evalute方法执行代码获取结果。而我们做反爬遇到这种情况就是进行调试干扰,例如加入定时器,重复调用debugger,那么调试模式下就影响调试。而对于类似通过evalute方法执行代码进行抓取的爬虫通过异常调用栈即可检测。例如执行代码中故...原创 2020-04-11 11:22:47 · 4789 阅读 · 7 评论 -
javascript拦截instanceof
javascript拦截instanceof数据抓取进行问题分析很重的一个方法就是拦截(hook),一般的函数属性拦截通过Proxy即可。而对于instanceof则需要使用Symbol.hasInstance。当一个对象定义Symbol.hasInstance的属性描述符后,就可以拦截到instanceof调用。Object.defineProperty(Navigator, Symbol...翻译 2020-03-31 22:50:49 · 424 阅读 · 0 评论 -
浏览器数据抓取属性自定义修改
背景利用浏览器进行数据抓取需要改在环境,反爬虫中chrome无头浏览器的几种检测与绕过方式介绍了修改属性,本文总结修改方法。在浏览中包含各种浏览器对象与网页元素对象,环境修改就是对这两类对象进行修改。Js中属性修改要么是修改该对象的自身属性,要么是修改该对象原型属性。当访问一个属性时,如果对象不存在该属性,那么在原型中去查找。因此修改就很明确了,改对象属性或原型属性。如果通过构造器修改,...原创 2019-06-05 21:49:26 · 2816 阅读 · 0 评论 -
Chrome地理位置信息模拟
Chrome地理位置信息模拟通过Chrome的Sensor面板可以设置经纬度与时区。首先我们要设置允许获取经纬度数据。在地址栏输入chrome://settings/content/location[1]进入位置信息面板。首先设置Chrome允许获取位置信息,如果某些网站位置信息被禁止获取,要从对应的列表中排除,否则提示没有权限。接着在Sensors面板中可以设置默认区域,或者我们可以自定义...原创 2020-03-20 00:01:48 · 1965 阅读 · 0 评论 -
数据抓取拦截javascript设置的cookie
1 背景在进行数据抓取时,找javascript生成的cookie通常是一件很烦人的事情。如果能一步定位到cookie是哪个javascript文件生成,那么会极大减轻工作量。2 原理我们设置cookie会通过document.cookie来设置。当设置cookie时,能触发我们增加的拦截功能即可。如果一个对象具有一个属性,我们可以获取该对象的属性描述符,并覆盖属性描述符对象的set方法来...原创 2019-04-30 23:45:57 · 1477 阅读 · 0 评论 -
HTML5 音频API产生音频指纹进行用户追踪介绍
背景介绍在浏览器上可以通过生成指纹信息,来反爬虫或进行用户追踪。之前我们提到的有canvas指纹,除此外还有音频指纹。音频指纹的思路和canvas指纹类型。在不同浏览器不同机器上通过音频api产生的声音信息会有略微的差异。因此可以通过这些api来获取我们需要的数据生成指纹。音频指纹实现为了使用音频相关的API,下面的代码是[1]一个通过音频API产生声音的一个例子。// 创建音频上下文 ...原创 2020-03-05 22:01:00 · 3026 阅读 · 0 评论 -
浏览器爬虫数据采集可视化解析实现之单页面的可视化解析
1 前言在进行数据采集时,也即我们说的爬虫,抓到数据后通常需要进行解析。在PC端通常需要通过写代码进行解析。对于抓取业务较简单的场景,重复写代码完成这样的工作十分耗时。我们希望通过抓取到页面数据后,在页面上进行点选目标元素,就可以直接获得需要的数据,这样提高工作效率。我们在市面上见到的工具有Portia及八抓鱼等工具即通过选择的形式实现解析。本文将介绍实现的主要原理。只要明白了这些原理,其余类似...原创 2020-01-09 01:02:35 · 2185 阅读 · 2 评论 -
navigator plugins与mimetyps的模拟实现分析
1 调整数组类型和数组成员类型正常navigator.plugins对象数组中成员类型是Plugin,数组类型为PluginArray。正常navigator.mimeTypes数组成员类型是MimeType,数组类型mimeTypes。PluginArray {0: Plugin, 1: Plugin, 2: Plugin, Chrome PDF Plugin: Plugin, Chrome...原创 2019-12-24 21:28:48 · 1939 阅读 · 0 评论 -
HTML5 Canvas指纹及反追踪介绍
1 Canvas指纹的简介很多网站通过Canvas指纹来跟踪用户。browserleaks[1]是一个在线检测canvas指纹的网站。一般的指纹实现原理即通过canvas画布绘制一些图形,填写一些文字,随后获取画布的base64编码,再经过hash后得到。下面是一个简单的例子,最终调用toDataUrl会生成一段编码。// Text with lowercase/uppercase/punc...原创 2019-12-13 22:24:13 · 4405 阅读 · 1 评论 -
JavaScript反调试小技巧
1.函数重定义防止在当前上下文中使用输出语句观察结果。console.log("Hello World");var fake = function() {};window['console']['log'] = fake;console.log("You can't see me!");console.log("Normal function");// var original ...翻译 2019-12-03 22:28:44 · 1304 阅读 · 0 评论 -
通过UC开发者工具替代Chrome Remote Debug进行手机浏览器调试
1.背景Android移动端浏览器环境验证与测试,可使用vConsole[1],weirne[2],chrome remote debug[3]等方式验证。当然最理想的方法是chrome remote debug,通过chrome可以使用调试控制台调试js,观察网络面板及性能面板等。在国内使用chrome调试需要翻墙,否则会出现404页面,无法调试,使用不便。因此若能有一种和chrom...原创 2019-10-31 22:06:26 · 4586 阅读 · 0 评论 -
浏览器端反爬虫特征收集之字体检测
1 背景介绍现今的反爬虫系统主要思路是通过收集访问者的设备特征和行为,并在后台进行行为与特征分析识别出异常流量,达到反爬虫的目的。这些特征中字体也是一项重要的采集项。即收集一款浏览器当前有多少可用的字体。我们在看前端特征收集脚本常会见到如下的代码[1]。通过设置给一段文本的标签设置不同的字体样式,随后比较宽高,来判断字体是否存在。var Detector = function() { ...原创 2019-08-03 00:34:36 · 870 阅读 · 0 评论 -
反爬虫之令无头浏览器chrome无法执行的一种方式
chrome develper模式令代码无法执行的一种方式本文测试环境的版本信息如下:Google Chrome 66.0.3359.181 (正式版本) (64 位)修订版本 a10b9cedb40738cb152f8148ddab4891df876959-refs/branch-heads/3359@{#828}操作系统 Mac OS XJavaScript ...原创 2018-05-31 00:51:18 · 4002 阅读 · 5 评论 -
Puppeteer设置浏览器代理的三种思路
0 背景Puppeteer是google推出的操作浏览器的框架。当我们通过框架操作浏览器去访问页面通常需要设置代理。本文简要总结设置代理的方式。1 通过启动参数设置代理我们通过puppeteer启动浏览通常可以指定参数,通过–proxy-server参数[1]指定代理。http及https请求的将通过代理服务器访问。若每次需要更换代理就需要重新通过launch方法来启动浏览器。 co...翻译 2019-06-30 17:29:37 · 19347 阅读 · 7 评论 -
反爬虫之浏览器指纹上报代码的分析
背景在PC端反抓取过程中为了识别爬虫,其中一种方式通过上报请求者的设备信息,通过设备信息来识别是否是一个爬虫。当请求目标网站后,必须请求一个指纹计算脚本,该脚本收集设备信息,根据这些设备信息计算出一段数值并作为指纹,最终将计算结果发送给服务器。浏览器设备信息包括navigator.userAgent、window.screen、navigator.languages等。抓取者在抓取时通常会自...原创 2019-05-08 00:37:54 · 7164 阅读 · 6 评论 -
Js反爬虫之转义符对名称混淆
1.背景介绍反爬虫cookie反爬是一种常用的手段。计算好相关数值,并通过document.cookie设置,最终提交给后端用来检查是否是爬虫。而破解方式通常是通过搜索document.cookie,并找出cookie的生成方式。为了加大破解难度,一种方式是隐藏document.cookie,让破解者花更多时间,增加难度。同理所有不希望被直接看到的重要符号都可以通过此方法进行混淆。2. 通过...原创 2019-02-07 12:21:11 · 1921 阅读 · 0 评论 -
Puppeteer拦截器在数据抓取中的使用
Puppeteer拦截器在数据抓取中的使用Puppeteer提供的拦截器功能可以用来拦截请求,当访问页面时可以拦截无用请求,加快请求速度。拦截器使用示例下面是Puppeteer Api文档中关于拦截器的一个例子,下面针对这个例子说明相关问题及使用注意点。const puppeteer = require('puppeteer');puppeteer.launch().then(async...原创 2018-09-22 11:41:32 · 9633 阅读 · 0 评论 -
Chrome调试通过事件监听获取携程目的地弹出层HTML代码
问题概述登录携程首页 http://www.ctrip.com/ 单机目的地对话框会出现城市列表。如下图所示。我们希望一次得到所有城市代码。通过chrome调试工具尝试选择这个对框画,并在Elements标签内看到对应的HTML代码。但点击下图中的元素选择按钮时对话框就消失了,无法被选择,并查看元素。借助事件监听选中弹出层设置单击事件监听: 1. EventLis...原创 2018-09-05 00:29:52 · 1230 阅读 · 0 评论 -
Puppeteer自动化测试鼠标键盘基本操作及注意事项
通过Puppeteer Api来控制Chrome进行数据抓取或自动化测试通常模拟鼠标或键盘的操作。接下来通过一些实例来介绍这些基本操作。如下的测试为了方便观察结果 headless均设置为false,即有界面状态下测试。puppeteer版本为0.1.7,chrome版本为5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KH...原创 2018-08-28 00:06:31 · 12857 阅读 · 2 评论 -
反爬虫中chrome无头浏览器的几种检测与绕过方式
chrome无头浏览器的几种检测方式本文测试使用的chrome版本为 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3514.2 Safari/537.361.UserAgent检测无头模式下的UA会带有HeadlessChrome关键...翻译 2018-08-18 02:06:34 · 33213 阅读 · 10 评论 -
Are you headless页面无头浏览器检测绕过
1 背景研究人员开发者使用了一种检测方法,并提供了检测页面对chrome浏览器进行检测,判断是否是无头浏览器。具体返回结果如下图。2 检测手段分析常见的前端检测手段即通过前端JS脚本收集数据上报,然后检测浏览器特征判断是否是无头浏览器。分析过程即看请求中使用的分析脚本及上报数据。首先打开正常浏览器可以看到如下7个请求。https://arh.antoinevastel.com/bo...原创 2019-09-12 20:58:00 · 3001 阅读 · 0 评论 -
解决Puppeteer拦截图片导致超时的问题
1 背景通过puppeteer操作浏览器访问一个网站,大量的图片请求会站用很多时间。如果将不必要的图片的请求拦截,那么会加快访问速度。但访问某些网站,如果将图片拦截,那么网站自身会不断重试,最终导致整个网站访问超时。如下图所示,看到的现象是屏幕疯狂闪烁,大量重试,并造成超时。遇到这种情况,通过本地返回一张自定义图片即可解决。2 拦截图片请求返回本地自定义图片当产生的图片请求被我们拦截到,我...原创 2019-09-11 21:30:14 · 3604 阅读 · 0 评论 -
浏览器端反爬虫特征收集之WebRtc本地IP收集
1 基本概念WebRTC(Web Real-Time Communication)网页实时通信,允许网络应用不借助中间媒介情况下建立P2P(Peer-to-Peer)连接,实现视频流或其它任意数据传输[1]。因此需要使用NAT穿越技术。在WebRTC使用了ICE协议框架,里面提到了STUN和TURN两个协议,而NAT穿越实现就是由这两个协议共同协调完成的。这里涉及了ICE、STUN、NAT、...原创 2019-08-27 12:56:49 · 2196 阅读 · 1 评论 -
通过http协议中的etag进行用户追踪
1 什么是用户追踪用户追踪是同过一个唯一标识能定位到一个用户。例如A用户访问网站,网站生成一个唯一cookie,随后用户请求都带上这个cookie,那么通过这个cookie就可以分析用户的访问或操作行为。通过浏览器通常进行用户追踪使用的常用手段如几种,但不仅限于这几种。cookielocalStoragesessionStorageipuserAgentcanvas指纹除此之...原创 2019-09-19 21:49:14 · 876 阅读 · 0 评论