爬虫模拟登录的思路

创建时间 2020年7月6日

通过对 COOKIES 的分析找出登录必需的 COOKIE,剔除可能会导致登录状态失效的 COOKIE(有些过期时间短的非必要 COOKIE 可能会导致模拟登录失败)。

方法并不局限于 B 站,对绝大部分网站来说都是适用的。

1. 分析必需 COOKIE

  1. 抓包登录接口获取返回的 Set-Cookie 值
  2. 在站点信息中找 COOKIE,然后去除不必要 COOKIE 然后保存必须 COOKIE

对第 2 步去除 COOKIE来说,有如下技巧:

  • 看名字
  • 看过期时间

一般来说名字奇特的 COOKIE(比如名字像乱码什么的)和过期时间超长(短)的 COOKIE 都可以先尝试在 COOKIE 管理面板删除,如果删除后出现了登录状态失效的情况,下次避开这些 COOKIE 即可(实际上这些 COOKIE 就是登录必需的 COOKIE)。

碰到名字全大写的 COOKIE 就要注意了,这些 COOKIE 可能有着重要作用,在觉得不必要的 COOKIE 都删除完毕后可以尝试删除这些 COOKIE,然后找出登录必需的 COOKIE。

找到登录必需 COOKIE 后只需要记录下这些 COOKIE 的过期时间然后在它们过期之前更新其值即可。

2. 通过爬虫模拟登录

有了第一步的 COOKIE 之后这一步就非常简单了,我们只需要在请求头的 cookie 字段内添加第一步获取的 cookie 即可。

这里对于 COOKIE 的保存个人推荐把 COOKIE 放到文本文件中或是环境变量里,总之不要硬编码到代码里,这样可能导致盗号的发生。当然如果只是测试代码而不上传到 Github 之类的地方为了方便还是可以把 COOKIE 放到代码里的。

参考代码如下,这里我用发送B站动态作为例子。

import requests

# 放入对应的 COOKIE
SESSDATA = ''
bili_jct = ''

def format_headers():
    headers = {
        'user-agent': 'wasp',
        'origin': 'https://t.bilibili.com',
        'referer': 'https://t.bilibili.com',
        # 在这里放入第一步筛选出的 cookie
        'cookie': 'SESSDATA={}; bili_jct={};'.format(SESSDATA, bili_jct)
    }

    return headers

def send_message(content):
    api = 'https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/create'

    data = {
        'dynamic_id': 0,
        'type': 4,
        'rid': 0,
        'content': content,
        'up_choose_comment': 0,
        'extension': '{"emoji_type":1,"from":{"emoji_type":1}}', # 这里要打引号
        'at_uids': '',
        'ctrl': [],
        'csrf_token': bili_jct
    }

    r = requests.post(api, data=data, headers=format_headers())

    return r.content.decode()

3. COOKIE 只保存至会话结束?

尝试过模拟学校的教务系统登录,最后死在了密码加密(懒)。对于这类网站暂时没什么需求所以就先放着好了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值