爬虫补环境利器webEnv使用教程,打造自己专属得JSdom

article/2025/7/18 10:39:28

爬虫补环境利器webEnv使用教程,打造自己专属得JSdom

  • 一、为什么要打造自己的JSdom
  • 二、webEnv下载通道
  • 三、wenEnv使用
  • 四、日志管理
  • 五、总结

web端JavaScript环境检测:SpiderTools谷歌插件

一、为什么要打造自己的JSdom

在爬虫逆向工程中,补环境是一个常见且关键的环节。许多网站会对document.getElementsByTagName、document.createElement、document.getAttribute、[native code]、__proto__等浏览器原生方法进行校验。尽管这些方法在不同网站中的具体实现可能有所差异,但其核心逻辑基本一致。为了提高补环境的效率,将这些环境校验逻辑进行封装是一个明智的选择。
虽然可以使用Node.js的jsdom插件(参考文章:nodejs之jsdom插件,运行浏览器环境)来模拟浏览器环境,但jsdom本身也存在一些局限性。例如,document.all等特殊属性的处理可能会导致环境错误(参考文章:web逆向中奇葩的document.all)。此外,如果在使用jsdom时遇到需要调试的环境问题,调试过程可能会变得复杂且耗时。
要打造专属的 jsDom,首先需要深入理解 JavaScript 的原型和原型链机制。原型是 JavaScript 对象的核心特性,每个对象都有一个内部属性 [[Prototype]],它指向另一个对象,称为原型对象。原型链则是 JavaScript 实现继承的关键机制。每个对象都有一个原型对象,而原型对象本身也可能有自己的原型,从而形成一个链式结构。当我们访问一个对象的属性或方法时,如果对象本身没有这个属性或方法,JavaScript 会沿着原型链向上查找,直到找到该属性或方法,或者到达原型链的末端(null),下面由代码来说明原型和原型链:
1.打开任意网站,在控制台输出div的原型,从下图可以看出,div的原型链为:HTMLDivElement>HTMLElement>Element>Node>EventTarget
在这里插入图片描述
2.node代码模拟div原型链
在这里插入图片描述
3.node代码模拟div原型链属性,属性又分可枚举属性、不可枚举属性,可枚举属性是可以被循环的,不可枚举是不能循环获取的,可使用Object.keys(obj)查看对象可枚举属性有哪些,使用Reflect.ownKeys(obj)查看对象所有属性,使用Object.getOwnPropertyDescriptor(obj,prop)可查看属性详情;下图虽然模拟了原型链属性,但是将属性详情中的get函数toString中浏览器端返回function get lang() { [native code] },node模拟属性返回的是整个函数字符串,这是因为native code标识是js浏览器引擎生成的代码,而模拟出的属性是自己编写的代码
在这里插入图片描述在这里插入图片描述
4.重写Function.prototype.toString,解决toString问题,无论是js引擎生成的函数,还是自己编写的调用toString时都是执行Function.prototype.toString方法,下图只是为了说明怎么解决native code临时写的代码,重写toString时还要区分js引擎生成的函数和自己编写的;到这里一个基本的原型链算是完成,不过除了上述的问题,还要考虑函数参数长度(fun.lenth)、函数调用错误机制、属性隔离、属性循环顺序等问题,这里就不详细讲解了
在这里插入图片描述

二、webEnv下载通道

手机访问:https://pan.quark.cn/s/fe38ba821a2a,保存网盘下载即可。制作维护不易,望各位私下分享时分享网盘链接。搭配SpiderTools谷歌插件教程工具效果更好
在这里插入图片描述

三、wenEnv使用

1.目前该工具基本代码已经搭建完成,工具下载后需要注意的有三个文件jsProxy.js、loadFun.js、utility.js、window>index.js,jsProxy.js主要用于检测环境日志输出、loadFun.js主要用于加载一些函数、window>index.js主要是吐出一些标签元素函数、utility.js是一些工具集成需要特别注意setArrayPrivateProp、envOption
在这里插入图片描述
2.补location对象,不使用该工具补location对象,一般就是搞个json把对应的值赋值就行,使用该工具只需补上href其他属性会根据href属性自动生成
在这里插入图片描述
3.全局对象screen、navigator,可通过setPrivateProp修改属性;目前还有众多全局属性screenX、screenY、outerWidth等,像这些补环境时固定值即可,基本不用修改,如果补做封装,每补一次环境就要重复写这些代码
在这里插入图片描述在这里插入图片描述
4.补标签如:div、script、meta,new对象时一定要传个json为参数,json里面可以放一些需要设置的属性,可以使用getPrivateProp获取属性,如果不需要设置属性则传个空对象,因为new对象时代码内部会默认设置一些属性如:tagName
在这里插入图片描述
5.补标签中的函数如:createElement、appendChild、getElementsByTagName,补这些函数之前需要通过loadFun加载这些函数,某些函数加载后还需要通过setPrivateProp设置,如果不设置,日志中会有提示,如:createElement,主要是为了区分不同对象相同函数的返回值。哪些函数需要通过setPrivateProp设置,看日志输出即可
在这里插入图片描述
6.设置标签对象的createElement
在这里插入图片描述
7.在使用原型补环境时,经常会遇到一个元素通过getElementsByTagName获取了某个标签,然后又给这个标签设置了某些属性,当未补getElementsByTagName时会报错,当补过之后,再遇到其他元素通过getElementsByTagName获取标签,就不会报错,不知道获取后具体做了什么;使用该工具,通过设置loadFun中的值为数组,就可以监听到错误,方便调试,具体哪些可以这样设置可以参考loadFun,里面有注释详细说明
在这里插入图片描述
8.在补环境时,还会遇到一种情况,需要手动调用load事件函数、定时函数等,参考文章:爬虫Incapsula reese84加密案例:Etihad航空,该工具还会收集这些函数,方便后续使用,函数收集时日志中会有提示。其中定时函数获取到的是生成器,可通过loadGenerate加载生成器循环执行,也可访问items属性单独执行,使用生成器执行是为了保证代码执行顺序正确
在这里插入图片描述

