Python模拟登陆TAPD
因为在wiki中未找到需要的数据,查询也很迷,打算用python登录tapd抓取所需项目下的wiki数据,方便查找。
2018-9-30 19:12:44
几步走
- 模拟登录tapd
- 抓取wiki页左侧链接
- 拿到每页markdown
- 存储数据库
模拟登录TAPD
请求参数
data[Login][ref] https://www.tapd.cn/my_worktable?left_tree=1
data[Login][encrypt_key] GxYimlauXYHXtqflCRfP4MLxInPBlMJIfvw7D+vCxQE=
data[Login][encrypt_iv] M7IkutCvI9/jFyQc3owL+Q==
data[Login][site] TAPD
data[Login][via] encrypt_password
data[Login][email] xxxxx@vchangyi.com
data[Login][password] T0cbRTIoaM1z9ktIM6Wl2Q==
data[Login][login] login
dsc_token dDdgn7oC89YL6Waz
变量
data[Login][encrypt_key] 0royxaa8qvuNkffv0zGRpLKZg+80lBje4fEz876igzw=
data[Login][encrypt_iv] 2ouJgjQ6j3jp4O5hFH6k4A==
data[Login][password] m6YLZH4DVzXjD/eLyVT/nQ==
dsc_token 30CfdZ59sH3JIaNh
dsc_token 通过 dsc+180208173064.js 生成,多次请求地址没有变化说明后面数字尾巴不是时间戳之类动态,试着获取一下dsc_token。
获取 token
tapd_dsc.gen_token_and_set_to_cookie()
PyV8装不上,用execjs读取
import execjs
sign_js_path = "./dsc+180208173064.js"
def get_js(path):
f = open(path, 'r', encoding='UTF-8') # 打开JS文件
line = f.readline()
html_str = ''
while line:
html_str = html_str + line
line = f.readline()
return html_str
def load_sign_js(js_str):
return execjs.compile(js_str)
def writeFile(js):
fo = open("dsc.js", "w")
fo.write(js)
fo.close()
sign_js = load_sign_js(get_js(sign_js_path))
writeFile(sign_js._source)
print(sign_js.call('tapd_dsc.gen_token_and_set_to_cookie'))
调用方法不成功,报错,写文件并用html测试,则是好的。调用姿势不对。
提取函数放单独文件,改一下就好了。先这样
获取encrypt
轻车熟路在首页里找到了一串疑似生成encrypt的代码,拿出来封装一下
function encrypt(password){
var key = CryptoJS.MD5(Math.random() + '').toString();
password = CryptoJS.AES.encrypt(password, key, {mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.ZeroPadding});
password_encode = password.ciphertext.toString(CryptoJS.enc.Base64);
//360è®°ä½Â密ç Â在val的时候会有bug,导致登录ä¸ÂæˆÂ功
while($("#password_input").val() != password_encode){
$("#password_input").val(password_encode);
}
$("#encrypt_iv").val(password.iv.toString(CryptoJS.enc.Base64));
$("#encrypt_key").val(password.key.toString(CryptoJS.enc.Base64));
}
发现一个形似的
Python3 模拟手机登录熊猫直播(panda.tv)
我还是先用js直接搞。
CryptoJS用的是
pad-zeropadding+151112164124.js
开始重点的,用上面执行js的方法,执行这个试试。
第一次报错缺少对象,加上返回后成功!太牛了。
还缺少个必要的参数,password,相比上面那 password_encode 就是本尊了。返回加上,ok.

最紧张的时刻来临。到底数据加密的对不对呢?
组合数据,模拟登陆
找了一个登录的改了一下,发现没效果。Fiddler抓包时编辑器才报错SSL。为什么呢?
强行忽略SSL,尝试登录了几次还不成功。发现有验证码了。真有意思。加上验证码处理之后又发现没有验证码了导致解析报错,加个异常处理。ok
执行,看日志,跳转成功!开森!

还没测有验证码的,可能因为用浏览器成功登录一次就没了。试错几次又出来了验证码。

F5运行,输入验证码。Bingo! 一次过的感觉超级好。再回去刷新浏览器登录页,无验证码。

