PythonJS逆向解密——实现翻译软件+语音播报

news2024/11/20 11:40:39

前言

嗨喽,大家好呀~这里是爱看美女的茜茜呐

环境使用:

  • python 3.8

  • pycharm

模块使用:

  • requests --> pip install requests

  • execjs --> pip install PyExecJS

  • ttkbootstrap --> pip install ttkbootstrap

  • pyttsx3 --> pip install pyttsx3

第三方模块安装:

  1. win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车

  2. 在pycharm中点击Terminal(终端) 输入安装命令

(如果你觉得安装速度比较慢, 你可以切换国内镜像源)


👇 👇 👇 更多精彩机密、教程,尽在下方,赶紧点击了解吧~

素材、视频教程、完整代码、插件安装教程我都准备好了,直接在文末名片自取就可


本次案例分为两个部分:

一. 实现翻译功能 <爬虫技术>

二. 实现软件界面 <GUI界面开发>

一. 实现翻译功能 <爬虫技术>

  • 如果有翻译接口 --> 抓包分析

    抓包分析 通过开发者工具 <浏览器自带>

    • 翻译接口: https://fanyi.baidu.com/v2transapi?from=zh&to=en
  • 通过对比:

    sign --> 参数是改变的

    < js代码生成 >

  • 通过开发者工具 分析 --> JS代码那块生成出来 <扣代码>

    运行扣下来的js代码

  • 通过python代码执行js代码, 获取sign值

基本步骤:

  1. 发送请求, 模拟浏览器对于url地址发送请求

  2. 获取数据, 获取服务器返回响应数据

  3. 解析数据, 提取我们需要的数据内容

代码展示

一. 获取翻译接口

网址: 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 hashlib

def 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 result


def 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_result
    except:
        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()

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/927527.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

interview2-框架篇

一、Spring篇 1、Spring &#xff08;1&#xff09;Bean线程安全问题 不是线程安全的。Spring框架中有一个Scope注解&#xff0c;默认的值就是singleton&#xff0c;单例的。因为一般在spring的bean的中都是注入无状态的对象&#xff0c;没有线程安全问题&#xff0c;如果在b…

【Focal Loss】解决类别不平衡问题,增加对困难样本的挖掘

Focal Loss是在交叉熵损失函数的基础上增加了一个平衡因子 α \alpha α和一个聚焦因子 γ \gamma γ&#xff0c;分别用来调节不同类别样本的权重以及难分样本和易分样本之间的权重一个样本的交叉熵损失函数如下&#xff1a; p t p_t pt​表示将该样本分类为t的概率一个样本的…

8个好用的产品设计工具,收藏一下

产品设计在设计工作中是非常重要的一个环节&#xff0c;它是对产品的初步构思&#xff0c;能明确规定产品设计的细节。今天本文将为大家推荐8个好用的产品设计工具&#xff0c;不仅操作方便&#xff0c;而且简单好用&#xff0c;能充分提高工作效率&#xff0c;一起来看看吧&am…

政府网站定期巡检:构建高效、安全与透明的数字政务

在数字时代&#xff0c;政府网站已不仅仅是一个信息发布窗口&#xff0c;更是政府与公众互动的桥梁、政务服务的主要渠道以及数字化治理的重要平台。因此&#xff0c;确保政府网站的高效运行、信息安全与透明公开就显得尤为重要。在此背景下&#xff0c;定期的网站巡检与巡查成…

搭建微信小程序商城的详细教程

微信小程序商城是一种通过微信平台进行线上购物的应用&#xff0c;它具有界面友好、交互便利、功能实用等特点&#xff0c;成为越来越多企业和个人创业者的选择。下面&#xff0c;我们将为大家介绍如何搭建微信小程序商城的详细教程。 第一步&#xff0c;登录乔拓云平台进入后台…

D.OASIS City 和 Warrix 在The Sandbox 庆祝 Rise of the 10th Legend十周年

D.OASIS 首次展示了变革性娱乐 D.OASIS City&#xff0c;正如它与 WARRIX 一起承诺的那样。WARRIX 是获得泰国国家队球衣生产授权的标志性运动服装品牌。 这款激动人心的游戏冒险游戏于今天推出&#xff0c;让用户能够投入 D.OASIS City x WARRIX&#xff1a;Rise of the 10th…

数据库怎么备份文件,数据库一般怎么备份

在当今的数字世界中&#xff0c;数据已经成为企业的生命线。无论是客户数据、业务数据还是内部流程&#xff0c;都需要通过数据库进行存储和管理。然而&#xff0c;数据的安全性和完整性也成为企业面临的一大挑战。在这种情况下&#xff0c;数据库备份尤为重要。那么&#xff0…

陪诊系统源码开发:实现个性化医疗陪护的创新之路

