VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > python入门教程 >
  • 搜书吧账号自动登录功能

 前段时间一直痴迷小说,但是苦于ta建立用硬币下载小说的功能,每每看到想看的小说,却被银币余额劝退。所以我简单写了一个自动登录的脚本,银币从此妈妈再也不用担心我是个没有银币的孩子了。

  总而言之,我刚好学了一点逆向,同时我又不想每天费劲登录水银币,于是就写了这么一个脚本。

登录分析:

  (1) 找到登录api

   可以看到是一个post请求,我们只需模拟请求就可以完成登录。

 

   (2) 分析参数

 

  如果你多请求几次可以发现, 这里的表单数据基本上都是不变的,除了fromhash这个参数,而formhash又可以从html页面直接匹配。

  到这里登录就分析完毕了,接下来就是代码实现了

复制代码
# -*- coding:utf-8 -*-
import re
import requests


class Comment:
    def __init__(self, user_name, user_password, c_url):
        """
        自动登录账号
        :param user_name: 用户名
        :param user_password: 用户密码
        :param c_url: 评论书籍url
        """
        self.user_name = user_name
        self.user_pwd = user_password
        self.c_url = c_url
        self.base_url = "https://www.feb.sbooook.com/"
        self.session = requests.session()
        self.user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.76"
        self.logging_api = f"{self.base_url}member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1 "  # 登录接口
        self.headers = {
            "Cache-Control": "no-cache",
            "Content-Type": "application/x-www-form-urlencoded",
            "Pragma": "no-cache",
            "Referer": self.base_url,
            "User-Agent": self.user_agent
        }
        self.book_page = self.session.get(url=self.c_url, headers=self.headers).text
        # 匹配fromhash
        self.formhash = re.findall('<input type="hidden" name="formhash" value="(.*)" />', self.book_page)[0]
        # 表单参数
        data = {
            'username': self.user_name,
            'password': self.user_pwd,
            'formhash': self.formhash,
            'quickforward': "yes",
            'handlekey': "ls"}
        # 登录账号
        res = self.session.post(url=self.logging_api, headers=self.headers, data=data).text
        if f"window.location.href='{self.base_url}';" in res:
            print(f'账号:{self.user_name} 登录成功!!!')
        else:
            print('出现错误,请重试!!!')



if __name__ == '__main__':
    comment_url = "https://www.feb.sbooook.com/forum.php?mod=viewthread&tid=342446&extra="  # 评论书籍
    Comment('your_name', 'your_pwd', comment_url)
复制代码

  至此登录已经完毕,不要问我光登录有什么用,登录都已经那其他的评论、下载等功能是不是就可以。。。

  顺带提一下,它的服务器很容易崩溃,也就是说在现实其他功能的时候,尽量不用使用线程或多进程,用的话也最好控制一下最大进程/线程数,不要给人家服务器搞崩了。

 



出处:https://www.cnblogs.com/my-daily/p/soushuba_coment1.html


相关教程