目錄:
  1. 补环境框架:sdenv版本更新v1.0.0
    1. 1. sdenv-jsdom同步jsdom更新到v27
      1. 2. Api调用方式调整
        1. 3. chrome拟真进一步完善
          1. 4. 完善docker支持

          补环境框架:sdenv版本更新v1.0.0

          閱讀時間:全文 580 字,預估用時 3 分鐘
          創作日期:2025-10-29
          文章標籤:
           
          BEGIN

          sdenv介绍: 基于jsdom和瑞数vmp开发的补环境框架,模拟浏览器执行网页代码。 对瑞数vmp原理感兴趣的可以参考作者另一个开源项目:rs-reverse(见github仓库)

          https://github.com/pysunday/sdenv 🔗

          此处版本更新,代码不向下兼容,sdenv版本为v1.0.0对应sdenv-extend版本为v1.7.0、sdenv-jsdom版本为v2.0.1,更新改动如下:

          1. sdenv-jsdom同步jsdom更新到v27;
          2. Api调用方式调整;
          3. chrome拟真进一步完善;
          4. 完善docker支持。

          1. sdenv-jsdom同步jsdom更新到v27

          sdenv之前使用的版本是v24,对jsdom的具体更新内容感兴趣的可以移步jsdom的changelog,作者没有细看,不过此处版本更新jsdom做了部分重构以支持ESM,而sdenv是通过CommonJS方式使用包的,因此既要兼容CommonJS又要支持ESM就需要Node的支持,Node对ESM的支持在v20.17以前都是有问题的,因此如果使用sdenv的v1.0.0版本请更新Node版本,如作者用的版本是v20.19.5。

          2. Api调用方式调整

          sdenv v1.0.0之前的版本使用jsdomFromUrl和jsdomFromText需要先预定义再通过执行返回的回调拿到jsdom的实例,v1.0.0版本之后可直接通过执行jsdomFromUrl和jsdomFromText拿到实例,且补的环境会在内部自动注入,如:

          const { jsdomFromUrl } = require('sdenv');
          ...
          const dom = await jsdomFromUrl('https://host/path');
          const { window, cookieJar, sdenv } = dom;
          ...

          3. chrome拟真进一步完善

          通过该部分完善拟真,以适配瑞数的环境检测,如:window.createImageBitmap、window.find、window.matchMedia、window.moveBy、window.moveTo、window.postMessage、window.resizeBy、window.resizeTo、window.alert、window.cancelAnimationFrame等,检测点一般有如下几处:

          1. name值检测;
          2. length值检测;
          3. toString执行结果检测;
          4. 实例化对象的原型检测等。

          4. 完善docker支持

          docker镜像存储调整为阿里云容器镜像存储,还没同步到docker官方仓库,最近梯子不稳定,等稳定后再同步。增加use-docker样例文件,通过传入目标网站参数可以查看sdenv是否支持目标网站,调用示例:

          docker run --rm pysunday/sdenv-arm64:latest ./example/use-docker/index.js 目标网站地址

          因此如果不确定是否使用sdenv作为你的首选,可以先执行该命令测试下,如果项目中报错不确定是否是sdenv的问题,也可以先执行use-docker样例,看是否正常出结果。

          调用示例:

          执行结果

          FINISH

          隨機文章
          人生倒計時
          default