python模拟登录segmentfault及备份文章
admin
2023-07-31 01:44:44
0

直接post登录失败

一般的网站确实直接post之后就登录成功了,然后拿到cookie想怎么就怎么。不过的确世事难料,失败在所难免。

首先是人肉登录,用chrome的network栏查看post了些什么东西,有三项:

  • mail

  • password

  • remember

地址是http://segmentfault.com/api/user/login?_=0b1bc2ca95203748b804e69ac2cfab06,后面那个32位的token是随机的,每次都不一样。怎么找到这个值呢?用chrome工具栏进行调试打断点找(记得先按\'{}\’格式化代码),从发XHR的地方开始,用call stack逐步缩小范围,直到找到token被加上的地方,值也就能找到了。这个过程还是很麻烦的。。。

最终能找到这个值为window.SF.token,你百度一下它会发现segmentfault上已经有文章写过用node模拟登录,不过在js文件里全局搜索_=这种方法略投机。我表示我完全没有参考它,因为我找到window.SF.token去搜索后才发现那文章,不然直接拿来主义了

这个值附在window上,没法js压缩混淆,所以肯定有个赋值的地方,稍微找找,发现就在登录页的html里。

用python获得网页内容,提取出含token的那段代码,包括for循环中的数字,千方百计把token计算出来,拿去post,失败。加上headerscookies伪装浏览器,注意,当前这个cookies应该是匿名cookie,以防万一加上的,里面没有有效的能标记已经登录的session值。继续尝试post,成功,但是还是未登录状态。重新人肉登录检查发送xhr的地方,还有好几处,稍微尝试了一下模拟这几个发送,没有成功。经过分析发现,有效登录标记是一个叫sr_remembercookie值,但具体过程我确实没分析出来,现在的登录里回调和跳转太多了,分析过程就很麻烦,再用python模拟单个请求,很低效且不易成功

使用phantomjs

那就用最简单的方法,在python中直接模拟浏览器的js运行环境,试了试Ghost.py,大坑,好像是网页中有用到localStorage等的地方就直接崩溃了,而且它依赖于PySide,这个真的是非常费事,要装的朋友切忌选择下载源代码编译安装,否则你会发现pip install PySide之后半天没动静,前者至少都能给你点动静(编译估计要几十分钟吧)。PyV8安装没成功,好像是Ei Capitan的问题,放弃。

最后就选择了selenium+Phantomjs, selenium可以直接驱动phantomjs,很方便。这一瞬间我感觉自己相当明白为什么PySpider里要用Phantomjs了。

如前所说,用phantomjs模拟登录拿到cookie,然后python带上cookie去取文章备份就好了,用tornado加了点并发,代码放到github上了,地址,欢迎使用及拍砖

以上

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...