1、登入飞卢小说网
import time
import hashlib
import random
import requests
from PIL import Image
from tujianAPI import base64_api
from configparser import ConfigParser
class 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_pwd
if __name__ == '__main__':
user, pwd, tujian_user, tujian_pwd = get_user_data()
feilu = Feilu(user, pwd, tujian_user, tujian_pwd)
feilu.run()