Python获取新浪微博cookie模拟登录

这次尝试模拟登录微博,获取com网站cookie,cn不可用。

分析网站

  1. 首先打开weibo.com微博登录页面,如果已经登录需要先退出(其他的com登录页应该也是可以的)。

  1. 打开chrome调试,查看传输状态。清除记录之后勾选 preserve log,再输入帐号,当输入完帐号鼠标点击空白之后,会触发一个js事件,如上图。打开这个请求网址之后:发现这个json字典数据包含着下一步需要用的登录表单,所以先注意一下,回头再看。

  1. 输入密码之后登录,观察数据包。login.php看名字好像就是登录的请求了。 再看看它提交的数据,sp就是密码,su就是帐号。其他的数据怎么得到呢,我们就需要找到它执行的ssologin.js了。


  1. 这个包也可以在js中找到,之后打开这个文件会看到一整片没有格式化的js代码,很头疼。可以<c-f> 查找关键字 rsa2,这一块就是加密代码,很深奥有没有。这一块搞了半天最后还是google出来的.-.-.


OK,到这已经乱了。。。整理一下思路。

我们登录的步骤是:输入帐号 -> 网页返回prelogin,这个里面包含表单信息 -> 网页调用ssologin.js加密数据 -> 提交数据。


我们就需要:获得prelogin数据 -> 用python仿照ssologin.js把数据加密 -> 提交。

上代码

  • 请求prelogin,获取所需参数。用正则表达式截取字典,用eval函数把字符串转换成字典类型,分别获取值。
prelogin_url = r'https://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=&rsakt=mod&client=ssologin.js(v1.4.15)'  #noqa
def Prelogin(prelogin_url):
    data = requests.get(prelogin_url).content.decode('utf-8')
    p = re.compile('\((.*)\)')
    data_str = p.search(data).group(1)
    server_data_dict = eval(data_str)
    pubkey = server_data_dict['pubkey']
    servertime = server_data_dict['servertime']
    nonce = server_data_dict['nonce']
    rsakv = server_data_dict['rsakv']
    return pubkey, servertime, nonce, rsakv
  • 有了上面的数据就可以加密帐号密码了,帐号是由url加密,再用base64加密。密码就比较复杂了,基本按照ssologin.js来。
def RSAEncoder(username, password, pubkey, servertime, nonce):
    su_url = urllib.parse.quote_plus(username)
    su_encoded = su_url.encode('utf-8')
    su = base64.b64encode(su_encoded)
    su = su.decode('utf-8')
    rsaPublickey = int(pubkey, 16)
    e = int('10001', 16)
    key = rsa.PublicKey(rsaPublickey, e)
    message = str(servertime) + '\t' + str(nonce) + '\n' + str(password)
    password = rsa.encrypt(message.encode('utf-8'), key)
    sp = binascii.b2a_hex(password)
    return su, sp
  • 数据准备好了之后就能填表单了。
def PostData(username, password, pubkey, servertime, nonce, rsakv):
    su, sp = RSAEncoder(username, password, pubkey, servertime, nonce)
    post_data = {
        'encoding': 'UTF-8',
        'entry': 'weibo',
        'from': '',
        'gateway': '1',
        'nonce': nonce,
        'pagerefer': '',
        'prelt': '645',
        'pwencode': 'rsa2',
        'returntype': 'META',
        'rsakv': rsakv,
        'savestate': '7',
        'servertime': str(servertime),
        'service': 'miniblog',
        'sp': sp,
        'sr': '1920*1080',
        'su': su,
        'url': 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack', #noqa
        'useticket': '1',
        'vsnf': '1',
    }
    return post_data
  1. 可以登录了。第一次请求到的网页不是登录成功的页面,而是一个重定向,如图,用正则表达式提取网址,进行访问,成功!
def login(self):
    pubkey, servertime, nonce, rsakv = Prelogin(self.prelogin_url)
    post_data = PostData(self.username, self.password, pubkey, servertime,
                         nonce, rsakv)
    session = requests.Session()
    response = session.post(self.login_url, params=post_data,
                            headers=self.headers)
    text = response.content.decode('gbk')
    pa = re.compile(r'location\.replace\(\'(.*?)\'\)')
    redirect_url = pa.search(text).group(1)
    response = session.get(redirect_url, headers=self.headers)
    print(session.cookies)

GitHub开源地址:https://github.com/matianhe/crawler

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,846评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,637评论 18 139
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,066评论 4 62
  • 《老子》曰:“大白若辱,大方无隅,大器晚成,大音希声,大象无形,道隐无名。夫唯道,善始且善成。” 最洁白的好像污浊...
    王舒亮阅读 709评论 1 0
  • 语言的暗示作用非常大,虽说尽信书则无,可有时人却有意识无意识的受他人的语言暗示改变自己的决策。当一个人在犹豫...
    盖小伍呀阅读 142评论 0 2