python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
admin
2023-07-31 02:09:27
0

baiduclient.py

复制代码 代码如下:
import urllib.parse
import gzip
import json
import re
from http.client import HTTPConnection
from htmlutils import TieBaParser
import httputils as utils

# 请求头
headers = dict()
headers[\”Connection\”] = \”keep-alive\”
headers[\”Cache-Control\”] = \”max-age=0\”
headers[\”Accept\”] = \”text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\”
headers[\”User-Agent\”] = \”Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36\”
headers[\”Content-Type\”] = \”application/x-www-form-urlencoded\”
headers[\”Accept-Encoding\”] = \”gzip,deflate,sdch\”
headers[\”Accept-Language\”] = \”zh-CN,zh;q=0.8\”
headers[\”Cookie\”] = \”\”

# cookie
cookies = list()

# 个人信息
userInfo = {}

def login(account, password):
    \’\’\’登录\’\’\’
    global cookies
    headers[\”Host\”] = \”wappass.baidu.com\”
    body = \”username={0}&password={1}&submit=%E7%99%BB%E5%BD%95&quick_user=0&isphone=0&sp_login=waprate&uname_login=&loginmerge=1&vcodestr=&u=http%253A%252F%252Fwap.baidu.com%253Fuid%253D1392873796936_247&skin=default_v2&tpl=&ssid=&from=&uid=1392873796936_247&pu=&tn=&bdcm=3f7d51b436d12f2e83389b504fc2d56285356820&type=&bd_page_type=\”
    body = body.format(account, password)
    conn = HTTPConnection(\”wappass.baidu.com\”, 80)
    conn.request(\”POST\”, \”/passport/login\”, body, headers)
    resp = conn.getresponse()
    cookies += utils.getCookiesFromHeaders(resp.getheaders())
    utils.saveCookies(headers, cookies)
    # 登录成功会返回302
    return True if resp.code == 302 else False
   

def getTieBaList():
    \’\’\’获取已关注的贴吧列表\’\’\’
    conn = HTTPConnection(\”tieba.baidu.com\”, 80)
    conn.request(\”GET\”, \”/mo/m?tn=bdFBW&tab=favorite\”, \”\”, headers)
    resp = conn.getresponse()   
    tieBaParser = TieBaParser()
    tieBaParser.feed(resp.read().decode())
    tbList = tieBaParser.getTieBaList()
    return tbList
   

def getSignInfo(tieBaName):
    \’\’\’获取贴吧签到信息\’\’\’
    queryStr = urllib.parse.urlencode({\”kw\”:tieBaName, \”ie\”:\”utf-8\”, \”t\”:0.571444})
    conn = HTTPConnection(\”tieba.baidu.com\”, 80)
    conn.request(\”GET\”, \”/sign/loadmonth?\” + queryStr, \”\”, headers)
    data = gzip.decompress(conn.getresponse().read()).decode(\”GBK\”)
    signInfo = json.loads(data)
    return signInfo

    
tbsPattern = re.compile(\’\”tbs\” value=\”.{20,35}\”\’)

def signIn(tieBaName):
    \’\’\’签到\’\’\’
    # 获取页面中的参数tbs
    conn1 = HTTPConnection(\”tieba.baidu.com\”, 80)
    queryStr1 = urllib.parse.urlencode({\”kw\”: tieBaName})
    conn1.request(\”GET\”, \”/mo/m?\” + queryStr1, \”\”, headers)
    html = conn1.getresponse().read().decode()
    tbs = tbsPattern.search(html).group(0)[13:-1]
    # 签到
    conn2 = HTTPConnection(\”tieba.baidu.com\”, 80)
    body = urllib.parse.urlencode({\”kw\”:tieBaName, \”tbs\”:tbs, \”ie\”:\”utf-8\”})
    conn2.request(\”POST\”, \”/sign/add\” , body , headers)
    resp2 = conn2.getresponse()
    data = json.loads((gzip.decompress(resp2.read())).decode())
    return data
   

def getUserInfo():
    \’\’\’获取个人信息\’\’\’
    headers.pop(\”Host\”)
    conn = HTTPConnection(\”tieba.baidu.com\”, 80)
    conn.request(\”GET\”, \”/f/user/json_userinfo\”, \”\”, headers)
    resp = conn.getresponse()
    data = gzip.decompress(resp.read()).decode(\”GBK\”)
    global userInfo
    userInfo = json.loads(data)

if __name__ == \”__main__\”:
    account = input(\”请输入帐号:\”)
    password = input(\”请输入密码:\”)

    ok = login(account, password)
    if ok:
        getUserInfo()
        print(userInfo[\”data\”][\”user_name_weak\”] + \”~~~登录成功\”, end=\”\\n——\\n\”)
        for tb in getTieBaList():
            print(tb + \”吧:\”)
            signInfo = signIn(tb)
            if signInfo[\”no\”] != 0:
                print(\”签到失败!\”)
                print(signInfo[\”error\”])
            else:
                print(\”签到成功!\”)
                print(\”签到天数:\” + str(signInfo[\”data\”][\”uinfo\”][\”cout_total_sing_num\”]))
                print(\”连续签到天数:\” + str(signInfo[\”data\”][\”uinfo\”][\”cont_sign_num\”]))
            print(\”——\”)
    else:
        print(\”登录失败\”)

htmlutils.py

复制代码 代码如下:
\’\’\’
Created on 2014-2-20

@author: Vincent
\’\’\’

from html.parser import HTMLParser

class TieBaParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self.tieBaList = list()
        self.flag = False

    def getTieBaList(self):
        return self.tieBaList

    def handle_starttag(self, tag, attrs):
        if tag == \”a\”:
            for name , value in attrs:
                if name == \”href\” and \”m?kw=\” in value:
                    self.flag = True

    def handle_data(self, data):
        if self.flag:
            self.tieBaList.append(data)
            self.flag = False

httputils.py

复制代码 代码如下:
\’\’\’
Created on 2014-2-20

@author: Vincent
\’\’\’
def getCookiesFromHeaders(headers):
    \’\’\’从http响应中获取所有cookie\’\’\’
    cookies = list()
    for header in headers:
        if \”Set-Cookie\” in header:
            cookie = header[1].split(\”;\”)[0]
            cookies.append(cookie)
    return cookies

def saveCookies(headers, cookies):
    \’\’\’保存cookies\’\’\’
    for cookie in cookies:
        headers[\”Cookie\”] += cookie + \”;\”

def getCookieValue(cookies, cookieName):
    \’\’\’从cookies中获取指定cookie的值\’\’\’
    for cookie in cookies:
        if cookieName in cookie:
            index = cookie.index(\”=\”) + 1
            value = cookie[index:]
            return value

def parseQueryString(queryString):
    \’\’\’解析查询串\’\’\’
    result = dict()
    strs = queryString.split(\”&\”)
    for s in strs:
        name = s.split(\”=\”)[0]
        value = s.split(\”=\”)[1]
        result[name] = value
    return result

相关内容

热门资讯

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