[转]http://www.knowsky.com/1041161.html

python 记一次计算qzonetoken经历

之前用python写了个发表说说的爬虫,但最近发现在post数据时返回不对,不能用了,抓包后发现需要添加一个qzonetoken的字符串,这个token并不在cookie里。联想到以前爬贴吧时也有个类似的token,贴吧的token是放在html里的,并且是明文。查看html,果然有个window.g_qzonetoken的值,同样是明文,于是愉快的提取出来,然后post,成功。 过几天后,代码又不能用了,还是qzonetoken不对,抓包后发现这个token不再是明文了,变成了这个样子

`“这什么鬼!” 我第一反应。立马联想到以前看过的一道js题,就是这个样子的,但是不知道这叫什么!还好百度是强大的,了解到这叫jother编码,原来还能这么玩! 然后搜索如何在python中执行js,安装execjs模块,代码是这样的

ctx = execjs.compile('''function qzonetoken(){return %s}'''% jother) print ctx.call("qzonetoken")

将js脚本中的那一串jother编码带入,高兴得跑起来!然后报错了!

raise exceptions.ProgramError(e) execjs._exceptions.ProgramError: ReferenceError: location is not defined ( @ 2 : 7 ) -> return location

提示说location没有定义,我觉得奇怪,我将这段js放到浏览器consle中都能正常运行,为什么python中就不行呢!然后怀疑这个execjs模块有问题,还费劲地安装了pyv8,还是得到同样结果,报错:location无定义。一番搜索后,解释是:execjs只是纯粹的js运行环境,没有dom结构,而这个location就是dom中的一个对象。又碰巧在jother编码工具 这个网站中发现了这样一段话

[]['sort']['constructor']('return location')();可以返回当前的url地址

location没有定义 ,不会就是这个吧? 既然没有解析dom,那我就声明一个location对象,赋值为url地址,试试看。代码改为这样

ctx = execjs.compile('''function qzonetoken(){ location = 'http://user.qzone.qq.com/%s'; return %s}'''% (qqnum,jother)) return ctx.call("qzonetoken")

成功运行,得到了类似这样的token:

82dafbd6f5d1f1606458c68ee54c14aa222ecc81351491a0104e43831c1cfb2e7cc82dbfcd3ffd1b33a031d97de9f8804b8f0c489

将这个与浏览器consle中得到的结果比对,是相同的,再带入post测试,成功! 总结:查这个问题,就吃亏在不懂js,不明白location是什么!计多不压身呀,多学点总没坏处!最后,写这段js代码的程序员赞,是一位有情怀的工程师!

execjs回调python_python运行execjs解密js相关推荐

  1. execjs回调python_python使用execJS运行js函数例子

    //Base64.js (function(global,factory){typeof exports==="object"&&typeof module!==& ...

  2. python调用js文件报错_python - selenium 运行网页中js脚本报错,提示未定义

    问 题 问题1 selenium 运行网易中js脚本报错提示未定义 报错提示如下: driver.execute_script("javascript:amsInit(62800,30315 ...

  3. vue怎么运行html,怎样运行一个vue.js项目

    怎样运行一个vue.js项目? 下载并安装node,安装过程很简单,一路"下一步"就可以了,安装完成之后,打开命令行工具,输入 node -v,如下图,如果出现相应的版本号,则说明 ...

  4. 来自Android客户端什么意思,如何通过回调函数中的Node.js来自Android客户端

    我想从插座Android客户端将数据发送到服务器的Node.js .. 在服务器端做了什么香港专业教育学院:如何通过回调函数中的Node.js来自Android客户端 socket.on('new u ...

  5. X64dbg脚本实现自动DUMP运行中解密出的PE文件

    X64dbg脚本实现自动DUMP运行中解密出的PE文件 // define a variable to hold allocated mem address var mem_addr // defin ...

  6. react native Android端保持APP后台运行--封装 Headless JS

    react native Android端保持APP后台运行--封装 Headless JS 前些日子在做后台下载时踩了后台运行这个大坑,RN官网文档上面在安卓上提供了Headless JS方法,iO ...

  7. 用JS解密工具轻松解密JS代码

    当今的网络世界,JavaScript(JS)被广泛应用于网页开发和应用程序设计.然而,由于JavaScript代码的易读性,许多人担心这种脚本语言的安全性,它容易受到黑客攻击和信息窃取.因此,JS加密 ...

  8. execjs回调python_python-execjs(调用js)

    一.安装 pip3 install PyExecJS 电脑上要有nodejs环境 二.使用 一.获取js字符串 首先将js保存至于本地文件或者你可以可以直接读到内存,必须让js以字符串的形式展示 注意 ...

  9. python运行execjs中出现编码问题

    在破解豆瓣的window.__DATA__时,使用python的execjs执行js,会有这个错误: Exception in thread Thread-1: Traceback (most rec ...

最新文章

  1. LeetCode:198:打家劫舍
  2. 交换机端口镜像(锐捷)
  3. 数学--数论--HDU - 6322 打表找规律
  4. HDU6218 2017ACM/ICPC亚洲区沈阳站 Bridge(Set,线段树)
  5. java的setbounds_java Swing组件setBounds()简单用法实例分析
  6. 【BZOJ4710】[JSOI2011]分特产(容斥)
  7. 强化学习组队学习task06——DDPG 算法
  8. Exadata的独门武器--卸载(Offloading)
  9. (详解)IDEA中使用git教程
  10. Flutter使用fluwx实现微信分享
  11. jpi多表联查_使用Mybatis进行多表联查操作
  12. 计算机d盘给c盘,怎么把D盘变成系统盘?
  13. 推荐系统实践(八)UCG 利用ltf-idf方法
  14. 接外包有哪些渠道呢?
  15. 二进制安装Kubernetes(k8s) v1.24.0 IPv4
  16. unity webgl优化
  17. Docker 入门看这一篇就够了,万字详解!
  18. py实现外星人入侵(二次开发)——3.随机生成外星人和方向
  19. Android电源管理介绍
  20. 百度之星 2017初赛第一场 1005 今夕何夕

热门文章

  1. 保姆级 边缘检测评价OIS、ODS、PR曲线绘制 ——在自己的数据集上
  2. 【NOI模拟赛】最小生成树(kruskal算法,线段树合并)
  3. python批量下载静态页面_Python静态网页爬取:批量获取高清壁纸
  4. 明星祝福视频:提升品牌知名度的炙手利器
  5. Compose Desktop 初体验之绘制
  6. 工作流组件_过程组件模型:下一代工作流?
  7. 数字货币新浪潮 | Libra 蓝皮书
  8. Servlet+jsp(有接口批量删除)
  9. 下载页面不能下载的视频的步骤
  10. python的globals函数_python globals函数