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

11-py调用js

上一文我们写出了js代码来加密数据作为参数,当我们写爬虫时需要加密过的参数作为登陆凭证来get数据,那我们怎么调用js呢

execjs库

首先我们需要在py中创建一共js可以运行的环境,需要用到的库是——execjs库,安装命令:
pip install PyExecJS

然后可以通过execjs.compile(js代码)来初始化,将JavaScript 代码编译为一个可执行的对象:

然后用初始化对象.call(js核心代码函数名,[param1, param2]),这就是为什么我要把js核心代码封装成函数:

result_func_js = js_exec.call('func_in_js', ['param1', 'param2'])  # 伪代码

我们可以将读取js代码 -> 初始化 -> 调用js函数封装成类:

import execjs
import os
class JSExecutor:def __init__(self, js_file_path):if not os.path.exists(js_file_path):print(f'js代码不存在:{js_file_path}')with open(js_file_path, 'r', encoding='utf-8') as f:self.js_code = f.read()# execjs.compile() 将JavaScript 代码编译为一个可执行的对象self.js_code = execjs.compile(self.js_code)def call(self, func_name, *args):"""封装python对js代码中函数的调用:param func_name: js代码中的函数名:param args: js代码中函数所需的参数:return: js中函数运行后的结果"""return self.js_code.call(func_name, *args)if __name__ == '__main__':# 加载js文件js_exec = JSExecutor('js路径.js')# 调用js中函数result_func_js = js_exec.call('func_in_js', ['param1', 'param2'])print("js代码运行结果为:", result_func_js)

直接套公式就行✌

实操

就上一文来练习一下:

这部分基本就不变,直接套,然后写上程序主入口,并实例化对象:

然后调用call函数:

函数名

参数

都拿来写进call,这里的参数其中有一个数字是翻页的,最后可以写成:

然后运行一下看看:

ok了,然后将参数传入基础爬虫程序的参数中就行了:

