版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
百度翻译接⼝测试(3)-最终篇经过了的博客启发,我们如果想要实现百度翻译,还需要搞清楚sign的值是从何⽽来的,搬好⼩板凳,开始上教程!第⼀步翻译结果出来后我们打开开发者⼯具(或者按F12),然后按“Ctrl+Shift+F”进⾏全局搜索,搜索关键字“sign”,搜索出来后点击打开点击下⽅的标志可以格式化代码第⼆步我们现在还不知道这个sign:y(a)是什么意思,我们就打上断点调试⼀下,浏览器调试代码⽅法请⾃⾏百度。刷新页⾯重新进⾏翻译,调试到这⾏代码之后,我们把⿏标放在这⾥,可以看到a的值就是我们输⼊的要查询的单词,sign的值很可能就是由函数y产⽣的,那么y是什么呢?我们把⿏标放到y上⾯,就可以看到y的函数主体部分,⿏标点击就可以进去这个函数主体函数主体部分的代码如下:functione(r){varo=r.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g);if(null===o){vart=r.length;t>30&&(r=""+r.substr(0,10)+r.substr(Math.floor(t/2)-5,10)+r.substr(-10,10))}else{for(vare=r.split(/[\uD800-\uDBFF][\uDC00-\uDFFF]/),C=0,h=e.length,f=[];h>C;C++)""!==e[C]&&f.push.apply(f,a(e[C].split(""))),C!==h-1&&f.push(o[C]);varg=f.length;g>30&&(r=f.slice(0,10).join("")+f.slice(Math.floor(g/2)-5,Math.floor(g/2)+5).join("")+f.slice(-10).join(""))}varu=void0,l=""+String.fromCharCode(103)+String.fromCharCode(116)+String.fromCharCode(107);u=null!==i?i:(i=window[l]||"")||"";for(vard=u.split("."),m=Number(d[0])||0,s=Number(d[1])||0,S=[],c=0,v=0;v<r.length;v++){varA=r.charCodeAt(v);128>A?S[c++]=A:(2048>A?S[c++]=A>>6|192:(55296===(64512&A)&&v+1<r.length&&56320===(64512&r.charCodeAt(v+1))?(A=6S[c++]=A>>18|240,S[c++]=A>>12&63|128):S[c++]=A>>12|224,S[c++]=A>>6&63|128),S[c++]=63&A|128)}for(varp=m,F=""+String.fromCharCode(43)+String.fromCharCode(45)+String.fromCharCode(97)+(""+String.fromCharCode(94)+String.fromCharCp+=S[b],p=n(p,F);returnp=n(p,D),p^=s,0>p&&(p=(2147483647&p)+2147483648),p%=1e6,p.toString()+"."+(p^m)}第三步我们把这份js代码另存为fun_e(r).js,然后利⽤Python的PyExecJS库调试运⾏下这段js代码(需要提前装好node.js环境)importexecjs#print(execjs.get().name)#输出所⽤环境名称withopen("pytest\翻译接⼝\\fun_e(r).js","r",encoding='utf-8')asf:ctx=pile(f.read())print(ctx.call("e","我是⼤帅哥"))但是运⾏后提⽰变量i没有被定义我们返回到浏览器,找到i,同样的打上断点,这⾥我给变量u也打上断点了,⽅便看变量u值的变化,跟上⾯⼀样,调试后可以看到i的值为"320305.131321201"这时,我们还不能确定i的值是不是就是"320305.131321201",我们换个词重新进⾏翻译调试,经过多次试验,i的值固定不变,我们可以确定i的值就是"320305.131321201"(字符串类型)第四步我们在之前建好的js⽂件中定义⼀个i变量并赋值重新调试运⾏⼜提⽰n没有被定义我们故技重施,返回浏览器搜索到n,打断点调试,可以找到n的函数主体我们把这段代码复制下来放到js⽂件⾥⾯的前⾯,重新运⾏代码得到sign值!(不确定是不是sign值的话就在浏览器中搜索相同的词,看看提交表单的sign值是不是⼀样,换词多次试验可以确定这个就是sign值)完整的js代码如下functionn(r,o){for(vart=0;t<o.length-2;t+=3){vara=o.charAt(t+2);a=a>="a"?a.charCodeAt(0)-87:Number(a),a="+"===o.charAt(t+1)?r>>>a:r<<a,r="+"===o.charAt(t)?r+a&4294967295:r^a}returnr}functione(r){varo=r.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g);if(null===o){vart=r.length;t>30&&(r=""+r.substr(0,10)+r.substr(Math.floor(t/2)-5,10)+r.substr(-10,10))}else{for(vare=r.split(/[\uD800-\uDBFF][\uDC00-\uDFFF]/),C=0,h=e.length,f=[];h>C;C++)""!==e[C]&&f.push.apply(f,a(e[C].split(""))),C!==h-1&&f.push(o[C]);varg=f.length;g>30&&(r=f.slice(0,10).join("")+f.slice(Math.floor(g/2)-5,Math.floor(g/2)+5).join("")+f.slice(-10).join(""))}vari="320305.131321201";varu=void0,l=""+String.fromCharCode(103)+String.fromCharCode(116)+String.fromCharCode(107);u=null!==i?i:(i=window[l]||"")||"";for(vard=u.split("."),m=Number(d[0])||0,s=Number(d[1])||0,S=[],c=0,v=0;v<r.length;v++){varA=r.charCodeAt(v);128>A?S[c++]=A:(2048>A?S[c++]=A>>6|192:(55296===(64512&A)&&v+1<r.length&&56320===(64512&r.charCodeAt(v+1))?(A=6S[c++]=A>>18|240,S[c++]=A>>12&63|128):S[c++]=A>>12|224,S[c++]=A>>6&63|128),S[c++]=63&A|128)}for(varp=m,F=""+String.fromCharCode(43)+String.fromCharCode(45)+String.fromCharCode(97)+(""+String.fromCharCode(94)+String.fromCharCp+=S[b],p=n(p,F);returnp=n(p,D),p^=s,0>p&&(p=(2147483647&p)+2147483648),p%=1e6,p.toString()+"."+(p^m)}第五步既然如何获取sign值了,那么百度翻译也就搞定啦,奉上完整代码#破解sign值importrequestsimportreimportexecjsimportjsonheaders={"User-Agent":"Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/69.0.3497.100Safari/537.36",'Cookie':'PSTM=1575539987;BAIDUID=A80872D93185A688C8AC8CF159A4EF54:FG=1;BIDUPSID=3D8B9E5934B26CCEF003426B6773A431;BDORZ=B490B5}form_data={#'from':'zh',#'from':'zh',#'to':'en',#'query':word,'transtype':'realtime','simple_means_flag':'3',#'sign':None,'token':'42e08df4cfc832413f5c96516ed21cc3'}#获取sign的值defgetSign(word):withopen('pytest\翻译接⼝\\fun_e(r).js','r',encoding='utf-8')asf:sign_js=pile(f.read())returnsign_js.call('e',word)#获取结果的json数据defgetResult(url):try:r=requests.post(url,data=form_data,headers=headers,timeout=30)r.raise_for_statusreturnr.textexcept:return''#主函数print("本程序同时⽀持汉译英和英译汉")print("汉译英请输⼊1,英译汉请输⼊其他⾮0数字")print("若想终⽌程序,请输⼊0")while(True):a=eval(input("请输⼊数字:"))ifa==1:f='zh't='en'elifa==0:breakelse:f='en't='zh'url_post="/v2transapi"word=input("请输⼊要查询的字符:")sign=getSign(word)form_data['from']=fform_data['t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东司法警官职业学院《新闻学理论》2023-2024学年第一学期期末试卷
- 广东省外语艺术职业学院《数字营销传播》2023-2024学年第一学期期末试卷
- 广东轻工职业技术学院《土木工程CAD与BM》2023-2024学年第一学期期末试卷
- 广东女子职业技术学院《物流信息系统设计》2023-2024学年第一学期期末试卷
- 广东茂名幼儿师范专科学校《爆破安全技术及工程》2023-2024学年第一学期期末试卷
- 五年级数学(小数乘除法)计算题专项练习及答案
- 法律基础(西南政法大学)学习通测试及答案
- 全国2021届高三英语试题8、9月分类解析:E单元-短文改错
- 2025年人教版八年级数学寒假预习 第01讲 二次根式(3个知识点+5大考点举一反三+过关测试)
- 【原创】2013-2020学年高二数学必修五导学案:2.3.2-等比数列的通项公式
- 煤气化工艺路线的比较
- 宝石学 第11章 有机宝石.
- SAP-按销售订单采购生产系统实现之配置和操作
- 《安宁疗护培训》PPT课件
- 第5章煤炭气化技术
- 全口义齿修复汇总
- 公墓施工组织设计
- 业余无线电台设置(变更)申请表
- 担保公司员工守则(共18页)
- 录音艺术教学大纲
- 初中化学教学中的教学瓶颈及解决策略探讨
评论
0/150
提交评论