1、登入飞卢小说网
import timeimport hashlibimport randomimport requestsfrom PIL import Imagefrom tujianAPI import base64_apifrom configparser import ConfigParserclass Feilu(object): def __init__(self, user, pwd, tujian_user, tujian_pwd): self.url = "https://u.faloo.com/regist/Login.aspx" self.headers = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'zh-CN,zh;q=0.9', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive', 'Cookie': 'ASP.NET_SessionId=ltyv4wsdbit0v2igns4vw3du; UU12345678=uuc=132423621361652058291515237; curr_url=https%3A//b.faloo.com/%3Fran%3D0.8010790778358112', 'Host': 'u.faloo.com', 'Pragma': 'no-cache', 'Sec-Fetch-Dest': 'document', 'Sec-Fetch-Mode': 'navigate', 'Sec-Fetch-Site': 'same-origin', 'Sec-Fetch-User': '?1', 'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36', } self.user = user self.pwd =pwd self.tujian_user = tujian_user self.tujian_pwd = tujian_pwd self.session = requests.Session() def get_params(self): """构造登入时需要的完整的params参数""" captcha = self.get_img_code() ts, pwd_md5 = self.get_md5_pwd() ts = str(int(time.time())) params = { 'txtUserID': self.user, 'txtPwd': pwd_md5, 'txtPwd4temp': '', 'verifyCode': captcha, 'ts': ts, 't': '2', 'pr629517': '0820', 'backurl': 'https://b.faloo.com/?ran=0.8010790778358112', } return params def get_img_code(self): """将请求到的验证码图片保存到本地,通过图鉴接口来将验证码图片转为文字""" img_code_url = "http://u.faloo.com/Common/ValidateImage.aspx?vt=login_code&lc=true&u=xiaobink&height=36&width=106&m=" + str( random.random()) res = requests.get(img_code_url) with open('imgcode.png', "wb") as f: f.write(res.content) img = Image.open("imgcode.png") try: captcha = base64_api(uname=self.tujian_user, pwd=self.tujian_pwd, img=img) return captcha except: print("验证码获取失败") def get_md5_pwd(self): """构造md5加密后的密码,返回时间戳与加密后的密码""" pwd = self.pwd ts = str(int(time.time())) result = hashlib.md5(("EW234@![#$&]*{,OP}Kd^w349Op+-32_" + pwd + ts).encode()) pwd_md5 = hashlib.md5(("@345Kie(873_dfbKe>d3<.d23432=" + result.hexdigest()).encode()).hexdigest() return ts, pwd_md5 def get_response(self, params): # 实现登入 self.session.get(self.url, headers=self.headers, params=params) # 登入后,请求跳转页的数据 url = 'https://b.faloo.com/' res = self.session.get(url) res.encoding = 'gb2312' return res def run(self): # 构造登入时需要的完整的params参数 params = self.get_params() # 实现登入,获取登入后的响应 res = self.get_response(params) print(res.text) with open('feilu.html', 'wb') as f: f.write(res.content)def get_user_data(): """从文件中获取自己的账号密码""" cfg = ConfigParser() cfg.read('user_data.ini') user = cfg.get("user", "user") pwd = cfg.get("pwd", "pwd") tujian_user = cfg.get("tujian_user", "tujian_user") tujian_pwd = cfg.get("tujian_pwd", "tujian_pwd") return user, pwd, tujian_user, tujian_pwdif __name__ == '__main__': user, pwd, tujian_user, tujian_pwd = get_user_data() feilu = Feilu(user, pwd, tujian_user, tujian_pwd) feilu.run()