p.s. 还是想说破解的有点暴力,真没想到上面获取的token 和 encrypt 会有效很顺利(看来其他js都是假动作)。
待优化
- 报错输出,如密码错误等。 var errorMsg = "邮箱或手机不存在"; 用python正则表达式提取字符串
- 内容代码优化,做第一篇新搭建博客日志。
参考资料及注释
感谢前辈们的详细总结
- Windows环境安装PyV8并执行js语句
- python 调用js中的方法 | python 调用js中的函数
- CryptoJS aes加密,需key 和偏移量 iv
- Python模拟京东登录 登录和验证码全用到,感谢
- [原创]Python模拟登陆某网教师教育网 看雪出品必属精品,值得细看一次,只看到给js打断点用到了并没再细看了
- Requests高级用法
- urllib3 User Guide
- python requests 模拟网站登录 取消ssl安全认证
self.s.verify = False - 超详细的Python实现百度云盘模拟登陆(模拟登陆进阶) 学到了pyv8或者pyexecjs库能处理js
Couldn't find a tree builder with the features you requested: lxml. Do you need to install a parser library?,模块bs4引用报错需要安装lxml,网上说安装麻烦,我这里直接pip可以的
Python模拟登陆TAPD的更多相关文章
- Python模拟登陆新浪微博
上篇介绍了新浪微博的登陆过程,这节使用Python编写一个模拟登陆的程序.讲解与程序如下: 1.主函数(WeiboMain.py): import urllib2 import cookielib i ...
- Python模拟登陆万能法-微博|知乎
Python模拟登陆让不少人伤透脑筋,今天奉上一种万能登陆方法.你无须精通HTML,甚至也无须精通Python,但却能让你成功的进行模拟登陆.本文讲的是登陆所有网站的一种方法,并不局限于微博与知乎,仅 ...
- Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享 支付宝十年账单上的数字有点吓人,但它统计的项目太多,只是想看看到底单纯在淘宝上支出了多少,于是写了段脚本,统计任意时间段淘宝订单的消费情况,看 ...
- python 模拟登陆,请求包含cookie信息
需求: 1.通过GET方法,访问URL地址一,传入cookie参数 2.根据地址一返回的uuid,通过POST方法,传入cooki参数 实现思路: 1.理解http的GET和POST差别 (网上有很多 ...
- python模拟登陆之下载
好长时间没有更新博客了,哈哈. 今天公司给了这么一个需求,现在我们需要去淘宝获取上一天的订单号,然后再根据订单号去另一个接口去获取订单详情,然后再给我展示到web! 中间涉及到的技术点有: 模拟登陆 ...
- 使用python模拟登陆百度
#!/usr/bin/python # -*- coding: utf- -*- """ Function: Used to demostrate how to use ...
- Python模拟登陆某网教师教育网
本文转载自看雪论坛[作者]rdsnow 不得不说,最近的 Python 蛮火的,我也稍稍了解了下,并试着用 Python 爬取网站上的数据 不过有些数据是要登陆后才能获取的,我们每年都要到某教师教育网 ...
- python模拟登陆知乎并爬取数据
一些废话 看了一眼上一篇日志的时间 已然是5个月前的事情了 不禁感叹光阴荏苒其实就是我懒 几周前心血来潮想到用爬虫爬些东西 于是先后先重写了以前写过的求绩点代码 爬了草榴贴图,妹子图网,后来想爬婚恋网 ...
- Python模拟登陆
模拟人人登陆 #encoding=utf-8 import urllib2 import urllib import cookielib def renrenBrower(url,user,passw ...
随机推荐
- 同时使用n和nvm踩到的坑
平时在公司的时候,一直只使用一个node版本.这两天想多了解下node的新版本,使用tj大神的 n 包管理工具来安装node包. 安装过程中一直难以容忍过慢的包下载速度,于是根据日志的描述直接把包下载 ...
- OC学习笔记
备注:这里只是个人的观点,有的地方也是copy,多多指教,个人笔记,有侵犯你们版权的地方还望海涵!!! ARC单例模式的实现 使用alloc方法初始化一个类的实例的时候,默认是调用了 allocWit ...
- traceroute命令初探
一.学习目标 了解traceroute基本概念 了解traceroute工作原理及详细过程 熟悉traceroute常用命令 一些注意点 二.traceroute基本概念 traceroute (Wi ...
- 浅入浅出JDBC————1分钟了解JDBC
一.了解基本的几个jdbc需要的类 1.1DriverManager类 DriverManager类是一个jdbc的驱动服务类.通常使用该类获得一个Connection对象,得到一个数据库的链接. 1 ...
- day06python 哈希 字典集合嵌套
1.hash算法 hash算法 :内存中将值进行hash算法得到一个数值存储在内存中,查找也会按照算法进行查找,使用hash算法 执行效率高相对于list的索引查找 (字典,集合):使用的是hash查 ...
- Oracle数据库-sqlplus命令下出现SP2-0640: Not connected
可以正常登录sqlplus,通过sys as sysdba 但在sql>输入语句,反馈如下 解决方法: sql>输入conn sys/as sysdba Enter password: c ...
- 使用Log4net 日志系统
官方文档 http://logging.apache.org/log4net/release/config-examples.html C# 项目中直接使用nuget,下载Apache的log4net ...
- POJ2376 Cleaning Shifts
题意 POJ2376 Cleaning Shifts 0x50「动态规划」例题 http://bailian.openjudge.cn/practice/2376 总时间限制: 1000ms 内存限制 ...
- PythonStudy——Python中的None与 NULL(即空字符)的区别
None与 NULL(即空字符)的区别 (1)是不同的一种数据类型 >>>type(None) <class 'NoneType'> >>>type( ...
- Linux useful commands
cat misc. cat xxx | more cat xxx | less cat > xxx , create a file xxx cat -n xxx | more with line ...