专栏首页算法与数据之美JS逆向初探之有道翻译

JS逆向初探之有道翻译

有道翻译在咱们的日常学习工作中也是经常被用到,有道翻译提供即时免费的中文、英语、日语、韩语等多种语言的翻译,今天我们就来研究一下有道翻译的网页版,是否能通过对网页的爬取做一个简易的翻译小工具呢,一起来看看吧!

用Chrome浏览器打开有道的在线翻译,按下F12并在框中输入任意中文来观察其网页变化。

该页面被我们轻松找到,可以看到tgt对应的内容就是我们的爬取目标。观察其Headers,发现这是一个post请求,我们都知道post需要提交表单数据,从下图中的Form Data可以看到我们需要的信息,乍一看竟有如此多的参数,我们换个输入重新看看,哪些参数是固定的,哪些是随着输入而发生改变的。

可以多尝试几次,观察其参数变化,显然这些参数之中只有i、salt、sign、ts、bv这几个是发生变化的,那我们就重点来关注这些参数是如何发生变化的。打开其js代码,观察其代码是如何来得到这些变量的。在搜索框内输入salt。

data构造的字典,我们需要的参数尽数都在其中,继续查看js代码,想要找到其加密的函数,想知道其如何生成的,就需要用到JS调试了。

给代码打上断点之后,发现其e就是我们输入的文字,这和Form Data也是一致的,其中t也就是bv是代理的md5值,这里navigator.appVersion的值是5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36,鼠标悬停在该变量上就会显示。ts表示时间戳(timestamp),而i也就是salt则是构造出来的一个字符串,具体方法也在下面代码中给出了。sign也是一个构造出来的参数,前后两端加入固定字符串,中间拼接了e和i,通过md5加密形成新字符串。

ts = str(int(time.time()*10000))
salt = str(int(time.time()*10000) + random.random()*10 + 10)
sign = 'fanyideskweb' + word + salt + '97_3(jkMYg@T[KZQmqjTK'
sign = hashlib.md5(sign.encode('utf-8')).hexdigest()
bv = '5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
bv = hashlib.md5(bv.encode('utf-8')).hexdigest()

上述代码是整个解密的关键,有了他们我们就有了所有需要发送请求的参数,编写剩余部分代码,下面来看看实现结果吧!

输入中英文都能够互相转换,其他语种也支持翻译查询喔!

全部代码后台回复“有道”,即刻送达喔~

本文分享自微信公众号 - 算法与数据之美(algo_and_data),作者:斐波那契小李

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 二十种编程语言齐送鼠年祝福

    老肥码码码
  • Trending Top 5

    今天一起来看看一些主要使用Python语言的开源项目,它们是在本周斩获star最多的五个,这五个项目每一个都是和AI息息相关的。

    老肥码码码
  • 爬虫学习与实战指男

    我在GitHub上有个Python的爬虫仓库,收集了一些我爬虫学习与实战的代码。里面包含了一些基础内容,也包含了一些中阶的技巧,工具的使用。

    老肥码码码
  • 持续集成良好实践 v0.2

    本文标题之所以没有使用“最佳实践”,而是使用了“良好实践”,是因为下面每个实践在各个背景不同的团队落地时,都有可改进的空间。

    吾真本
  • Spring Cloud OAuth 实现微服务内部Token传递的源码解析

    冷冷
  • Spring Cloud OAuth 微服务内部Token传递的源码实现解析

    冷冷
  • 基于生长的棋盘格角点检测方法--(1)原理介绍

    前言 棋盘格中角点检测方法是相机标定中必不可少的步骤之一。Opencv中的函数 bool findChessboardCorners(InputArray im...

    用户1150922
  • ArrayList的Fast-fail(快速失败)策略

    3、为什么要报这个错?途中出错的地方是ArrayList.java:901定位到该处代码:

    用户6055494
  • 3行代码Python搞定图片清晰度识别,原来我们看到的不一定是这样的

    在通常情况下,图片是否清晰是个感性认识,同一个图,有可能你觉得还过得去,而别人会觉得不清晰,缺乏一个统一的标准。然而有一些算法可以去量化图片的清晰度,做到有章可...

    猫咪编程
  • Python 做图片清晰度识别

    如果之前了解过信号处理,就会知道最直接的方法是计算图片的快速傅里叶变换,然后查看高低频分布。如果图片有少量的高频成分,那么该图片就可以被认为是模糊的。然而,区分...

    Bob.Chen

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动