1.はじめに
ウェブサイト:http://fanyi.youdao.com/
効果:Webフォームの送信をシミュレートし、リアルタイムの翻訳を実現します
フレームを使用:リクエスト
難易度:✩✩✩
2.チュートリアル
1はじめに
Youdao Translationは、中国で有名な翻訳会社として、オンライン翻訳Webサイトも開設しました。今回のクローラーの目標は、Youdaoの翻訳をシミュレートするフォーム送信をクロールし、リアルタイムの翻訳の効果を実現することです。
2.ウェブサイト分析
ウェブサイトのホームページ
翻訳してみてください
クロールネットワークリクエスト
このリクエストで必要な結果があることを検索して見つけることで、このリクエストを受け取ったときに目的の効果を得ることができます。
分析フォーム
さまざまなリクエストを通じてフォームパラメータを分析する
さまざまなリクエストを通じて、フォームの変更されたデータを見つけることができます。
- i:翻訳されたテキスト
- ソルト:タイムスタンプ
- 記号:MD5暗号化暗号文
- LTS:より多くの塩よりもタイムスタンプ
- bv:MD5暗号化暗号文
フォームデータを見つけるためのブレークポイントデバッグ
Ctrl + Shift + Fを使用して、キーワードが配置されているJSファイルを検索します
ファイルを見つけた後、Ctrl + Fはキーワードを探し、見つかったキーワードで中断します。
ホームページに戻って再度リクエストすると、プログラムのウェブページが一時停止していることがわかります。この時点で、ヒットしたブレークポイントが有効になりました。
デバッガーに戻ると、変更はありません。つまり、プログラムがヒットしたブレークポイントまで実行されたときにソルト値は生成されません。直線はブレークポイントの間違った場所です。次の作業は、上記の作業を繰り返すことです。
この位置に着いたとき、私たちはついに素晴らしいものを見つけました。私たちが必要とするすべての値はここにあります、そしてここのJSコードは私たちがクラックする必要があるものです:
JSコードを分析する
var r = function(e) {
var t = n.md5(navigator.appVersion) // navigator.appVersion的值为User-Agent,对该值进行md5加密
, r = "" + (new Date).getTime() // 获取当前时间戳
, i = r + parseInt(10 * Math.random(), 10); // 时间戳和一位随机数进行字符串拼接
return {
ts: r,
bv: t,
salt: i,
sign: n.md5("fanyideskweb" + e + i + "]BjuETDhU)zqSxf-=B#7m") // 字符串拼接后进行md5加密
}
};
Pythonコードの実装
import time
import random
from hashlib import md5
data = {
"i": "爬虫",
"from": "AUTO",
"to": "AUTO",
"smartresult": "dict",
"client": "fanyideskweb",
"doctype": "json",
"version": "2.1",
"keyfrom": "fanyi.web",
"action": "FY_BY_REALTlME"
}
enc = md5()
enc.update(
"5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 "
"Safari/537.36".encode())
data['bv'] = enc.hexdigest()
data['lts'] = time.time() * 1000
data['salt'] = data['lts'] + random.randint(0, 9)
enc = md5()
sign = f"fanyideskweb{self.keyword}{data['salt']}]BjuETDhU)zqSxf-=B#7m"
enc.update(sign.encode())
data['sign'] = enc.hexdigest()
フォームの偽造が完了したら、データをリクエストできます。データリクエストの部分は比較的単純なので、ここでは詳細なチュートリアルを投稿しません。特定のコードは以下で見ることができます。