四、日志管理

1.引入jsProxy.js代码,通过设置代码对象,在控制台就可以看到带颜色日志,vs code颜色不生效,建议使用pycharm开发者工具,vs code调试太麻烦
在这里插入图片描述
2.日志默认会在当前目录生成getLog.log日志文件
在这里插入图片描述
3.通过envOption.logFileName、envOption.log可配置日志文件名及是否输出日志,配置的时候需要在jsProxy.js引入之前设置,如下图envOption.log设置false后,没有环境日志
在这里插入图片描述
4.通过envOption.debugProxyProp、envOption.debugProxyFunArg调试代码,envOption.debugProxyProp会在debug调试时断点对象获取的属性,envOption.debugProxyFunArg调试时断点函数参数,从下图可以看出使用envOption.debugProxyProp添加id属性,debug调试时在代理对象获取id时已经断点
在这里插入图片描述

五、总结

当前工具已实现核心功能,部分环境支持仍在持续完善中。如遇到未完全支持的环境,开发者可自行补充。提供的代码未经过压缩混淆,便于调试和扩展。若您不愿自行补充,欢迎在评论区留言反馈,我会在完善后更新至下载通道。本工具开发维护不易,恳请各位开发者推荐时使用文章提供的下载通道,避免私自传播。感谢您的理解与支持!!搭配SpiderTools浏览器插件会更好哦!!!


http://www.hkcw.cn/article/hxEKLWJChA.shtml

相关文章

C#进阶-基于.NET Framework 4.x框架实现ASP.NET WebForms项目IP拦截器

在这篇文章中,我们将探讨如何在 ASP.NET WebForms 中实现IP拦截器,以便在 ASMX Web 服务方法 和 HTTP 请求 中根据IP地址进行访问控制。我们将使用自定义的 SoapExtension 和 IHttpModule 来实现这一功能,并根据常用的两种文本传输协议&#…

【前端开发】HTML+CSS+JavaScript前端三剑客的基础知识体系了解

前言 🌟🌟本期讲解关于HTMLCSSJavaScript的基础知识,小编带领大家简单过一遍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 …

Open WebUI项目源码学习记录(从0开始基于纯CPU环境部署一个网页Chat服务)

感谢您点开这篇文章:D,鼠鼠我是一个代码小白,下文是学习开源项目Open WebUI过程中的一点笔记记录,希望能帮助到你~ 本人菜鸟,持续成长,能力不足有疏漏的地方欢迎一起探讨指正,比心心&#xff5e…

C++家庭财务管理 全国信息素养大赛复赛决赛 C++小学/初中组 算法创意实践挑战赛 内部集训模拟题详细解析

C++家庭财务管理 全国信息素养大赛 C++复赛/决赛模拟训练题 博主推荐 所有考级比赛学习相关资料合集【推荐收藏】1、C++专栏 电子学会C++一级历年真题解析

“雪龙2”号今起开放预约 端午假期新体验

“雪龙2”号是我国首艘自主建造的极地科学考察破冰船。6月2日起,“雪龙2”号在海南举办了为期五天的公众开放日活动,这是该船首次抵达海南并面向公众开放,为公众带来了端午假期的新体验。活动期间,公众可以预约参观科考实验室、登船大厅以及飞行平台等多个特色区域,近距离…

太原警方:李某彪被当场控制 酒后驾车冲撞他人

太原市小店警方对一起事件作出回应:6月2日0时许,李某彪酒后与他人发生口角,随后驾车冲撞与其发生争执的人员,导致商家门口部分物品受损,两名在场人员在躲避过程中轻微受伤。民警迅速到达现场并将李某彪控制。目前案件正在进一步办理中。此前有报道称,6月2日凌晨4时许,有…

MySQL学习笔记Day9(事务)

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 举个例子,去银行转账的操作就是一个事务,比如A要…

黑龙江多地现粉色极光 梦幻奇观引关注

6月2日,黑龙江密山、佳木斯等地的网友在社交平台上分享了梦幻般的粉色极光视频。画面中,天空被渲染成粉紫色,宛如飘逸的丝带舞动,美得令人窒息,仿佛置身于童话世界。一位来自佳木斯的视频发布者兴奋地讲述了拍摄经历。他在6月1日晚9时左右来到郊区福胜村江边,支好设备,用…