陪诊系统的源码开发在现代医疗中具有重要意义。本文将通过代码示例介绍陪诊系统的源码开发&#xff0c;展示如何实现个性化医疗陪护的创新方案。 1. 安装和环境设置&#xff1a; 首先&#xff0c;确保你的开发环境中已经安装了合适的编程语言和框架&#xff0c;比如Python和…

python 模块xlrd 读取.xls文件

Python操作Excel的模块有很多&#xff0c;并且各有优劣&#xff0c;不同模块支持的操作和文件类型也有不同。下面是各个模块的支持情况&#xff1a; xlwt&#xff1a;xlwt 写入.xls文件xlwings&#xff1a;xlwings 读取写入Excel文件openpyxl&#xff1a;openpyxl 读取写入.xl…

主从、哨兵、集群模式有什么区别 ?

目录 1.Redis 多机部署的方式 2.主从、哨兵、集群模式有什么区别 2.1 主从同步 2.2 哨兵模式 2.3 集群模式 1.Redis 多机部署的方式 Redis 多机部署主要有 3 种方式&#xff1a; 1. 主从同步&#xff1a;主要存储数据的节点叫做主节点&#xff08;master&#xff09;&…

OS 内核级线程代码实现

state和counter实现阻塞和时间片的判断是否跳转进程 先把旧内容通过TR放入原TSS&#xff0c;通过TR找到新TSS然后把TSS内容拷入CPU内部&#xff0c;通过esp值变化实现栈的切换。ip使用的copy的ip

科研 | Zotero导入无PDF的参考文献、书籍

最近在用Zotero在Word中插入参考文献的时候发现&#xff0c;有些没在网上找到对应的PDF版本&#xff0c;但也不是必须要PDF版本的参考文献或者参考书籍&#xff0c;如何才能不影响正常的文献排版 主要是先在网上找到对应文献&#xff0c;书籍&#xff0c;网页等的ISBN&#xf…

springboot多数据源使用

在工作上有一个新项目&#xff0c;现在需要获取旧项目的用户信息、积分的操作等等&#xff0c;所以需要调用另外一个项目的数据库&#xff0c;所以我们可以配置多数据源。 依赖 <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-dat…

LeetCode-227-基本计算器Ⅱ

题目描述&#xff1a; 给你一个字符串表达式 s &#xff0c;请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。 注意&#xff1a;不允许使用任何将字符串作为数学表达式计…

低代码赋能| 智慧园区项目开发痛点及解决方案

智慧园区是一个综合体&#xff0c;集技术开发、产业发展和学术研究于一体。作为未来智慧城市建设的核心&#xff0c;智慧园区充当着“产业大脑”和“指挥中心”的角色。它通过整合园区内的制造资源和第三方服务能力&#xff0c;实现园区各组成部分的协调运作、良性循环和相互促…

ESP32应用教程(1)— VL53L3CX距离传感器

文章目录 前言 1 产品概述 1.1 技术规格 1.2 系统框图 1.3 设备引脚分布 2 工作流程 2.1 系统功能描述 2.2 状态机描述 2.3 测距模式说明 3 控制接口 3.1 设备地址 3.2 IC写1个字节数据 3.3 IC读1个字节数据 3.4 IC写多个字节数据 3.5 IC读多个字节数据 3.6 IC…

国际评级机构下调美国银行业评级,美国区域性银行风险仍存在?

KlipC报道&#xff1a;国际评级机构标准普尔更新了对10家美国银行的评级&#xff0c;其中5家美国银行的信用评价呗下调一级&#xff0c;2家银行前景展望被调整为“负面”。 关于下调5家银行评级的原因&#xff0c;标普表示&#xff1a;这主要是有些美国地区银行不仅资金状况出现…

rabbitmq的优先级队列

在我们系统中有一个 订单催付 的场景&#xff0c;我们的客户在天猫下的订单 , 淘宝会及时将订单推送给我们&#xff0c;如果在用户设定的时间内未付款那么就会给用户推送一条短信提醒&#xff0c;很简单的一个功能对吧&#xff0c;但是&#xff0c;tianmao商家对我们来说&#…

npm yarn pnpm npx nvm 命令怎么区分怎么用

npm​​​​​​​ 包管理器&#xff0c;可以用来安装、卸载、更新和管理各种包npm的package.json中文文档 参数 - install&#xff1a;安装一个或多个包。例如&#xff1a;npm install 。 uninstall&#xff1a;卸载一个包。例如&#xff1a;npm uninstall 。 update&#xf…

登录认证-登录校验-会话技术方案选择和对比(cookie、session和JWT令牌)

会话技术方案选择和对比 一、背景说明二、会话技术之 Cookie1、为什么说cookie是客户端会话技术2、cookie的优点和缺点 三、会话技术之 Session1、为什么说Session是服务端会话技术2、session的优点和缺点 四、令牌技术JWT1、JWT 的原理2、JWT的优点和缺点 一、背景说明 在开发…