# 导入模块
import os
import execjs
import requestsdef basic_crawler(analysis, page_num):cookies = {'qm_check': 'A1sdRUIQChtxen8pI0dAMRcOUFseEHBeQF0JTjVBWCwycRd1QlhAXFEGFUdASAFKBQcCcQ4IdhFFIg4aHRoOBnMDARlGR2dQOVdICAolAGgCHBl0B3xUV05KVFsZXVJRWxsKFghJVktYVElWBRVP','gr_user_id': 'fee2a18e-547e-4f09-bb2c-ba5e70220909','ada35577182650f1_gr_last_sent_cs1': 'qm25907020073','aso_ucenter': '3d0d2W%2BfI6%2B1HX2yQkg6QQEsznzgRx7XqxjaF3up3gE4OiP%2F417biqUIrOf8AxDxFc4','AUTHKEY': 'DfhcbIEyq81vUXS9sjPzP32JxOFnkWtkytMBxOJckgGjB2Iby1hG4iO67%2BdIedY2cy2%2B%2BEGadg3CZcAHxt1%2Bl9vsrc3XvkqRGWZ3Mv3I8wOtlVG9asekiw%3D%3D','USERINFO': 'cF38Ql5tf5WyrzzJzTHoEAdBQsBUYghkPKsyg%2FG2MyZFMnkjG7Hf%2FCLJc%2BBYDyU6CrW3Ww5mkXc0dttShLPibhAS5nWMAhH3Eot4ugMWsW%2B2nMvSljNE8y0uLtw0kS0gyXEooeMIj6T%2F3oMHiA4Zhw%3D%3D','PHPSESSID': 'j911j9ova533i9ehmgqg663vtv','ada35577182650f1_gr_session_id': 'd338e6a4-41f4-4da4-b325-b76ee9cb8fde','ada35577182650f1_gr_last_sent_sid_with_cs1': 'd338e6a4-41f4-4da4-b325-b76ee9cb8fde','ada35577182650f1_gr_session_id_sent_vst': 'd338e6a4-41f4-4da4-b325-b76ee9cb8fde','synct': '1759332116.003','syncd': '468','ada35577182650f1_gr_cs1': 'qm25907020073',}headers = {'Accept': 'application/json, text/plain, */*','Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6','Cache-Control': 'no-cache','Connection': 'keep-alive','Origin': 'https://www.qimai.cn','Pragma': 'no-cache','Sec-Fetch-Dest': 'empty','Sec-Fetch-Mode': 'cors','Sec-Fetch-Site': 'same-site','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0','sec-ch-ua': '"Chromium";v="140", "Not=A?Brand";v="24", "Microsoft Edge";v="140"','sec-ch-ua-mobile': '?0','sec-ch-ua-platform': '"Windows"',# 'Cookie': 'qm_check=A1sdRUIQChtxen8pI0dAMRcOUFseEHBeQF0JTjVBWCwycRd1QlhAXFEGFUdASAFKBQcCcQ4IdhFFIg4aHRoOBnMDARlGR2dQOVdICAolAGgCHBl0B3xUV05KVFsZXVJRWxsKFghJVktYVElWBRVP; gr_user_id=fee2a18e-547e-4f09-bb2c-ba5e70220909; ada35577182650f1_gr_last_sent_cs1=qm25907020073; aso_ucenter=3d0d2W%2BfI6%2B1HX2yQkg6QQEsznzgRx7XqxjaF3up3gE4OiP%2F417biqUIrOf8AxDxFc4; AUTHKEY=DfhcbIEyq81vUXS9sjPzP32JxOFnkWtkytMBxOJckgGjB2Iby1hG4iO67%2BdIedY2cy2%2B%2BEGadg3CZcAHxt1%2Bl9vsrc3XvkqRGWZ3Mv3I8wOtlVG9asekiw%3D%3D; USERINFO=cF38Ql5tf5WyrzzJzTHoEAdBQsBUYghkPKsyg%2FG2MyZFMnkjG7Hf%2FCLJc%2BBYDyU6CrW3Ww5mkXc0dttShLPibhAS5nWMAhH3Eot4ugMWsW%2B2nMvSljNE8y0uLtw0kS0gyXEooeMIj6T%2F3oMHiA4Zhw%3D%3D; PHPSESSID=j911j9ova533i9ehmgqg663vtv; ada35577182650f1_gr_session_id=d338e6a4-41f4-4da4-b325-b76ee9cb8fde; ada35577182650f1_gr_last_sent_sid_with_cs1=d338e6a4-41f4-4da4-b325-b76ee9cb8fde; ada35577182650f1_gr_session_id_sent_vst=d338e6a4-41f4-4da4-b325-b76ee9cb8fde; synct=1759332116.003; syncd=468; ada35577182650f1_gr_cs1=qm25907020073',}params = {'analysis': analysis,'status': '3','date': '2025-10-01','sdate': '2025-10-01','edate': '2025-10-01','country': 'cn','genre': '36','option': '4','page': f'{page_num}',}response = requests.get('https://api.qimai.cn/rank/offline', params=params, cookies=cookies, headers=headers)print(response.text)# 写一个调用js代码的类
class JSExecutor:def __init__(self, js_file_path):if not os.path.exists(js_file_path):print('js文件不存在或者路径出错')with open(js_file_path, 'r', encoding='utf-8') as f:self.js_code = f.read()self.js_code = execjs.compile(self.js_code)def call(self, func_name, *args):return self.js_code.call(func_name, *args)if __name__ == '__main__':# 实例化对象(直接运行__init__函数,等于说js代码也编译完了)js_executor = JSExecutor('10-七麦数据js扣代码.js')# 调用call方法for page in range(5):result = js_executor.call('main', f'2025-10-012025-10-012025-10-01{page}336allcn')print(f'第{page}页加密参数为{result}')basic_crawler(result, page)

直接运行即可

小结

此文章只做技术交流,各位若发现文章有问题请及时提出,讨论交流,一起进步,加油加油
http://www.dtcms.com/a/470175.html

相关文章:

  • 分析竞争对手网站公司网站建设怎么
  • 2.Xshell效率实战:SSH管理秘籍的技术
  • 长春网站建设长春建设一个视频网站需要什么
  • 网站建设的设计方案平度市网站建设
  • Salesforce项目老掉坑?这8个思维陷阱千万别踩
  • 从递归到迭代的全方位解析——力扣38.外观数列(Count and Say)
  • 深度学习(DL)概念及实例操作
  • 基于单片机的四点位水位控制与报警系统设计
  • 如何将Python脚本输出(含错误)全量保存到日志文件?实战指南
  • 3d网页游戏排行做360手机网站优化
  • Unreal Engine 中的旋转表示:FQuat 与 FRotator 全面解析
  • 设计模式-解释器模式
  • 望牛墩镇仿做网站泰州建设网站
  • 网站建设与网页制作基础入门教程祥云平台官方网站
  • Unreal Engine C++ 开发核心:USceneComponent 常用方法详解
  • 陪诊陪护小程序前端功能解析:就医照料的便捷对接与全流程保障
  • 在线PhotoShop网页版常用快捷键和实用技巧
  • 湖南建设网站公司h5四合一网站建设
  • (一)黑马React(项目初始化/字体和样式/列表循环/高亮排序/自定义hooks/异步RTK)
  • 酒泉网站建设有限公司自己怎样做公司广告视频网站
  • 基于Python的旅游数据可视化系统的分析与设计-计算机毕设 97740
  • PHP MySQL 使用 ORDER BY 排序查询
  • QT中加载PSQL驱动
  • 杭电 神经网络与深度学习 学习笔记
  • 网站建设合优企业做国外网站多少钱
  • 网站建设 主要学是么服装详情页设计
  • 自适应编码调制简介
  • MySQL实战篇05:MySQL主从复制Docker实战(上)——1主2从集群搭建与问题解决
  • 金融网站建设方案ppt模板重庆建设厅官网
  • 从源码优化外卖配送系统:算法调度、智能推荐与数据分析应用