外卖诗人王计兵回应新职 兼职阅读推广

近日,一则关于“外卖诗人”王计兵新职务的消息引起了网友的关注。据徐州市委宣传部发布的任前公示,王计兵拟任徐州市全民阅读促进会副会长。6月2日,王计兵确认了这一消息,并表示这个新职务是兼职,不会影响他继续做外卖员的工作。他表示自己将主要负责一些阅读推广活动。王…

河北秦皇岛市卢龙县发生2.5级地震 震源深度10公里

据中国地震台网正式测定,6月2日17时35分在河北秦皇岛市卢龙县发生2.5级地震,震源深度10公里,震中位于北纬39.96度,东经118.88度。震中5公里范围内平均海拔约50米。根据中国地震台网速报目录,震中周边200公里内近5年来共发生3级以上地震14次,其中最大一次是2020年7月12日在…

入户调查已开始 今年抽取30万人 反映人口特征与生活质量变化

国家统计局日前发布了《致人口固定样本跟访调查对象的一封信》,决定于2025年在全国范围内开展两次人口固定样本跟访调查。两次调查的标准时点分别为6月1日零时和11月1日零时,调查员将在6月1日至6月25日以及11月16日至12月5日期间入户开展调查工作。今年的人口固定样本跟访调查…

[Redis] Redis命令(2)

初次学习,如有错误还请指正 目录 Set命令 SortedSet类型 Set命令 Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表, 因此具备与HashSet类似的特征: 无序 元素不可重复 查找快…

开发规范1

Restful REST (REpresentational State Transfer),表述性状态转换,它是一种软件架构风格。 传统 Restful Apifox测试工具 介绍:Apifox是一款集成了Api文档、Api调试、ApiMock、Api测试的一体化协作平台。 作用:接口文档管理、接口请求测试、Mock服务。…

2.RV1126-OPENCV Mat理解和AT函数

一.Mat概念 Mat 是整个图像存储的核心也是所有图像处理的最基础的类,Mat 主要存储图像的矩阵类型,包括向量、矩阵、灰度或者彩色图像等等。Mat由两部分组成:矩阵头,矩阵数据。矩阵头是存储图像的长度、宽度、色彩信息等头部信息&a…

梅州村民鸡舍惊现50斤重蟒蛇 警民联手成功捕获

6月1日早上6时30分,正当小朋友们开始庆祝儿童节的时候,五华县公安局丁畲派出所的值班电话突然响起。村民温先生求助称家中鸡舍出现一条大蛇,导致鸡鹅四散奔逃。接到报警后,丁畲派出所的民辅警迅速赶往现场,并联系了专业的捕蛇师傅一同前往。到达现场后,他们发现大蛇蜷缩在…

【笔记】基于 MSYS2(MINGW64)的 Poetry 虚拟环境创建指南

#工作记录 基于 MSYS2(MINGW64)的 Poetry 虚拟环境创建指南 一、背景说明 在基于 MSYS2(MINGW64)的环境中,使用 Poetry 创建虚拟环境是一种高效且灵活的方式来管理 Python 项目依赖。本指南将详细介绍如何在 PyChar…

波兰新总统是谁 纳夫罗茨基胜选引发关注

根据波兰国家选举委员会网站当地时间6月2日公布的统计结果,独立候选人卡罗尔纳夫罗茨基赢得了波兰总统选举,他获得了50.89%的选票,与得票率为49.11%的公民联盟候选人、华沙市长拉法尔恰斯科夫斯基展开了激烈竞争。自两周前的首轮投票后,波兰国内的选情持续胶着,反映出这个…

给散装江苏发明省内足球联赛简直天才 比赛第一,友谊第十四!

“友谊第一,比赛第二”这句口号在一场足球比赛中被戏谑地改成了“友谊第一,比赛第十四”,随后又变成了“比赛第一,友谊第十四”。这种幽默的表达方式让江苏省首届城市足球联赛迅速走红。这个被称为“苏超”的足球联赛吸引了大量观众。盐城的一场比赛有22613名观众到场,现场…

奇瑞集团前五月累销突破100万辆 销量创历史新高

奇瑞集团宣布,今年1月至5月累计销售汽车1,026,517辆,同比增长14%,创下历史最快销售速度。其中,新能源汽车销量达到287,798辆,同比增长111.5%;出口量为443,940辆,继续保持中国车企出口第一的位置。5月份,奇瑞集团共销售汽车205,732辆,同比增长9.1%。奇瑞汽车股份有限公…

江苏十三太保把足球踢出圈 热梗频出带火赛事

近日,一场名为“苏超”的足球盛事在江苏火了起来。这场赛事没有假球,只有激烈的竞争,口号是“比赛第一,友谊第十四”。这一系列的热梗不仅带火了足球赛事,也让江苏13个地市的文化旅游产业备受关注。“苏超”全称为“江苏省城市足球联赛”,由江苏省体育局与各设区市政府联…