爬虫(三)突破JWT认证二

书接爬虫(三)突破JWT认证

一、新发现

	1、服务端会实时更新token
	2、客户端(浏览器)存在保存token失败的场景

二、新方案

1.1 、监听生成token的接口,拿到实时返回的token,更新缓存
    /**
    * 监听页面响应,更新token
    */
    async update_token_by_monitor() {
        this.page.on("response", async (response) => {
            if (response.request().method() === 'GET' &&
                response.url().includes("/0twuHEQjqgQQ")) {
                response.text().then((body) => {
                    console.log(body)
                    try {
                        var real_time_token = JSON.parse(body)["data"];
                    } catch (error) { console.log("waring:" + error.message) }
                    // 非常规格式兼容处理确保取最新token
                    let pattern = /\{(.*?)\}/;
                    var real_time_token = JSON.parse(pattern.exec(body)[0])["data"];
                    if (real_time_token) {
                        cookies_array.at(2)["dunm_data"] = real_time_token
                        console.log("------缓存token更新完成------")

                    }
                })
            }
        });
    }

1.2、出现页面空白的情况,加载页面触发更新token的操作,再手动塞进token
    /**
     * 补偿唤醒
     */
    async retry_awaken() {
        for (var i = 0; i < 2; i++) {
            console.log("------执行重试唤醒机制------");
            console.log("------第%d次尝试唤醒页面------", i + 1);
            // 触发更新token操作
            await this.page.reload({ waitUntil: 'networkidle0' });
            // 添加token
            await this.page.evaluate((key, value) => {
                localStorage.setItem(key, value);
            }, "dunm_data", cookies_array.at(2)["dunm_data"]);
            await this.page.reload({ waitUntil: 'networkidle0' });
            if (await this.page.$(cfg.top_navigtor_locator)) {
                console.log("------第%d次唤醒成功------", i + 1);
                break
            }
            else {
                console.log("第%d次唤醒失败", i + 1)
                continue
            }
        }
        if (i == 2) {
            throw new Error("多次唤醒页面失败")
        }
    }
  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值