JS解密入門案例:python有道翻譯JS解密

前言

嗨嘍!大家好呀,這里是魔王~

課程亮點:

  1. 系統分析網頁結構
  2. 動態數據抓包演示
  3. json數據解析
  4. JS解密

環境介紹:

  • python 3.8
  • pycharm >>> 需要安裝nodejs插件
  • Nodejs 解釋器 用來運行JS代碼的

模塊使用:

  • requests >>> pip install requests
  • execjs >>> pip install pyexecjs

如何安裝python第三方模塊:

  1. win + R 輸入 cmd 點擊確定, 輸入安裝命令 pip install 模塊名 (pip install requests) 回車
  2. 在pycharm中點擊Terminal(終端) 輸入安裝命令

如何配置pycharm里面的python解釋器?

  1. 選擇file(文件) >>> setting(設置) >>> Project(項目) >>> python interpreter(python解釋器)
  2. 點擊齒輪, 選擇add
  3. 添加python安裝路徑

pycharm如何安裝插件?

  1. 選擇file(文件) >>> setting(設置) >>> Plugins(插件)
  2. 點擊 Marketplace 輸入想要安裝的插件名字 比如:翻譯插件 輸入 translation / 漢化插件 輸入 Chinese
  3. 選擇相應的插件點擊 install(安裝) 即可
  4. 安裝成功之后 是會彈出 重啟pycharm的選項 點擊確定, 重啟即可生效

爬蟲案例基本流程:

一. 數據來源分析

  1. 確定采集網站視頻, 需要什么數據
  2. 通過開發者工具進行抓包, 分析我們想要的數據 是那個url地址發送的請求
    post 請求 >>> 需要提交data表單數據
    分析請求參數變化規律, sign 參數, 每次請求都不一樣

第一種方式扣代碼:

  • 做JS解密, 其實就扣代碼 我想要sign參數 是哪里來的, 把那一段代碼扣下來
  • 運行JS代碼, 運行之后, 肯定是會報錯的 一般情況 什么什么沒有定義, 缺什么補什么

通過python 去調用JS代碼內容 從而得到返回數據內容

第二方式直接用python改寫JS代碼:

二. 代碼實現過程: 發送請求, 獲取數據, 解析數據, 保存數據

  1. 發送請求, 對于翻譯接口發送請求
  2. 獲取數據, 獲取服務器返回數據內容
  3. 解析數據, 提取我們想要翻譯結果

如果想要去做JS解密, 首先就要分析它是那個參數加密的 其次呢 去分析加密參數是通過那個JS代碼生成的,怎么生成的 然后就是扣代碼

JS逆向里面最簡單一個案例...沒有之一

代碼

# 導入數據請求模塊
import requests
# 導入格式化輸出模塊
import pprint
# 導入execjs
import execjs
# 導入md5解密模塊
import hashlib  # 內置模塊
# 導入時間模塊
import time

# 1647329439.9328077
# 16473294570110
# 16473295059531

# m3u8 AES加密
while True:
    word = input('請輸入你想要翻譯的內容(輸入0即可退出): ')
    if word == '0':
        break
    # f = open('有道.js', encoding='utf-8')
    # js_code = f.read()
    # compile_code = execjs.compile(js_code)
    # json_data = compile_code.call('youdao', word)
    string = "fanyideskweb" + word + str(int(time.time() * 10000)) + "Ygy_4c=r#e#4EX^NUGUc5"
    sign = hashlib.md5(string.encode('utf-8')).hexdigest()
    # print(json_data)
    url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'  # 確定請求網址
    # headers 請求頭 偽裝python代碼, 如果你不偽裝, 就被識別出來是爬蟲程序, 從而得不到數據內容
    headers = {
        'Cookie': 'OUTFOX_SEARCH_USER_ID=1092484940@10.169.0.82; OUTFOX_SEARCH_USER_ID_NCOO=1350964471.5510483; JSESSIONID=aaa_jaG1Fa7rPdutNrm_x; ___rl__test__cookies=1647328160933',
        'Host': 'fanyi.youdao.com',
        'Origin': 'https://fanyi.youdao.com',
        'Referer': 'https://fanyi.youdao.com/',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36',
    }
    # 表單數據, post請求都是需要提交一個from data 表單數據
    data = {
        'i': word,
        'from': 'AUTO',
        'to': 'AUTO',
        'smartresult': 'dict',
        'client': 'fanyideskweb',
        'salt': int(time.time() * 10000),
        'sign': sign,
        'lts': int(time.time() * 1000),
        'bv': 'c2777327e4e29b7c4728f13e47bde9a5',
        'doctype': 'json',
        'version': '2.1',
        'keyfrom': 'fanyi.web',
        'action': 'FY_BY_REALTlME',
    }
    response = requests.post(url=url, data=data, headers=headers)  # <Response [200]> 200 狀態碼請求成功 響應對象
    # response.json() 返回json字典數據 鍵值對取值
    translateResult = response.json()['translateResult'][0][0]['tgt']
    # pprint.pprint(response.json())
    print('翻譯的結果: ', translateResult)

視頻教程

https://www.bilibili.com/video/BV16Y4y1v7D7?share_source=copy_web

尾語

好了,我的這篇文章寫到這里就結束啦!

有更多建議或問題可以評論區或私信我哦!一起加油努力叭(? ?_?)?

喜歡就關注一下博主,或點贊收藏評論一下我的文章叭!!!

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容