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

上一篇用requests模拟请求,最后没有拿到cookies。今天偶尔看一篇HTTP相关的文章,发现在某些请求返回的header中会有set-cookie字段,很明显之前的失败应该是没有接收到包含这个字段的response。自己尝试人肉登录发现,cookie中的sf_remember字段是登录成功后跳转到首页时进行set-cookie的,而不是post的时候设置的。所以今天为了更好地模拟请求,使用request.Session来进行,这样cookie就不用自己去同步了,能更好地模拟浏览器行为

def _get_user_cookies(self):
        s = requests.Session()
        s.headers.update(headers)
        rep = s.get(target_url)
        post_url = \"%s%s?_=%s\" % (target_url, login_api_path,
                                  self.get_req_from_html(rep.text))
        data = {
            \'mail\': self.username,
            \'password\': self.passwd,
        }
        s.post(post_url, data=data)

通过反复登陆,我发现必须带要带headers,而headers必须的字段只有Referer,这样才能post成功,成功后会经过一个302重定向到首页,经历这个过程便能登陆成功。我查看登陆成功后的cookies,如下:

]>

并没有sf_remember这个字段,可能是因为我在post的时候没有使用remember字段(记住该用户那个),说明之前想当然认为该字段就是标记登录是不可靠的,标记登录的很有可能只是PHPSESSID这个值而已。下图登录后的所有cookies

因此模拟登录及备份文章就不需要phantomjs了,只用requests就足够,当然这只是对于segmemtfault来说,对于微博那种动态的,说不定就只能用Phantomjs,当然能分析出请求过程就能最大限度地使用简单方法来做自己想做的事

代码在这儿,增加了打印文章信息及耗时信息的功能,截图如下:

总结:

对于登录(或其它任何post行为)时由登录链接直接进行跳转的(跳转次数不限),可以直接用requests模拟,它的Session完全可以跟随这种跳转行为。
对于跳转是由网页中的js脚本所控制的,使用phantomjs这种模拟真实浏览器行为,可以更容易保证其完成整个登录行为,相对地因为模拟的成本速度会慢一些。而且这种类型,理论上也是可以用requests模拟出来的,但是需要事先去分析导致跳转的js代码,会比较麻烦且不一定能成为,如果成功则可以提速。比如网易云音乐的艺人页面,请求了两个doc,其实只有第二个是需要的。

相关内容

热门资讯

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...