PythonJS逆向解密——实现翻译软件+语音播报
前言
嗨喽,大家好呀~这里是爱看美女的茜茜呐
环境使用:
-
python 3.8
-
pycharm
模块使用:
-
requests --> pip install requests
-
execjs --> pip install PyExecJS
-
ttkbootstrap --> pip install ttkbootstrap
-
pyttsx3 --> pip install pyttsx3
第三方模块安装:
-
win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车
-
在pycharm中点击Terminal(终端) 输入安装命令
(如果你觉得安装速度比较慢, 你可以切换国内镜像源)
👇 👇 👇 更多精彩机密、教程,尽在下方,赶紧点击了解吧~
素材、视频教程、完整代码、插件安装教程我都准备好了,直接在文末名片自取就可
本次案例分为两个部分:
一. 实现翻译功能 <爬虫技术>
二. 实现软件界面 <GUI界面开发>
一. 实现翻译功能 <爬虫技术>
-
如果有翻译接口 --> 抓包分析
抓包分析 通过开发者工具 <浏览器自带>
- 翻译接口: https://fanyi.baidu.com/v2transapi?from=zh&to=en
-
通过对比:
sign --> 参数是改变的
< js代码生成 >
-
通过开发者工具 分析 --> JS代码那块生成出来 <扣代码>
运行扣下来的js代码
-
通过python代码执行js代码, 获取sign值
基本步骤:
-
发送请求, 模拟浏览器对于url地址发送请求
-
获取数据, 获取服务器返回响应数据
-
解析数据, 提取我们需要的数据内容
代码展示
一. 获取翻译接口
网址: https://fanyi.baidu.com/?aldtype=16047#en/zh/Welcome%20to%20Qingdeng%20Education
通过开发者工具直接进行抓包分析, 找到对应的翻译数据包
Post请求, 需要提交data参数:
主要改变的参数:
-
sign
这个参数是有加密的, 每个翻译的内容对应一个sign值
-
ts
这是时间戳, 也就是请求当前接口的时间节点
加密参数获取 <通过JS代码生成的>
找到生成参数的JS代码, 然后扣代码就好了, 缺什么补什么
# 数据请求模块
import requests
import execjs
import ttkbootstrap as ttk
import time
import pyttsx3
import json
import hashlibdef sign(word):# 读取JS代码文件with open('jiemi.js', encoding='utf-8') as f:text = f.read()# 编译一下js文本内容js_code = execjs.compile(text)# 调用js代码函数result = js_code.call('baidu', word) # 调用函数名 字符串return resultdef search(word):result = sign(word)"""1. 发送请求, 模拟浏览器对于url地址发送请求"""# 模拟浏览器 --> headers请求头, 字典数据headers = {'Cookie': 'BAIDUID=7E8AD9B6DCD3A4DA0A60D3EB8FFB9C71:FG=1; BAIDUID_BFESS=7E8AD9B6DCD3A4DA0A60D3EB8FFB9C71:FG=1; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1692365550; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1692365550; REALTIME_TRANS_SWITCH=1; FANYI_WORD_SWITCH=1; HISTORY_SWITCH=1; SOUND_SPD_SWITCH=1; SOUND_PREFER_SWITCH=1; ab_sr=1.0.1_ZTI2YmY3OTk2MTQ4Nzk1YjY5MDBlYWVhZTk4ODA2NGJlMWZlMTNkYjNjZTRlNTI3MTc5ZWM3N2RkOGI1MzJiM2M1NDNhNmFlY2RjOTk2MzUxNjM4Y2E1ZTRjZmQyM2JkY2JiYzIxZTU0ZjA5MTM3MDU1YzBiYmNlNDg3ZmQxNjM1MjU4ZmE3OGU5MDRkYjA3N2I4ZWI4YzI2NTY1OThkZg==','Host': 'fanyi.baidu.com','Origin': 'https://fanyi.baidu.com','Referer': 'https://fanyi.baidu.com/?fr=pcPinzhuan','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36',}# 请求链接url = 'https://fanyi.baidu.com/v2transapi?from=zh&to=en'# 请求参数data = {'from': 'zh','to': 'en','query': word,'transtype': 'realtime','simple_means_flag': '3','sign': result,'token': '533f57ec8e908ecfc6c003868d8c9518','domain': 'common','ts': int(time.time() * 1000),}try:# 发送请求response = requests.post(url=url, data=data, headers=headers)"""2. 获取数据, 获取服务器返回响应数据3. 解析数据, 提取我们需要的数据内容"""json_data = response.json()print(json_data)trans_result = json_data['trans_result']['data'][0]['dst']return trans_resultexcept:pass
二. 软件界面开发
GUI界面没有什么特别的, 就是一些方法的使用
def show():engine = pyttsx3.init()word = input_va.get()trans_result = search(word)text.delete('0.0', 'end')text.insert('insert', trans_result)engine.say(word+trans_result)engine.runAndWait()root = ttk.Window(title="翻译软件",themename="litera",size=(400, 200),
)
root.place_window_center()
root.resizable(False, False)frame = ttk.Frame()
frame.pack(pady=10)
input_va = ttk.StringVar()
ttk.Label(frame, text='请输入翻译内容:', font=('微软雅黑', 12)).pack(side=ttk.LEFT)
ttk.Entry(frame, textvariable=input_va).pack(side=ttk.LEFT, padx=5)
ttk.Button(frame, text='搜索', command=show).pack(side=ttk.LEFT)text_frame = ttk.Frame()
text_frame.pack()
text = ttk.Text(text_frame)
text.pack()root.mainloop()
尾语
感谢你观看我的文章呐~本次航班到这里就结束啦 🛬
希望本篇文章有对你带来帮助 🎉,有学习到一点知识~
躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。
相关文章:
PythonJS逆向解密——实现翻译软件+语音播报
前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 环境使用: python 3.8 pycharm 模块使用: requests --> pip install requests execjs --> pip install PyExecJS ttkbootstrap --> pip install ttkbootstrap pyttsx3 --> pip install pyttsx3 第三…...
gPRC与SpringBoot整合教程
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
Hadoop Yarn 配置多队列的容量调度器
文章目录 配置多队列的容量调度器多队列查看 配置多队列的容量调度器 首先,我们进入 Hadoop 的配置文件目录中($HADOOP_HOME/etc/hadoop); 然后通过编辑容量调度器配置文件 capacity-scheduler.xml 来配置多队列的形式。 默认只…...
c语言练习题28:杨氏矩阵
杨氏矩阵 从左到右增加 从上到下增加 思路: 代码: #include<stdio.h> int findNum(int(*arr)[3], int x, int y, int k) {int i 0;int j y - 1;while (i<x&&j>0) {if (arr[i][j] > k) {j--;}else if (arr[i][j] < k) {i;…...
梳理系统学习R语言1-R语言实战-使用ggplot进行高阶绘图
以下为书中代码,会添加一些理解 library("ggplot2") ggplot(datamtcars,aes(xwt,ympg))geom_point()geom_point(pch17,color"blue",size2)geom_smooth(method"lm",color"red",linetype2)labs(title"Automobile Data&…...
测试框架pytest教程(2)-用例依赖库-pytest-dependency
对于 pytest 的用例依赖管理,可以使用 pytest-dependency 插件。该插件提供了更多的依赖管理功能,使你能够更灵活地定义和控制测试用例之间的依赖关系。 Using pytest-dependency — pytest-dependency 0.5.1 documentation 安装 pytest-dependency 插…...
electron软件安装时,默认选择为全部用户安装
后续可能会用electron开发一些工具,包括不限于快速生成个人小程序、开发辅助学习的交互式软件、帮助运维同学一键部署的简易版CICD工具等等。 开发进度,取决于我懒惰的程度。 不过不嫌弃的同学还是可以先关注一波小程序,真的发布工具了&…...
MySQL常用表级操作
基础信息相关 1.修改表名: rename table 旧表名 to 新表名; 2、修改字段类型: alter table 表名 modify column 字段名 字段类型(长度) 3、修改字段名称和类型: alter table 表名 change 现有字段名称 修改后字段名称 数据类型 4、增加字段&a…...
Golang Gorm 一对多关系 关系表创建
一对多关系 我们先从一对多开始多表关系的学习因为一对多的关系生活中到处都是,例如: 老板与员工女神和添狗老师和学生班级与学生用户与文章 在创建的时候先将没有依赖的创建。表名称ID就是外键。外键要和关联的外键的数据类型要保持一致。 package ma…...
java八股文面试[数据结构]——ConcurrentHashMap原理
HashMap不是线程安全: 在并发环境下,可能会形成环状链表(扩容时可能造成,具体原因自行百度google或查看源码分析),导致get操作时,cpu空转,所以,在并发环境中使用HashMap是…...
学习记录——FeatEnHancer
FeatEnHancer: Enhancing Hierarchical Features for Object Detection and Beyond Under Low-Light Vision 一种适用于任意低光照任务增强方法 ICCV 2023 提出了FeatEnHancer,一种用于低光照视觉任务的增强型多尺度层次特征的新方法。提议的解决方案重点增强相关特…...
OpenCV中常用的函数
OpenCV是一个功能强大的计算机视觉库,提供了众多用于图像处理、计算机视觉和机器学习的函数和模块。以下是一些OpenCV中常用的函数和模块的子集: 图像读取和显示: cv::imread:用于读取图像文件。cv::imshow:用于显示图…...
【福利】Google Cloud Next ’23 精彩待发,Cloud Ace 作为联合赞助商提前发福利~
【Cloud Ace 是 Google Cloud 全球战略合作伙伴,在亚太地区、欧洲、南北美洲和非洲拥有二十多个办公室。Cloud Ace 在谷歌专业领域认证及专业知识目前排名全球第一位,并连续多次获得 Google Cloud 各类奖项。作为谷歌云托管服务商,我们提供谷…...
vue-admin-template实现按钮级控制
这里记录一下使用大佬的模板vue-admin-template,实现按钮级别控制 实现的思路:用户登录之后,返回用户详细信息(将用户的所有权限码发送给前端),然后将权限码保存在全局状态管理对象中,然后在组件中进行判断是否显示 最…...
数据驱动工作效率提升的5个层次—以PreMaint设备数字化平台为例
在现代工业领域,数据分析已成为提升工作效率和优化生产的不可或缺的工具。从描述性分析到规范性分析,数据分析逐步揭示了设备运行和维护的深层信息,帮助企业更明智地做出决策。本文将以PreMaint设备数字化平台为例,探讨工业数据驱…...
白介素对NK细胞功能的影响(IL-1β、IL-12、IL-15、IL-18、IL-21)
1、促进NK细胞扩增和活化:IL-2/21 Soiffer RJ等自1996年起即报道IL-2低剂量持续输注和间歇给药对转移癌患者的CD56NK细胞有明显扩增效果。大部分NK细胞表面具有IL-2中亲和性受体,IL-2诱导NK的杀伤活性约需18~24小时。此外,IL-2还…...
C++笔记之虚函数重写规则、返回类型协变、函数的隐藏
C笔记之虚函数重写规则、返回类型协变、函数的隐藏 code review! 文章目录 C笔记之虚函数重写规则、返回类型协变、函数的隐藏1.返回类型协变2.C中函数的隐藏 —— C Primer Plus (第6版) —— cppreference 1.返回类型协变 2.C中函数的隐藏 在C中&a…...
抢鲜体验!vLive虚拟直播5大实用新功能上线!
vLive虚拟直播系统2.6.2版本全新上线!新版本一共更新了5项实用功能,能让你的直播操作更加方便。现在就跟随小编一起来看看吧! 1.本地下载场景支持一键迁移 用户下载后的场景可以直接迁移至另一个磁盘,无需重复下载。 2.信号源添加…...
网约车平台如何开发?需要多少钱?
随着共享经济的兴起,网约车行业迅速发展,并成为人们生活中不可或缺的一部分。为了满足市场需求和提供更好的服务,开发一款高质量的网约车源码平台至关重要。本文将深入探讨网约车源码平台的开发方案,从技术架构、安全性和用户体验…...
Rust踩雷笔记(5)——刷点链表的题(涉及智能指针Box,持续更新)
目录 leetcode 2 两数相加——模式匹配单链表Box 只能说Rust链表题的画风和C完全不一样,作为新手一时间还不太适应,于是单独为链表、智能指针开一篇,主要记录leetcode相关题型的答案以及注意事项。 leetcode 2 两数相加——模式匹配单链表Bo…...
[附源码]计算机毕业设计-JAVA火车票订票管理系统-springboot-论-文-ppt
PPT论文 文章目录 前言一、主要技术javaMysql数据库JSP技术 二、系统设计三、功能截图总结 前言 本论文主要论述了如何使用JAVA语言开发一个火车订票管理系统 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想…...
CARLA spawn Actor (Vehicle and Pedestrian)
1. Spawn Vehicles 2. Spawn Pedestrian References [1] Carla简单入门-1 基本的API使用 - 知乎 [2] https://carla.org/2019/07/12/release-0.9.6/...
【官方中文文档】Mybatis-Spring #SqlSessionFactoryBean
SqlSessionFactoryBean 在基础的 MyBatis 用法中,是通过 SqlSessionFactoryBuilder 来创建 SqlSessionFactory 的。而在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来创建。 设置 要创建工厂 bean,将下面的代码放到 Spring 的 XML …...
el-tree树回显删除某项,再次点开树形组件无变化,实际数据已改变
el-tree树回显删除某项,再次点开树形组件无变化,实际数据已改变 页面有添加和删除已选选项的按钮,点击删除一个选项,再点添加,打开树形弹窗,发现弹窗被删除的选项还在 原因: 发现是添加的时候&…...
生产作业标准化是什么?生产车间作业流程标准化的步骤
生产作业标准化是以精益化为目标,对现行作业方法进行量化细化的分析改善,最终形成优化后的更好的作业程序。标准化的作用主要是以文件的方式保存企业成员积累的技术和经验,而不是因为人员的流动而失去整个技术和经验。 生产作业标准化的实施非…...
CSS3盒模型+flex
1.盒模型 标准盒模型: wwidthpaddingborderhheightpaddingborder 怪异盒模型(ie盒模型) wwidth包含了(paddingborder)hheight包含了(paddingborder) 2.CSS3弹性盒(重点新版弹性盒) 弹性盒: 设置为弹性盒后,父元素为容器,子元素为项目弹性盒中存在两根轴,默认水平为主轴,垂…...
物种气候生态位动态量化与分布特征模拟
在全球气候快速变化的背景下,理解并预测生物种群如何应对气候变化,特别是它们的地理分布如何变化,已经变得至关重要。利用R语言进行物种气候生态位动态量化与分布特征模拟,不仅可以量化描述物种对环境的需求和适应性,预…...
微服务参数透传实现
说明:在微服务架构中,用户身份经网关验证后,我们可以将用户信息,如ID加入到请求头上。后面的微服务中,可以设置一个拦截器,拦截请求,获取请求头上的用户ID,加入到ThreadLocal中。 最…...
leetcode 767. Reorganize String(重组字符串)
重新排列字符串s中的字母,使得任意两个相邻的字母都不相同。 思路: 让相邻字母不同,能想到的办法是先把相同的字母排列, 然后在相同字母的缝隙中插入另一种字母。 比如"aab", 先把"a a"排出来,再…...
java八股文面试[数据结构]——List和Set的区别
List和Set是用来存放集合的接口,并且二者都继承自接接口Collection List 中的元素存放是有序的,可以存放重复的元素,检索效率较高,插入删除效率较低。 Set 没有存放顺序不能存放重复元素检索效率较低,插入删除效率较…...
独立建站平台/快速排名提升
移动磁盘打不开函数不正确,是因为这个I盘的文件系统内部结构损坏导致的。要恢复里面的数据就必须要注意,这个盘不能格式化,否则数据会进一步损坏。具体的恢复方法看正文 工具/软件:AuroraDataRecovery 步骤1:先下载并解…...
花店网站建设需求/外链系统
【题目描述】 现定义一个函数F(a,b),表示对于数对(a,b)调用辗转相除法的步数为多少。 已知F(a,b)k,求(a,b)使得ab尽量小,答案模1097。 【输入描述】 输入一个整数,表示k。 【输出描述】 输出两个整数,表示a、b(a < …...
建设简单网站/网络营销策略分析方法
想必我们很多人都知道“吾日三省吾身”的意思,就是告诫我们要经常的反省、检讨、及时的修正纠偏,但反思什么检讨什么呢?原文已经告诉我们了,在《论语学而》中这样写到,曾子曰:吾日三省吾身----为人谋而不忠…...
wordpress商店插件/市场调研分析报告怎么写
1.join()的用法:使用前面的字符串.对后面的列表进行拼接,拼接结果是一个字符串# lst ["alex","dsb",wusir,xsb]# s "".join(lst)# print(s) #alexdsbwusirxsb2.split() 根据你给的参数进行切割,切割的结果就是列表需要把字符串转换成列表 spl…...
吉林大学建设工程学院官方网站/公司网络营销实施计划
我们知道mybatis有个LAST_INSERT_ID函数,用来返回insert的sql语句操作后返回结果集id1、正常情况下,如果数据库是自增id,我们不用设置id,即id字段为null,然后返回的数据库最后记录(包括已删除的记录&#x…...
python代码自动生成器/广西seo搜索引擎优化
[Cocoa][译]苹果 Cocoa 编码规范中文版 罗朝辉(http://www.cppblog.com/kesalin/) CC许可,转载请注明出处 官方文档:Coding Guidelines for Cocoa本文档下载:点击这里> Code Naming Basics 代码命名基础 在面向对象软件库的设计过程中&…...