es6 生成器函数

本文通过一个具体的Generator函数示例,展示了如何使用yield关键字来创建和调用生成器。通过两个next()方法的调用,分别执行了Generator内部定义的两个函数,并详细解释了其执行流程。
function * testA(){
    yield function (){
        alert(1);
    }
    yield function (){
        alert(2);
    }
}
const a = testA();
a.next().value();//调用第一个 函数
a.next().value();//调用第二个 函数

 

记录一下,我也不懂

### a_bogus 机制简介 的 `a_bogus` 是一种用于防止爬虫的请求签名机制。它通常与 `msToken` 一起使用,通过动态生成的算法对请求参数进行签名,以确保请求的合法性。这种机制的复杂性在于其生成算法是闭源的,并且可能频繁更新,使得逆向工程和模拟生成变得困难[^1]。 ### a_bogus 的生成与逆向思路 在逆向过程中,`a_bogus` 的生成通常涉及对浏览器环境的模拟,包括但不限于 `XMLHttpRequest`、`window` 对象的某些属性以及鼠标事件的触发。通过检测浏览器环境的真实性来判断请求是否合法。如果缺少某些关键的用户行为(如鼠标移动),即使签名正确,服务器也可能返回空数据或错误响应[^1]。 为了生成有效的 `a_bogus`,通常需要以下步骤: 1. **获取生成 a_bogus 的 JavaScript 代码**:通常从的前端资源中提取相关代码,尤其是 `bdms.js` 这类文件。 2. **全浏览器环境**:由于 `a_bogus` 的生成依赖于浏览器环境,必须在 Node.js 中模拟浏览器行为,包括 `window`、`document`、`navigator` 等对象。 3. **触发用户行为事件**:如鼠标移动、点击等,否则生成的 `a_bogus` 可能无效。 4. **导出签名值**:通过 Hook 或重写 `XMLHttpRequest` 的 `open` 和 `send` 方法,捕获 `a_bogus` 的生成过程并导出。 ### Node.js 环境示例 以下是一个简单的 Node.js 环境全示例,用于模拟浏览器行为并生成 `a_bogus`: ```javascript const { JSDOM } = require("jsdom"); const fs = require("fs"); const path = require("path"); // 创建虚拟 DOM 环境 const dom = new JSDOM(`<!DOCTYPE html><html><body></body></html>`); const window = dom.window; // 模拟 mousemove 事件 window.addEventListener("mousemove", () => { // 模拟用户行为 console.log("Mouse moved"); }); // 模拟 XMLHttpRequest window.XMLHttpRequest = function () { return { open: function (method, url) { console.log("XHR open:", method, url); }, send: function () { console.log("XHR send"); }, }; }; // 模拟 navigator 对象 window.navigator = { userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64)", }; // 加载的 bdms.js 文件 const bdmsScript = fs.readFileSync(path.resolve(__dirname, "bdms.js"), "utf-8"); eval(bdmsScript); // 调用初始化函数 window.bdms.init(); // 模拟鼠标移动事件,确保生成有效签名 window.dispatchEvent(new dom.window.Event("mousemove")); // 导出 a_bogus console.log("Generated a_bogus:", window.a_bogus); ``` ### 常见难点与解决方案 - **环境检测**:会对浏览器环境进行检测,必须模拟完整的 `window` 和 `document` 对象。 - **用户行为模拟**:必须触发至少一次鼠标事件(如 `mousemove`),否则生成的签名无效。 - **动态加载依赖**:部分依赖可能在运行时动态加载,需要通过 `eval` 或 `Function` 构造函数注入。 - **反调试机制**:可能使用了反调试技术,如检测调试器、控制台等,需通过 Hook 和重写相关函数绕过。 ### 工具与服务推荐 目前市面上有一些工具和服务可以帮助生成 `a_bogus`: 1. **Node.js + JSDOM**:适用于本地开发环境,能够模拟完整的浏览器行为。 2. **Puppeteer**:无头浏览器,能够真实模拟用户行为,适合复杂环境。 3. **浏览器插件**:如 Tampermonkey,可用于 Hook 和调试生成 `a_bogus` 的函数。 4. **第三方服务**:一些爬虫平台提供 `a_bogus` 生成服务,但需注意合规性和数据安全问题。 ### 注意事项 - **合规性**:生成和使用 `a_bogus` 可能违反的服务条款,建议仅用于合法授权的测试和研究。 - **动态更新**:的反爬机制会不断更新,需持续关注其变化并调整逆向策略。 - **性能优化**:生成 `a_bogus` 的过程可能较为耗时,建议通过缓存或异步处理优化性能。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值