2023 js逆向爬虫 有道翻译 代码

news/2024/7/19 10:30:11 标签: 爬虫, js, python

前置条件:nodejs环境、安装  crypto 和  python3环境

js.js文件:

const crypto = require("crypto")

function decode(resp_data) {
    g_o = 'ydsecret://query/key/B*RGygVywfNBwpmBaZg*WT7SIOUP2T0C9WHMZN39j^DAdaZhAnxvGcCY6VYFwnHl'
    g_n = 'ydsecret://query/iv/C@lZe2YzHtZ2CYgaXKSVfsb7Y4QWHjITPPZ0nQp87fBeJ!Iv6v^6fvi2WN@bYpJ4'

    const g_o_1 = new Uint8Array(crypto.createHash('md5').update(g_o).digest())
    const g_n_1 = new Uint8Array(crypto.createHash('md5').update(g_n).digest())

    const cipher = crypto.createDecipheriv('aes-128-cbc', g_o_1, g_n_1)
    let s = cipher.update(resp_data, 'base64', 'utf-8')
    s += cipher.final("utf-8")
    return s
}

python代码

python">import json
import time
from hashlib import md5
import requests
import execjs
from jsonpath import jsonpath

print("=" * 12)
print("有道翻译v1.0")
print("=" * 12)

while 1:
    ch_value = input("请输入待翻译的内容 ==> ")
    # 发送请求 - sign
    time1 = int(time.time() * 1000)
    s1 = f'client=fanyideskweb&mysticTime={time1}&product=webfanyi&key=fsdsogkndfokasodnaso'
    obj = md5()
    # 要加密的内容,必须传入字节
    obj.update(s1.encode('utf-8'))
    sign = obj.hexdigest()

    url = "https://dict.youdao.com/webtranslate"
    headers = {
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
        'referer': 'https://fanyi.youdao.com/',
        'origin': 'https://fanyi.youdao.com',
        'cookie': 'OUTFOX_SEARCH_USER_ID_NCOO=648817392.8377072; OUTFOX_SEARCH_USER_ID=-1140685951@47.109.4.40; hb_MA-B0D8-94CBE089C042_source=www.baidu.com'
    }
    data = {
        "i": ch_value,
        "from": "auto",
        "to": "auto",
        "domain": 0,
        "dictResult": "true",
        "keyid": "webfanyi",
        "sign": sign,
        "client": "fanyideskweb",
        "product": "webfanyi",
        "appVersion": "1.0.0",
        "vendor": "web",
        "pointParam": "client,mysticTime,product",
        "mysticTime": str(time1),
        "keyfrom": "fanyi.web"
    }
    resp = requests.post(url=url, data=data, headers=headers)
    # 解密
    with open('./js.js') as f:
        js_code = f.read()
    js = execjs.compile(js_code)
    ret = js.call("decode", resp.text)
    translateResult_tgt = jsonpath(json.loads(ret), '$..translateResult..tgt')[0]
    print("翻译的结果 ==> ", translateResult_tgt, sep='')
    print("")


http://www.niftyadmin.cn/n/4962780.html

相关文章

数据标注平台如何评估及挑选?

近年来,随着各行各业将AI技术和机器学习模型应用于商业实践中,AI不再是一种华而不实的新想法,而是越来越成为一种主流。此外,随着世界产生越来越多的数据,您的特定用例所需的数据可能已然出现,正等待着您去…

Wlan——STA上线流程与802.11MAC帧讲解以及报文转发路径

目录 802.11MAC帧基本概念 802.11帧结构 802.11MAC帧的分类 管理帧 控制帧 数据帧 STA接入无线网络流程 信号扫描—管理帧 链路认证—管理帧 用户关联—管理帧 用户上线 不同802.11帧的转发路径 802.11MAC帧基本概念 802.11协议在802家族中的角色位置 其中802.3标…

Vue3中的计算属性和属性监听

compute计算属性 Vue3中可以通过 compute进行监听计算属性,他返回的是一个ref的对象,也就是说 通过compuye这种方式计算属性实际上是进行了ref的操作 import { computed } from vue const user reactive({firstName: A,lastName: B }) // 只有getter的…

springdoc 使用

1、引入依赖 <!-- 文档集成 --> <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-webmvc-core</artifactId><version>${springdoc.version}</version> </dependency> <dependency>&…

【微信公众号】微信公众号网页授权:

文章目录 一、添加业务域名二、前端授权获取code【1】参数说明&#xff1a;【2】静默授权与显式授权的区别&#xff1a;【3】前端获取code的代码&#xff1a; 三、后端获取openid(或unionid)【1】获取openid&#xff1a;【2】获取unionid 四、unionid与openid的区别 在微信公众…

【JavaSE】详解final关键字

在Java中&#xff0c;final可以用来修饰类、方法和变量。final修饰类&#xff0c;表示该类无法被继承&#xff0c;并且此类的设计已被认为很完美而不需要进行修改或扩展。final修饰类中的方法&#xff0c;表示不可以被重写&#xff1b;也就是把该方法锁定了&#xff0c;以防止继…

主程技术分享: 游戏项目帧同步,状态同步如何选

网络游戏开发项目中帧同步,状态同步如何选&#xff1f; 网络游戏的核心技术之一就是玩家的网络同步,主流的网络同步有”帧同步”与”状态同步”。今天我们来分析一下这两种同步模式。同时教大家如何在自己的项目中采用最合适的同步方式。接下来从以下3个方面来阐述: 对啦&…

【数据结构】 LinkedList的模拟实现与使用

文章目录 &#x1f340;什么是LinkedList&#x1f334;LinkedList的模拟实现&#x1f6a9;创建双链表&#x1f6a9;头插法&#x1f6a9;尾插法&#x1f6a9;任意位置插入&#x1f6a9;查找关键字&#x1f6a9;链表长度&#x1f6a9;打印链表&#x1f6a9;删除第一次出现关键字为…