1、登入飞卢小说网

  1. import time
  2. import hashlib
  3. import random
  4. import requests
  5. from PIL import Image
  6. from tujianAPI import base64_api
  7. from configparser import ConfigParser
  8. class Feilu(object):
  9. def __init__(self, user, pwd, tujian_user, tujian_pwd):
  10. self.url = "https://u.faloo.com/regist/Login.aspx"
  11. self.headers = {
  12. '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',
  13. 'Accept-Encoding': 'gzip, deflate, br',
  14. 'Accept-Language': 'zh-CN,zh;q=0.9',
  15. 'Cache-Control': 'no-cache',
  16. 'Connection': 'keep-alive',
  17. 'Cookie': 'ASP.NET_SessionId=ltyv4wsdbit0v2igns4vw3du; UU12345678=uuc=132423621361652058291515237; curr_url=https%3A//b.faloo.com/%3Fran%3D0.8010790778358112',
  18. 'Host': 'u.faloo.com',
  19. 'Pragma': 'no-cache',
  20. 'Sec-Fetch-Dest': 'document',
  21. 'Sec-Fetch-Mode': 'navigate',
  22. 'Sec-Fetch-Site': 'same-origin',
  23. 'Sec-Fetch-User': '?1',
  24. 'Upgrade-Insecure-Requests': '1',
  25. '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',
  26. }
  27. self.user = user
  28. self.pwd =pwd
  29. self.tujian_user = tujian_user
  30. self.tujian_pwd = tujian_pwd
  31. self.session = requests.Session()
  32. def get_params(self):
  33. """构造登入时需要的完整的params参数"""
  34. captcha = self.get_img_code()
  35. ts, pwd_md5 = self.get_md5_pwd()
  36. ts = str(int(time.time()))
  37. params = {
  38. 'txtUserID': self.user,
  39. 'txtPwd': pwd_md5,
  40. 'txtPwd4temp': '',
  41. 'verifyCode': captcha,
  42. 'ts': ts,
  43. 't': '2',
  44. 'pr629517': '0820',
  45. 'backurl': 'https://b.faloo.com/?ran=0.8010790778358112',
  46. }
  47. return params
  48. def get_img_code(self):
  49. """将请求到的验证码图片保存到本地,通过图鉴接口来将验证码图片转为文字"""
  50. img_code_url = "http://u.faloo.com/Common/ValidateImage.aspx?vt=login_code&lc=true&u=xiaobink&height=36&width=106&m=" + str(
  51. random.random())
  52. res = requests.get(img_code_url)
  53. with open('imgcode.png', "wb") as f:
  54. f.write(res.content)
  55. img = Image.open("imgcode.png")
  56. try:
  57. captcha = base64_api(uname=self.tujian_user, pwd=self.tujian_pwd, img=img)
  58. return captcha
  59. except:
  60. print("验证码获取失败")
  61. def get_md5_pwd(self):
  62. """构造md5加密后的密码,返回时间戳与加密后的密码"""
  63. pwd = self.pwd
  64. ts = str(int(time.time()))
  65. result = hashlib.md5(("EW234@![#$&]*{,OP}Kd^w349Op+-32_" + pwd + ts).encode())
  66. pwd_md5 = hashlib.md5(("@345Kie(873_dfbKe>d3<.d23432=" + result.hexdigest()).encode()).hexdigest()
  67. return ts, pwd_md5
  68. def get_response(self, params):
  69. # 实现登入
  70. self.session.get(self.url, headers=self.headers, params=params)
  71. # 登入后,请求跳转页的数据
  72. url = 'https://b.faloo.com/'
  73. res = self.session.get(url)
  74. res.encoding = 'gb2312'
  75. return res
  76. def run(self):
  77. # 构造登入时需要的完整的params参数
  78. params = self.get_params()
  79. # 实现登入,获取登入后的响应
  80. res = self.get_response(params)
  81. print(res.text)
  82. with open('feilu.html', 'wb') as f:
  83. f.write(res.content)
  84. def get_user_data():
  85. """从文件中获取自己的账号密码"""
  86. cfg = ConfigParser()
  87. cfg.read('user_data.ini')
  88. user = cfg.get("user", "user")
  89. pwd = cfg.get("pwd", "pwd")
  90. tujian_user = cfg.get("tujian_user", "tujian_user")
  91. tujian_pwd = cfg.get("tujian_pwd", "tujian_pwd")
  92. return user, pwd, tujian_user, tujian_pwd
  93. if __name__ == '__main__':
  94. user, pwd, tujian_user, tujian_pwd = get_user_data()
  95. feilu = Feilu(user, pwd, tujian_user, tujian_pwd)
  96. feilu.run()