python-微博模拟登陆

微博的的模拟登陆是比较坑的,看了网上很多大神的帖子,自己又看了微博的登陆时的json数据:1、发现登陆时在输入账号时用chrome可以看到会有一个prelogin之类的网址,网址后面会有大串的随机数。我测试了下,发现在没有随机数的情况下的网址也能得到所需要的severtime、nonce、等几个数据。2、通过chrome查看json数据就可以看到用户名和密码的加密方式,再找了网上大神的资料就可以得到用户名su、和密码sp。再把数据post 上去就可以得到一个重定向的微博登陆网址。3、将这个网址用正则表达式提取出来,再带上cookie数据就可以登陆了。然后你想干什么就干什

# _*_coding:utf-8 _*_

import base64
import urllib
import urllib2
import re
import rsa
import cookielib

class Weibo(object):

    def __init__(self, username, password):
        self.user = base64.b64encode(username)
        self.pwd = password

    @property
    def get_pre_url_values(self):
        values_dict = {}
        su = self.user
        pre_url = ‘https://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=‘                        + str(su[:-1]) + ‘%3D&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.18)‘
        header = {
            ‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36‘
        }

        request = urllib2.Request(pre_url, headers=header)
        html = urllib2.urlopen(request).read().decode(‘utf-8‘)

        p = re.compile(r‘"servertime":(.*?),‘)
        values_dict[‘servertime‘] = p.search(html).group(1).strip(‘\"‘)

        p1 = re.compile(r‘"pcid":(.*?),‘)
        values_dict[‘pcid‘] = p1.search(html).group(1).strip(‘\"‘)

        p2 = re.compile(r‘"nonce":(.*?),‘)
        values_dict[‘nonce‘] = p2.search(html).group(1).strip(‘\"‘)

        p3 = re.compile(r‘"pubkey":(.*?),‘)
        values_dict[‘pubkey‘] = p3.search(html).group(1).strip(‘\"‘)

        p4 = re.compile(r‘"rsakv":(.*?),‘)
        values_dict[‘rsakv‘] = p4.search(html).group(1).strip(‘\"‘)

        return values_dict

    def get_password(self, blog_values):
        ‘‘‘
            这个函数是微博的json数据和网上的大神方法的出来的(抄来的)^_^
        ‘‘‘

        rsapubkey = int(blog_values[‘pubkey‘], 16)
        key = rsa.PublicKey(rsapubkey, 65537)
        massage = str(blog_values[‘servertime‘]) + ‘\t‘ + str(blog_values[‘nonce‘]) + ‘\n‘ + str(self.pwd)
        password = rsa.encrypt(massage, key)
        sp = password.encode(‘hex‘)
        return sp

    def login_weibo(self, blog_values, sp):

        values = {
            ‘entry‘: "weibo",
            ‘gateway‘: ‘1‘,
            ‘from‘: ‘‘,
            ‘savestate‘: ‘7‘,
            ‘userticket‘: ‘1‘,
            ‘pagerefer‘: "",
            ‘cfrom‘: ‘1‘,
            ‘vsnf‘: ‘1‘,
            ‘su‘: self.user,
            ‘service‘: ‘miniblog‘,
            ‘servertime‘: blog_values[‘servertime‘],
            ‘nonce‘: blog_values[‘nonce‘],
            ‘pwencode‘: ‘rsa2‘,
            ‘rsakv‘: blog_values[‘rsakv‘],
            ‘sp‘: sp,
            ‘sr‘: "1440*900",
            ‘encoding‘: ‘UTF-8‘,
            ‘prelt‘: ‘503‘,
            ‘url‘: ‘http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack‘,
            ‘returntype‘: ‘META‘
        }

        header = {
            ‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36‘
        }
        url = ‘http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.18)‘

        ‘‘‘获取cookie信息 ‘‘‘
        cj = cookielib.CookieJar()
        cj_support = urllib2.HTTPCookieProcessor(cj)
        opener = urllib2.build_opener(cj_support)

        data = urllib.urlencode(values)
        try:
            response = urllib2.Request(url, headers=header, data=data)
            html = opener.open(response).read().decode(‘gbk‘)
        except Exception, e:
            print e.message

        p = re.compile(r‘location\.replace\(\‘(.*?)\‘\)‘)
        url = p.search(html).group(1)
        try:
            url_request = urllib2.Request(url)
            response_url = opener.open(url_request)
            page = response_url.read().decode(‘utf-8‘)
            p2 = re.compile(r‘"userdomain":"(.*?)"‘)
            dom = p2.search(page).group(1)

            login_url = ‘http://weibo.com/‘ + dom
            request_login_url = urllib2.Request(login_url)
            response_login_url = opener.open(request_login_url)
            per_html = response_login_url.read().decode(‘utf-8‘)
        except Exception:
            per_html = ‘登陆失败‘

        return per_html

if __name__ == ‘__main__‘:

    wbobj = Weibo(‘用户名‘, ‘密码‘)
    sp = wbobj.get_password(wbobj.get_pre_url_values)
    html = wbobj.login_weibo(blog_values=wbobj.get_pre_url_values, sp=sp)
    print html

么,比如:把女神的照片全要了、自动查看女神的微博并将邮件发给你,下次再来弄这个。最近失眠的厉害,快点找到工作吧!!

时间: 2024-08-23 23:41:56

python-微博模拟登陆的相关文章

微博模拟登陆后发文字微博以及自动关注用户

import requestsimport base64import timeimport rsaimport binasciiimport urllib.parseimport re,urllibfrom bs4 import BeautifulSoupclass WeiBo(): def __init__(self): self.session = requests.session() self.headers = { 'User-Agent':'Mozilla/5.0 (Windows N

python爬虫 模拟登陆校园网-初级

最近跟同学学习爬虫的时候看到网上有个帖子,好像是山大校园网不稳定,用py做了个模拟登陆很有趣,于是我走上了一条不归路..... 先上一张校园网截图 首先弄清一下模拟登陆的原理: 1:服务器判定浏览器登录使用浏览器标识,需要模拟登陆 2: 需要post账号,密码,以及学校id python走起,我用的2.7版本,用notepad++写的,绑定python可以直接运行 由于是模拟网页登陆,需要导入urllib urllib2 cookielib库,前两个有与网页直接的接口,cookielib就是用来

腾讯微博模拟登陆+数据抓取(java实现)

不多说,贴出相关代码. 参数实体: package token.def; import java.io.Serializable; import java.util.Properties; public class TLoginParams implements Serializable { private static final long serialVersionUID = 6120319409538285515L; private String saltUin; private Stri

python requests模拟登陆正方教务管理系统,并爬取成绩

最近模拟带账号登陆,查看了一些他人的博客,发现正方教务已经更新了,所以只能自己探索了. 登陆: 通过抓包,发现需要提交的值 需要值lt,这是个啥,其实他在访问登陆页面时就产生了 session=requests.Session() response = session.get(login_url, headers=header) cookies = response.cookies for c in cookies: cookie = c.name + '=' + c.value print('

使用python - selenium模拟登陆b站

思路 输入用户名密码点击登陆 获取验证码的原始图片与有缺口的图片 找出两张图片的缺口起始处 拖动碎片 功能代码段 # 使用到的库 from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_condit

python requests模拟登陆github

1. Cookie 介绍 HTTP 协议是无状态的.因此,若不借助其他手段,远程的服务器就无法知道以前和客户端做了哪些通信.Cookie 就是「其他手段」之一. Cookie 一个典型的应用场景,就是用于记录用户在网站上的登录状态. 用户登录成功后,服务器下发一个(通常是加密了的)Cookie 文件. 客户端(通常是网页浏览器)将收到的 Cookie 文件保存起来. 下次客户端与服务器连接时,将 Cookie 文件发送给服务器,由服务器校验其含义,恢复登录状态(从而避免再次登录). 2. req

第二阶段---python基础--模拟登陆

说明: 1.用户原文件存储在文件中_userinfo 2.判断是否存在登陆错误的用户_被锁定的用户_wrong_name2,没有创建,并写入用户文件头username,带逗号,锁定用户以'逗号'隔开; 3.判断输入用户是否存在锁定账户中(取出用户名,存入列表,) 4.逻辑控制,用户名,或秘密超过3次记录该用户的用户名到文件; import osif os.path.exists('wrong_name2'):    file_wrong=open('wrong_name2')    f=file

python selenium 模拟登陆百度账号

代码: from selenium import webdriver url = 'https://passport.baidu.com/v2/?login' username = 'your_username' passwd = "your_password" driver = webdriver.Chrome() # 打开chrome浏览器 driver.get(url) # 打开指定的网页 input_username = driver.find_element_by_id(&q

Python模拟登陆万能法-微博|知乎

Python模拟登陆让不少人伤透脑筋,今天奉上一种万能登陆方法.你无须精通HTML,甚至也无须精通Python,但却能让你成功的进行模拟登陆.本文讲的是登陆所有网站的一种方法,并不局限于微博与知乎,仅用其作为例子来讲解. 用到的库有"selenium"和"requests".通过selenium进行模拟登陆,然后将Cookies传入requests,最终用requests进行网站的抓取.优点就是不但规避了"selenium"其本身抓取速度慢的问题

Python模拟登陆万能法

此文转自:https://zhuanlan.zhihu.com/p/28587931   转录只是为了方便学习,感谢他的分享 Python模拟登陆让不少人伤透脑筋,今天奉上一种万能登陆方法.你无须精通HTML,甚至也无须精通Python,但却能让你成功的进行模拟登陆.本文讲的是登陆所有网站的一种方法,并不局限于微博与知乎,仅用其作为例子来讲解. 用到的库有"selenium"和"requests".通过selenium进行模拟登陆,然后将Cookies传入reque