python破解反爬_Python破解有道翻译js加密反爬

必须传入以下参数

i: 多么操蛋的

from: AUTO

to: AUTO

smartresult: dict

client: fanyideskweb

salt: 15639358877919 #不断变化 盐值

sign: a4c83eec2d54d4b4d783182da801d34b # 签名 不断变化

ts: 1563935887791 #时间戳 不断变化

bv: 53539dde41bde18f4a71bb075fcf2e66

doctype: json

version: 2.1

keyfrom: fanyi.web

action: FY_BY_REALTlME

这些字段是怎么来的?

一般是js写的 抓取fanyi.min.js 采用格式化工具

截取以下片段

function(e, t) {

var n = e("./jquery-1.7");

e("./utils");

e("./md5");

var r = function(e) {

var t = n.md5(navigator.appVersion),

r = "" + (new Date).getTime(),

i = r + parseInt(10 * Math.random(), 10);

return {

ts: r,

bv: t,

salt: i,

sign: n.md5("fanyideskweb" + e + i + "n%A-rKaT5fb[Gy?;N5@Tj")

}

};

bv 代表的当前有道翻译md5 编码 版本 一般是长时间不变的

ts 当前时间戳

salt 当前时间戳 + 1到10之间的随机数

sign md5("fanyideskweb" + 要翻译的内容 + salt + "n%A-rKaT5fb[Gy?;N5@Tj")

反爬代码

from urllib import request, parse

import time

import random

import hashlib

import json

def get_ts(): #时间戳 乘以1000 取整

ts = str(int(1000 * time.time()))

return ts

def get_salt(ts):

salt = ts + str(random.randint(0, 10)) # 上面的方法返回值 加上1-10之间的随机数

return salt

def get_sign(words, salt):

content = 'fanyideskweb' + words + salt + '1L5ja}w$puC.v_Kz3@yYn'

sign = hashlib.md5(content.encode()).hexdigest()

return sign

def translate(words, ts, salt, sign):

url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"

data = {

"i": words,

"from": "AUTO",

"to": "AUTO",

"smartresult": "dict",

"client": "fanyideskweb",

"salt": salt,

"sign": sign,

'ts': ts,

'bv': 'bbb3ed55971873051bc2ff740579bb49',

"doctype": "json",

"version": "2.1",

"keyfrom": "fanyi.web",

"action": "FY_BY_REALTIME",

"typoResult": "false"

}

data = parse.urlencode(data).encode()

headers = {

'Accept': 'application/json, text/javascript, */*; q=0.01',

# 'Accept-Encoding': 'gzip, deflate',

'Accept-Language': 'zh-CN,zh;q=0.9',

'Connection': 'keep-alive',

'Content-Length': len(data),

'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',

'Cookie': '__guid=204659719.2422785200799945700.1554675512727.244; OUTFOX_SEARCH_USER_ID=-1327275086@10.169.0.82; OUTFOX_SEARCH_USER_ID_NCOO=378292303.3354687; JSESSIONID=aaaLYwaICIOxi6ofRh8Nw; monitor_count=8; ___rl__test__cookies=1554693830913',

'Host': 'fanyi.youdao.com',

'Origin': 'http://fanyi.youdao.com',

'Referer': 'http://fanyi.youdao.com/',

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',

'X-Requested-With': 'XMLHttpRequest'

}

req = request.Request(url=url, data=data, headers=headers)

rsp = request.urlopen(req)

html = rsp.read().decode('utf-8')

json_data = json.loads(html)

print('翻译的结果为:' + json_data['translateResult'][0][0]['tgt'])

if __name__ == '__main__':

words = input('请输入要翻译的内容:')

ts = get_ts()

salt = get_salt(ts)

sign = get_sign(words, salt)

translate(words, ts, salt, sign)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值