当前位置: 首页 > news >正文

码上爬第十八题【协程+webpack】

  1. 第一步:开门见山,如图所示:
    在这里插入图片描述
  2. 断点调试,分析代码,定位加密位置,如图所示:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  3. 第三步:全扣webpack,全局化加载器导入模块处,外部调用即可,如图所示:
    在这里插入图片描述
  4. 第四步:全扣难免要补环境的,代码如下:

js代码

window = global;
delete global;
window.outerHeight = 1067;
window.HTMLElement = function (ele){console.log('HTMLElement:::', ele)
}
document = {addEventListener: function (ele){console.log(ele)},visibilityState: 'visible',createElement: function (ele){console.log('createElement:::', ele)},getElementById: function (ele){console.log('getElementById:::', ele)},referrer: 'https://www.mashangpa.com/',cookie: '_nano_fp=Xpmyn0mJlp9an0TJlT_HGuTzlWAsbBrvgDFr0Id7; Hm_lvt_0d2227abf9548feda3b9cb6fddee26c0=1754743882,1754788130,1754789668,1754791984; HMACCOUNT=6D71F8525EDFF963; Hm_lpvt_0d2227abf9548feda3b9cb6fddee26c0=1754800093'
};
window.screen = {availWidth: 1707
};
history = {back: function (){}
};
location = {href: 'https://www.mashangpa.com/problem-detail/18/',port: ''
};
Element = {};
Element.prototype = {attachShadow: function (){}
};
localStorage = {getItem: function (ele){console.log('getItem:::', ele)}
}// 此处省略webpack打包的代码function get_sign(){var ts = new Date()["getTime"]()var m = window.encrypt_m(4)({'serverTime': ts})["messagePack"]() + btoa('luoge' + ts)timestamp = ts;return {'m': m,'timestamp': timestamp}
}
console.log(get_sign())

py代码

import asyncio, aiohttp, execjsclass AsyncSpider(object):def __init__(self):self.url = 'https://www.mashangpa.com/api/problem-detail/18/data/'self.headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36',}self.cookies = {'sessionid':'7iz4z3zugx9xbdrm2ykqpfaoswvf7a3o',}self.semaphore = asyncio.Semaphore(3)with open('2.js', 'r', encoding='utf-8') as f:self.js_code = execjs.compile(f.read())async def fetch_page(self, session, page):async with self.semaphore:params = {'page': page,}m_t = self.js_code.call('get_sign')self.headers['M'] = m_t['m']self.headers['Timestamp'] = str(m_t['timestamp'])async with session.get(self.url, headers=self.headers, cookies=self.cookies, params=params) as res:data = await res.json()return data.get('current_array', [])async def parse_all_pages(self):total_sum = 0async with aiohttp.ClientSession() as session:tasks = [self.fetch_page(session, page) for page in range(1, 21)]results = await asyncio.gather(*tasks)for array in results:if array:total_sum += sum(array)print(total_sum)if __name__ == '__main__':spider = AsyncSpider()asyncio.run(spider.parse_all_pages())
http://www.lryc.cn/news/624407.html

相关文章:

  • IDE开发系列(1)基于QT的简易IDE框架设计
  • Qt第十讲-使用快捷键
  • 面试问题详解三:Qt 的信号与槽连接、编译机制流程
  • 宋红康 JVM 笔记 Day05|运行时数据区内部结构、JVM中的线程说明、程序计数器
  • AR技术为消防救援装上“智能透视眼”
  • 【iOS】锁的原理
  • WPF中BindingList<T>和List<T>
  • C++ 指针与 C 语言指针的深度比较
  • MATLAB的实用字母识别系统实现含GUI界面
  • Image and Video Tokenization with Binary Spherical Quantization 论文阅读
  • 华为GaussDB的前世今生:国产数据库崛起之路
  • Java面试宝典:Redis高级特性和应用(发布 订阅、Stream)
  • 【Java基础常见辨析】重载与重写,深拷贝与浅拷贝,抽象类与普通类
  • 15.web api 6
  • 个人笔记SpringMVC
  • Klipper-delta_calibrate模块
  • Read View 在 MVCC 里如何工作的?
  • 《C++异常处理完全指南》
  • 如何在 Ubuntu 24.04 或 22.04 LTS 上安装 PowerShell
  • Spring Boot 实用小技巧:多级缓存(Caffeine + Redis)- 第545篇
  • 【网络安全实验报告】实验四: PGP邮件加密软件应用
  • C++STL之list详解
  • 【Linux指南】gcc/g++编译器:从源码到可执行文件的全流程解析
  • 8.18 机器学习-决策树(1)
  • goland怎么取消自动删除未使用的包
  • SWMM排水管网水力、水质建模及在海绵与水环境中的应用技术-模拟降雨和污染物质经过地面、排水管网、蓄水和处理
  • 【前端面试题】JavaScript 核心知识点解析(第一题到第三十题)
  • 2025 世界机器人大会启示录:机构学 × AI × 视频链路的融合之路
  • 从零开始部署经典开源项目管理系统最新版redmine6-Linux Debian12
  • 粉刷房子(简单多状态dp问题)