转载——Python模拟登录代码
'''
Created on 2014-2-20 @author: Vincent
'''
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("登录失败")
baiduclient.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
htmlutils.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
httputils.py
转载——Python模拟登录代码的更多相关文章
- Python模拟登录代码
注:访问http://127.0.0.1:8080/user/6,总是会要求必须有登录权限,也就是,若未登录,访问该页面,会跳转到登陆页面. 全自动模拟登录 半自动模拟登录:
- 【Python数据分析】Python模拟登录(一) requests.Session应用
最近由于某些原因,需要用到Python模拟登录网站,但是以前对这块并不了解,而且目标网站的登录方法较为复杂, 所以一下卡在这里了,于是我决定从简单的模拟开始,逐渐深入地研究下这块. 注:本文仅为交流学 ...
- [Python] Python 模拟登录,并请求
Python 模拟登录,并请求 # encoding: utf- import requests import socket import time socket.setdefaulttimeout( ...
- 【py登陆】python模拟登录
用Python模拟登录网站 前面简单提到了 Python 模拟登录的程序,但是没写清楚,这里再补上一个带注释的 Python 模拟登录的示例程序.简单说一下流程:先用cookielib获取cookie ...
- 忘记秘密利用python模拟登录暴力破解秘密
忘记秘密利用python模拟登录暴力破解秘密: #encoding=utf-8 import itertools import string import requests def gen_pwd_f ...
- Python模拟登录实战(三)
目标:模拟登录知乎 代码如下: #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'ziv·chan' import re impor ...
- Python模拟登录实战(二)
目标:1.模拟登录豆瓣,2.自动更改签名和发表说说. 代码如下: #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'ziv·chan ...
- Python模拟登录实战(一)
今天,学习了模拟登录新浪微博.模拟登录主要有两种方式,一.利用Cookie:二.模仿浏览器的请求,发送表单. 法一: Cookie:指某些网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密 ...
- Python模拟登录的几种方法
目录 方法一:直接使用已知的cookie访问 方法二:模拟登录后再携带得到的cookie访问 方法三:模拟登录后用session保持登录状态 方法四:使用无头浏览器访问 正文 方法一:直接使用已知的c ...
随机推荐
- Python入门(一,Ubuntu环境搭建)
一,Python下载 下载地址:http://www.python.org/download/ 二,安装 在Ubuntu平台上安装Python步骤: 1.解压缩下载的源码压缩包 2.在解压缩的目录下执 ...
- PHP内置的字符串处理函数
字符串的特点 1.其他类型的数据用在字符串类型处理函数中,会自动将其转化成字符串后,在处理 <?php echo substr("abcdefghijklmn",2,4 ...
- arcgis显示其他国家语言
接手一个韩国的项目,需要在arcmap中配置一个韩国地图并发布到arcserver中进行切图,给的韩国地图的shapefile文件中属性字段都是韩文的,在中文的系统中,arcMap中显示的韩文都是乱码 ...
- JQuery事件手册
blur.focus blur失去焦点:focus获得焦点 load 当指定的元素(及子元素)已加载时,会发生 load() 事件 resize 当调整浏览器窗口的大小时,发生 resize ...
- 转载: SQL Server中的索引
http://www.blogjava.net/wangdetian168/archive/2011/03/07/347192.html 1 SQL Server中的索引 索引是与表或视图关联的磁盘上 ...
- 优先队列(Priority Queue)
优先队列(Priority Queue) A priority queue must at least support the following operations: insert_with_pr ...
- JS基础知识(数组)
1,数组 var colors = new Array(); var colors = new Array(20); var colors = new Array(“red”, “blue”, “gr ...
- php 滑动验证码
自己研究: jQuery拖拽滑动验证码插件 slideunlock.js 原理:(别人说) 响应时间,拖拽速度,时间,位置,轨迹,重试次数等.这些因素能够构成一个采样结果或者辨识特性. 只获取到滑动时 ...
- php部分---面向对象静态、抽象类、oop接口、加载类、魔术方法、关键字。
静态 static关键字 普通成员普通成员是属于对象的 静态成员静态成员是属于类的 普通方法里面可以调用静态成员静态方法里面不能调用普通成员self关键字 在类里面代表该类 普通类class Ren ...
- Docker网络管理
一.Docker的四种网络模式(host.container.none.bridge) 1. host模式,使用docker run时使用--net=host指定,docker使用的网络实际上和宿主机 ...