自动获取本机ip地址的脚本:

import os
import re


def get_ip():
    result = os.popen('ipconfig').read()
    pattern = re.compile(r'((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}')
    ip = pattern.search(result).group()
    print("获取到本机IP地址是:{}".format(ip))
    os.system("pause")


get_ip()

安装apk的脚本:

import os
import time

def install_app(apk_path):
    '''
    :param apk_path:APP安装包路径
    :return:
    '''
    print("开始执行")
    driver_exist = os.popen("adb devices").read()
    print(driver_exist)
    new_str = driver_exist.split("\n")
    new_list = [x for x in new_str if x != '']  # 去掉空''
    try:
        driver_name = new_list[1][0:16]  # 取出设备名
        if len(driver_name) == 16:
            install_result = os.popen('adb install "{}"'.format(apk_path)).read()
            if "Success" in install_result:
                print("安装成功")
            else:
                print("安装失败")
    except Exception as e:
        print("设备名未获取到{}".format(e))
        raise e
    finally:
        os.system('adb kill-server')
        os.system("pause")
        os._exit(0)



install_app("D:\\Download\\Chrome Download\\app-release-demo (2).apk")

启动django服务的脚本:

import os

def run_server(work_directory=r"D:\Software\Pycharm\Workspace\MyDjango",order = "python manage.py runserver 0.0.0.0:8000"):
    '''

    :param work_directory:切换工作目录
    :param order:需要执行的命令
    :return:
    '''
    print(os.getcwd())      # todo 获取当前目录
    os.chdir(work_directory)  # TODO 切换目录
    print(os.getcwd())
    os.system(order)

if __name__ == '__main__':
    run_server()

打开scrcpy投屏软件自动投屏的脚本(前提条件:处于同一局域网内):

'''该脚本主要实现自动执行adb命令,打开scrcpy投屏软件的功能'''
import os


def execute_order(cmd='taskkill /IM adb.exe -f', order1='adb tcpip 5555', order2='adb connect 192.168.1.112:5555',
                  procedure_path=r'D:\Software\Scrcpy\scrcpy-win64\scrcpy.exe'):
    '''
    cmd:填写杀掉进程的命令
    order1和order2:填写adb命令
    procedure_path:填写程序路径
    '''
    os.system(cmd)
    os.system(order1)
    os.system(order2)
    scrcpy = procedure_path
    os.execl(scrcpy, 'scrcpy.exe')


if __name__ == '__main__':
    execute_order()

自动获取手机ip地址投屏的脚本(需接入usb才能自动获取):

'''实现自动获取ip,投屏的功能'''

import os
import re

os.system('adb disconnect ')
os.system('taskkill /im scrcpy.exe -f')
os.system('taskkill /IM adb.exe -f')
try:
    res = os.popen('adb shell "ip addr | grep global"').read()
    pattern = re.compile(r'((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}')
    ip = pattern.search(res).group()
    print(ip)
except Exception as e:
    print("ip获取失败{}".format(e))
os.system('adb tcpip 5555')
os.system('adb connect {}:5555'.format(ip))
print('adb connect {}:5555'.format(ip))
procedure_path = r'D:\Software\Scrcpy\scrcpy-win64\scrcpy.exe'
scrcpy = procedure_path
os.execl(scrcpy, 'scrcpy.exe')

 删除某个目录下所有文件的脚本:

import os


def delect_file(folder_path):
    print("准备删除{}目录下的文件...".format(folder_path))
    folder_is_null = os.listdir(folder_path)
    if folder_is_null:             # todo 判断文件夹是否为空,为空就不执行了
        for i in os.listdir(folder_path):  # todo os.listdir(folder_path)#返回一个列表,里面是当前目录下面的所有东西的相对路径
            file_data = folder_path + "\\" + i
            if os.path.isfile(file_data) == True:
                os.remove(file_data)
            else:
                delect_file(file_data)
        print("总共删除{}个文件...".format(len(folder_is_null)))
        os.system("pause")
        os._exit(0)
    else:
        print("当前文件夹是空的")
        os.system("pause")
        os._exit(0)

delect_file(r"C:\Users\admin\Desktop\Screenshot\code")

 批量获取token:

import requests

url = "http://49.235.92.12:9000/api/v1/login"
for i in range(1,11):
    username = "test"+str(i)
    json = {
        "username":username,
        "password":123456
    }
    res = requests.post(url,json)
    print(res.json())
    token = res.json()["token"]
    with open("token_data","a+") as f:
        f.write(username+","+token+"\n")

 将视频按固定帧率分解成一帧帧的图片:

# TODO 该脚本主要实现将视频按固定帧率分解成一帧帧的图片
import os, sys
import threading


def split_video(video_path):
    '''

    :param video_path: 视频的绝对路径,建议先将要切割的视频拖到cmd窗口,然后再复制路径当做参数传递,否则会产生OSError错误
    :return:
    '''

    print("开始执行{}目录下的操作:".format(video_path))

    split_file = os.path.split(video_path)  # 分割文件名与目录
    print(split_file)

    split_filename = os.path.splitext(split_file[1])  # 分离文件名和扩展名
    print(split_filename)

    os.chdir(split_file[0])  # 切换目录

    try:
        touch_dir = os.mkdir(split_filename[0])  # 创建文件夹,
    except Exception as e:
        print("文件已存在,请检查文件目录")
        os.system("pause")
        raise e

    os.chdir(split_filename[0])  # 切换目录至新建文件夹里面

    print("切割后的图片保存到:{}".format(os.getcwd()))
    os.popen("ffmpeg -i {} -r 60 %d.jpg".format(video_path)).read()


def run(path_list):
    for path in path_list:
        t1 = threading.Thread(target=split_video, args=(path,))
        t1.start()
        t1.join()


if __name__ == '__main__':
    path_list = (r"D:\Video\1.mp4",r"D:\Video\20200516_132923.mp4")
    run(path_list)
    print("视频分解完成。。。")
    os.system("pause")
    os._exit(0)

 获取linux系统的ip:

import paramiko
import re


class GetLinuxIp():
    '''获取linux服务器ip'''

    def __init__(self, ip, port, user, password, cmds):
        '''

        :param ip: linux主机的ip
        :param port: linux主机的端口
        :param user: linux主机登录用户名
        :param password: linux主机登录密码
        :param cmds: linux命令列表,传list类型
        '''
        self.ip = ip
        self.port = port
        self.user = user
        self.password = password
        self.cmds = cmds
        try:
            self.ssh = paramiko.SSHClient()
            self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            self.ssh.connect(self.ip, self.port, self.user, self.password, timeout=10)
            print("连接成功...")
        except Exception as e:
            # raise e
            print("连接失败,错误是{}".format(e))
            raise e

    def excute_command(self):
        '''执行命令'''
        for i in self.cmds:
            self.stdin, self.stdout, self.stderr = self.ssh.exec_command(i)

    def get_result(self):
        '''获取结果'''
        result = self.stdout.read().decode()
        pattern = re.compile(r'((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}')
        self.ip = pattern.search(result).group()
        print("获取到linux服务器的ip是:{}".format(self.ip))

    def __del__(self):
        '''关闭连接'''
        self.ssh.close()
        print("连接关闭...")


if __name__ == '__main__':
    linux = GetLinuxIp("121.196.120.113", 22, "root", "123_Xiaohaikun", ["ifconfig"])
    linux.excute_command()
    linux.get_result()

 添加游戏后自动审核通过:

import requests
import pymysql
import os


class AuditPass():
    def __init__(self, user_id):
        '''
        :param user_id: Profile页面的用户ID
        '''
        self.user_id = user_id
        # 连接初始化
        self.conn = pymysql.connect(host='47.254.187.156', port=3306, user='egirl_EN',
                                    password='Y18uy1Fw8HBpYtHmqGSEyd0ipDAYUWv9u0', database='egirl')
        self.cursor = self.conn.cursor()

    def get_login_token(self):
        '''获取用户toekn'''
        login_url = "https://test-play.gamesegirl.com/web/login/for-sys"
        param = {"account": "EpaAdmin",
                 "password": "123456"}
        headers = {
            "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",
            "content-type": "application/json",
            "referer": "https://admin.gamesegirl.com/user/login"}
        try:
            res = requests.post(url=login_url, json=param, headers=headers)
            self.token = res.json()["content"]["token"]
        except Exception as e:
            print("错误是:{}".format(e))

    def query_productId(self):
        '''查询数据库productId'''
        # SQL查询产品ID
        sql = "SELECT MAX(t_product.id) FROM t_product WHERE t_product.user_id = {}".format(
            self.user_id)
        try:
            self.cursor.execute(sql)
            for temp in self.cursor.fetchone():
                self.productId = temp

        except Exception as e:
            # 如果发生错误则回滚
            self.conn.rollback()
            raise e

    def audit_list(self):
        '''通过接口游戏自动审核通过'''
        url = "https://test-play.gamesegirl.com/admin/audit/audit"
        param = {"productId": self.productId,
                 "auditStatus": 1,
                 "auditRemark": "",
                 "pageAuditStatus": "0,3"}
        headers = {
            "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",
            "content-type": "application/json",
            "_tk_": self.token}
        try:
            res = requests.post(url, json=param, headers=headers)
        except Exception as e:
            print("错误是:{}".format(e))
        else:
            print(res.text)
            print("审核通过")

    def __del__(self):
        '''关闭连接资源'''
        self.cursor.close()
        self.conn.close()


if __name__ == '__main__':
    audit = AuditPass("2397")
    audit.get_login_token()
    audit.query_productId()
    audit.audit_list()
    os.system("pause")

 手机号自动注册:

'''该脚本主要实现手机号自动注册的功能'''
import requests
import pymysql
import time
import random
import os


class AutoRegister():
    def __init__(self, pwd="Epal123"):
        self.pwd = pwd
        self.conn = pymysql.connect(host='47.254.87.156', port=3306, user='egirl_EN',
                                    password='Y18uy1Fw8HBpYtHmqGSEyd0ipDAYUWv9u0', database='egirl')
        self.cursor = self.conn.cursor()

    def generate_phone(self):
        '''生成手机号'''
        prelist = ["130", "131", "132", "133", "134", "135", "136", "137", "138", "139", "147", "150", "151", "152",
                   "153", "155", "156", "157", "158", "159", "173", "186", "187", "188"]
        self.phone_number = random.choice(prelist) + "".join(random.choice("0123456789") for i in range(8))
        # print(self.phone_number)

    def generate_date(self):
        '''生成时间,解决用户注册小于13岁的问题'''
        a1 = (1976, 1, 1, 0, 0, 0, 0, 0, 0)  # 开始日期时间元组(1976-01-01 00:00:00)
        a2 = (2006, 12, 31, 23, 59, 59, 0, 0, 0)  # 结束日期时间元组(2006-12-31 23:59:59)
        start = time.mktime(a1)
        end = time.mktime(a2)
        t = random.randint(start, end)
        date_touple = time.localtime(t)  # 将时间戳生成时间元组
        self.date = time.strftime("%Y-%m-%d", date_touple)  # 将时间元组转成格式化字符串如(2002-05-21)
        # print(self.date)

    def register_phone_number(self):
        '''注册手机号'''
        register_url = "https://test-play.gamesegirl.com/user/register/send_verification_code"
        param = {"mobile": "+86{}".format(self.phone_number),
                 "birthDay": "{}".format(self.date),
                 "registerType": "MOBILE"
                 }
        try:
            result = requests.post(url=register_url, json=param)
        except Exception as e:
            print("错误是:{}".format(e))
            raise e

    def query_verify_code(self):
        '''查询验证码'''
        sql = "SELECT JSON_EXTRACT(extra, '$.verificationCode') FROM sms_record WHERE mobile LIKE '%{}%' ORDER BY id DESC LIMIT 1".format(
            str(self.phone_number))
        self.cursor.execute(sql)
        try:
            for temp in self.cursor.fetchone():
                self.verify_code = temp
        except Exception as e:
            # 如果发生错误则回滚
            self.conn.rollback()
            raise e

    def input_verify_code(self):
        '''输入验证码'''
        input_code_url = "https://test-play.gamesegirl.com/app/user/register/by_password"
        param = {
            "mobile": "+86{}".format(self.phone_number),
            "password": self.pwd,
            "verificationCode": int(eval(self.verify_code)),
            "appClient": "EPAL_IOS",
            "countryCallingCode": "+86",
            "areaRegion": "CN",
            "registerType": "MOBILE",
            "birthDay": "{}".format(self.date)
        }
        try:
            res = requests.post(url=input_code_url, json=param)
            token = res.json()["content"]
        except Exception as e:
            print("错误是:{}".format(e))
            raise e
        else:
            if token != "null":
                print("注册手机号是:{}".format(self.phone_number))
                print("注册账号密码是:{}".format(self.pwd))
            else:
                print("注册失败")

    def __del__(self):
        '''关闭连接资源'''
        self.cursor.close()
        self.conn.close()


def run_time(func):
    '''装饰器检测代码运行时间'''
    def end_time(*args):
        start_time = time.time()
        func(*args)
        stop_time = time.time()
        total_time = stop_time - start_time
        print('代码运行时间共耗时:{}'.format(total_time))

    return end_time


@run_time
def run():
    register = AutoRegister()
    register.generate_phone()
    register.generate_date()
    register.register_phone_number()
    register.query_verify_code()
    register.input_verify_code()


if __name__ == '__main__':
    run()
    os.system("pause")

 修改商家等级:

'''该脚本主要用来修改商家等级'''
import pymysql
import os


class UpdataMerchantLevel():
    def __init__(self, merchant_level, user_id):
        '''

        :param merchant_level: 想修改的商家等级:EPAL2,EPAL3,ESTAR1,ESTAR2
        :param user_id: 用户user_id
        '''
        self.user_id = user_id
        self.merchant_level = merchant_level
        self.conn = pymysql.connect(host='47.254.87.156', port=3306, user='egirl_EN',
                                    password='Y18uy1Fw8HBpYtHmqGSEyd0ipDAYUWv9u0', database='egirl')
        self.cursor = self.conn.cursor()

    def change_merchant_level(self):
        '''修改商家等级'''
        sql1 = "select merchant_level from t_user u left join t_user_ext ue on ue.user_id = u.id where u.id='{}'".format(
            self.user_id)
        sql2 = "UPDATE t_user_ext SET merchant_level='{}' WHERE user_id='{}'".format(self.merchant_level, self.user_id)

        try:
            # 1.先查询原有等级
            self.cursor.execute(sql1)
            self.conn.commit()
            for temp in self.cursor.fetchone():
                origin_level = temp
            # 2.执行更新等级的sql
            self.cursor.execute(sql2)
            self.conn.commit()
            # 3.查询最终等级
            self.cursor.execute(sql1)
            self.conn.commit()
            for temp in self.cursor.fetchone():
                final_level = temp

        except:
            self.conn.rollback()
        else:
            print("修改前的等级是{}".format(origin_level))
            print("修改后的等级是{}".format(final_level))

        finally:
            self.cursor.close()
            self.conn.close()


def run():
    up = UpdataMerchantLevel('EPAL2', '2397')
    up.change_merchant_level()


if __name__ == '__main__':
    run()
    os.system("pause")

 创建文本文件:

import time


def create_text(path=r"D:\Program Files (x86)\Sublime\Sublime Text3\File\\"):
    """
    创建txt文本文件
    :param path: 文件路径
    :return:
    """
    filename = time.strftime("%Y-%m-%d").replace("-", "")
    file_path = path + filename + '.txt'
    with open(file_path, 'w') as f:
        f.write('')


if __name__ == '__main__':
    create_text()

 python三元运算写法:

import requests
import time
import os



def del_login_limit(account="1489088761@qq.com"):
    """
    解决“The number of retries has been exceeded, please try again in 24 hour”问题
    :param account: 需要删除的邮箱号
    :return:
    """
    requests.packages.urllib3.disable_warnings()
    current_date = time.strftime("%Y-%m-%d").replace("-", "")
    url = "https://test-play.gamesegirl.com/mock/del_cache"
    data = {
        "key": "LEIJ34-L3RQ09-E3ORIJFAL-EORALFA",
        "redisKey": "1001:test:{}:loginAndRegister:login4Email:{}".format(current_date, account)
    }
    response = requests.post(url, json=data, verify=False)
    print(response.json()) if response.status_code == 200 else print("请求失败")


if __name__ == '__main__':
    del_login_limit()
    os.system("pause")

 操作redis数据库:

import redis


class OperateRedis(object):
    def __init__(self):
        self.host = "47.254.87.156"
        self.port = "6379"
        self.pwd = "E1Ql/NlOA2X#Oq85p6zOFC2C93MJCjATO1"
        self.pool = redis.ConnectionPool(host=self.host, port=self.port, password=self.pwd, decode_responses=True)
        self.connect = redis.Redis(connection_pool=self.pool)

    def query_email_verify_code(self, email_account):
        """

        :param email_account: 邮箱账号
        :return:
        """
        result = self.connect.get("egirl:email:validate:{}:REGISTER".format(email_account))
        print(result)


if __name__ == '__main__':
    op = OperateRedis()
    op.query_email_verify_code("jldvwc82356@chacuo.net")

 操作redis优化版本:先判断键是否存在,如果存在再去查询。

import redis


class OperateRedis(object):
    def __init__(self):
        self.host = "47.254.87.156"
        self.port = "6379"
        self.pwd = "E1Ql/NlOA2X#Oq85p6zOFC2C93MJCjATO1"
        self.pool = redis.ConnectionPool(host=self.host, port=self.port, password=self.pwd, decode_responses=True)
        self.connect = redis.Redis(connection_pool=self.pool)

    def query_email_verify_code(self, email_account):
        """

        :param email_account: 邮箱账号
        :return:
        """
        result = self.connect.get("egirl:email:validate:{}:REGISTER".format(email_account)) \
            if self.connect.exists("egirl:email:validate:{}:REGISTER".format(email_account)) == 1 else print("键不存在")
        print("获取到的邮箱验证码是:{}".format(result))


if __name__ == '__main__':
    op = OperateRedis()
    op.query_email_verify_code("jldvwc82356@chacuo.net")

 判断user_id是否重复:

import requests


def func(loop_count=80):
    count_ = 0
    while count_ < loop_count:
        url = 'https://test-community.gamesegirl.com/user/meets/match'
        data = {"limit": 30,
                "likeUserIds": [],
                "dislikeUserIds": [],
                "excludeUserIds": []}
        user_id_list = [3165, 2924, 3184, 3232, 4, 3216, 3240, 3163, 3291, 18, 3217, 3, 2702, 3161, 2636]
        response = requests.post(url=url, json=data).json()
        response_length = len(response['content'])
        count_ += 1
        for i in range(response_length):
            userid = response['content'][i]['userId']
            if userid not in user_id_list:
                print("ID:{}不在列表里面".format(userid))
                print("第{}次请求出错".format(count_))
                return
            else:
                print("第{}次请求正常".format(count_))


if __name__ == '__main__':
    func()

 注册代码:

import requests
import redis
import random
import pymysql
import time
import os
from faker import Faker
import re


class RegisterEmail(object):
    def __init__(self, email_=None, pwd="Epal123"):
        self.email = None
        self.tk = None
        self.user_id = None
        self.sex = None
        self.appClient = None
        self.pwd = pwd
        self.faker = Faker()
        self.nickname = self.faker.name()
        self.redis_deploy = {
            "host": "47.254.87.156",
            "port": "6379",
            "password": "E1Ql/NlOA2X#Oq85p6zOFC2C93MJCjATO1",
            "decode_responses": "True"
        }
        self.mysql_deploy = {
            "host": "47.254.87.156",
            "port": 3306,
            "user": "egirl_EN",
            "password": "Y18uy1Fw8HBpYtHmqGSEyd0ipDAYUWv9u0",
            "database": "egirl"
        }
        self.host = "https://test-play.gamesegirl.com/"
        self.url_dict = {
            "verify_code_url": "v3/user/register/send_verification_code",
            "by_password_url": "app/user/register/by_password",
            "login_by_password": "app/user/login/by_password",
            "edit_url": "web/user/edit"
        }
        self.pool = redis.ConnectionPool(**self.redis_deploy)
        self.connect = redis.Redis(connection_pool=self.pool)
        self.conn = pymysql.connect(**self.mysql_deploy)
        self.cursor = self.conn.cursor()
        if email_ is None:
            self.email = "".join(random.choice("0123456789") for i in range(6)) + random.choice(["@163.com", "@qq.com"])
        else:
            pattern = r"^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$"
            if re.match(pattern, email_):
                self.email = email_
            else:
                print(f"邮箱格式错误,请检查输入{email_}")

    def register_email(self):
        """注册账号"""
        verify_code_url = self.host + self.url_dict.get("verify_code_url")
        data1 = {"email_": "{}".format(self.email),
                 "password": self.pwd,
                 "birthday": "1997-01-01",
                 "emailPushEnabled": False,
                 "registerType": "EMAIL"}
        response1 = requests.post(url=verify_code_url, json=data1).json()
        if response1["status"] == "OK":
            if self.connect.exists("1001:test:verificationCode:email:{}:EMAIL_BIZ_CODE_REGISTER_VERIFICATION_CODE"
                                   "".format(self.email)) == 1:
                verify_code = self.connect.get(
                    "1001:test:verificationCode:email:{}:EMAIL_BIZ_CODE_REGISTER_VERIFICATION_CODE".format(self.email))
                by_password_url = self.host + self.url_dict.get("by_password_url")
                data2 = {
                    "verificationCode": "{}".format(verify_code),
                    "password": self.pwd,
                    "birthdayVisibleEnabled": False,
                    "appClient": "EPAL_IOS",
                    "emailPushEnabled": False,
                    "email_": self.email,
                    "registerType": "EMAIL",
                    "birthDay": "2000-01-01"
                }
                response2 = requests.post(by_password_url, json=data2).json()
                if response2["status"] == "OK":
                    sql = "SELECT id FROM egirl.t_user WHERE email='{}'".format(self.email)
                    self.cursor.execute(sql)
                    self.user_id = [i for i in self.cursor.fetchone()][0]
                    if self.user_id:
                        print("注册邮箱是:{}".format(self.email))
                        print("注册邮箱密码是:{}".format(self.pwd))
                        print("注册邮箱的User_Id是:{}".format(self.user_id))
                    return print("查询数据库,注册失败")
                return print("请求{}接口失败".format(by_password_url))
            return print('键为空')
        return print("请求{}接口失败".format(verify_code_url))

    def edit_user_info(self):
        """编辑基本信息"""
        by_password = self.host + self.url_dict.get("login_by_password")
        app_Client_list = ["EPAL_ANDROID", "EPAL_IOS"]
        self.appClient = random.choice(app_Client_list)
        data = {
            "appClient": self.appClient,
            "loginKey": self.email,
            "password": self.pwd
        }
        login_response = requests.post(url=by_password, json=data).json()
        if login_response['status'] == "OK" and login_response['content'] is not None:
            self.tk = login_response['content']
            edit_url = self.host + self.url_dict.get("edit_url")
            headers = {"_tk_": self.tk}
            sex_list = [0, 1, 2]
            self.sex = random.choice(sex_list)
            data = {"nickname": self.nickname,
                    "sex": self.sex,
                    "birthday": "2000-01-01"}
            response = requests.post(url=edit_url, json=data, headers=headers).json()
            if response['content']['userId'] == self.user_id and response['content']['nickname'] == self.nickname and \
                    response['content']['sex'] == self.sex:
                print(f"注册邮箱的nickname是:{self.nickname}")
                sex_dict = {
                    "0": "",
                    "1": "",
                    "2": "中性",
                }
                print("注册邮箱性别是:{}".format(sex_dict.get(str(self.sex))))
                # if self.sex == 0:
                #     print("注册邮箱性别是:男")
                # elif self.sex == 1:
                #     print("注册邮箱性别是:女")
                # else:
                #     print("注册邮箱性别是:中性的")
        return print("登录失败")

    def __del__(self):
        self.cursor.close()
        self.conn.close()


def retry(loop_num=2, wait_time=1):
    """
    :param loop_num: 循环次数,默认2次
    :param wait_time: 等待时间,默认1s
    :return:
    """

    def wrapper(func):
        def _wrapper(*args, **kwargs):
            raise_ex = 0
            for i in range(1, loop_num + 1):
                print(f"第{i}次操作")
                try:
                    return func(*args, **kwargs)
                except Exception as e:
                    time.sleep(wait_time)
                    raise_ex += 1
                    if raise_ex == loop_num:
                        raise e

        return _wrapper

    return wrapper


@retry()
def run():
    RE = RegisterEmail("hkxoqn751241@chaccuo.net")
    RE.register_email()
    RE.edit_user_info()


if __name__ == '__main__':
    run()
    # os.system("pause")

 优化注册代码:

import requests
import redis
import random
import pymysql
import time
import os
import yaml
import io


class UserName(object):
    yaml.warnings({'YAMLLoadWarning': False})

    def __init__(self, loop_num, prefix_name, path_=None):
        """
        :param loop_num: 循环次数
        :param prefix_name: 前缀名称,如传"Knight",就生成Knight1,Knight2...
        :param path_: 配置文件路径,可以不传,不传默认在工程目录下生成username.yml文件
        """
        self.loop_num = loop_num
        self.prefix_name = prefix_name
        self.path = None
        if path_ is None:
            self.path = os.getcwd() + '\\username.yml'
        else:
            self.path = path_

    def write_yml(self, num=0):
        data = {'num': num}
        with io.open(self.path, 'w', encoding="utf-8") as wf:
            yaml.dump(data, wf)

    def read_yml(self):
        with io.open(self.path, 'r', encoding="utf-8") as rf:
            yml_data = yaml.load(rf)
            return yml_data.get('num', 0)

    def add_user_name(self):
        """原有基础上添加用户名称"""
        start_value = self.read_yml()
        num = start_value
        name_list = []
        for i in range(start_value, self.loop_num + start_value):
            # print(f"{self.prefix_name}{i}")
            num += 1
            name_list.append(f"{self.prefix_name}{i}")
        self.write_yml(num)
        return name_list

    def create_user_name(self):
        """创建用户名称"""
        self.write_yml()
        start_value = self.read_yml()
        num = start_value
        name_list = []
        for i in range(start_value, self.loop_num + start_value):
            # print(f"{self.prefix_name}{i}")
            num += 1
            name_list.append(f"{self.prefix_name}{i}")
        self.write_yml(num)
        return name_list

    def run(self):
        return self.add_user_name() if os.path.isfile(self.path) else self.create_user_name()


class RegisterEmail(object):
    def __init__(self, email_, pwd="Epal123"):
        self.email = email_
        self.pwd = pwd
        self.tk = None
        self.user_id = None
        self.sex = None
        self.appClient = None
        name = UserName(1, "Between")
        self.nickname = name.run()[0]
        self.redis_deploy = {
            "host": "47.254.87.156",
            "port": "6379",
            "password": "E1Ql/NlOA2X#Oq85p6zOFC2C93MJCjATO1",
            "decode_responses": "True"
        }
        self.mysql_deploy = {
            "host": "47.254.87.156",
            "port": 3306,
            "user": "egirl_EN",
            "password": "Y18uy1Fw8HBpYtHmqGSEyd0ipDAYUWv9u0",
            "database": "egirl"
        }
        self.pool = redis.ConnectionPool(**self.redis_deploy)
        self.connect = redis.Redis(connection_pool=self.pool)
        self.conn = pymysql.connect(**self.mysql_deploy)
        self.cursor = self.conn.cursor()

    def register_email(self):
        """注册账号"""
        verify_code_url = "https://test-play.gamesegirl.com/v3/user/register/send_verification_code"
        data1 = {"email_": "{}".format(self.email),
                 "password": self.pwd,
                 "birthday": "1997-01-01",
                 "emailPushEnabled": False,
                 "registerType": "EMAIL"}
        response1 = requests.post(url=verify_code_url, json=data1).json()
        if response1["status"] == "OK":
            if self.connect.exists("1001:test:verificationCode:email:{}:EMAIL_BIZ_CODE_REGISTER_VERIFICATION_CODE"
                                   "".format(self.email)) == 1:
                verify_code = self.connect.get(
                    "1001:test:verificationCode:email:{}:EMAIL_BIZ_CODE_REGISTER_VERIFICATION_CODE".format(self.email))
                by_password_url = "https://test-play.gamesegirl.com/app/user/register/by_password"
                data2 = {
                    "verificationCode": "{}".format(verify_code),
                    "password": self.pwd,
                    "birthdayVisibleEnabled": False,
                    "appClient": "EPAL_IOS",
                    "emailPushEnabled": False,
                    "email_": self.email,
                    "registerType": "EMAIL",
                    "birthDay": "2000-01-01"
                }
                response2 = requests.post(by_password_url, json=data2).json()
                if response2["status"] == "OK":
                    sql = "SELECT id FROM egirl.t_user WHERE email='{}'".format(self.email)
                    self.cursor.execute(sql)
                    self.user_id = [i for i in self.cursor.fetchone()][0]
                    if self.user_id:
                        print("注册邮箱是:{}".format(self.email))
                        print("注册邮箱密码是:{}".format(self.pwd))
                        print("注册邮箱的User_Id是:{}".format(self.user_id))
                    else:
                        print("查询数据库,注册失败")
                else:
                    print("请求{}接口失败".format(by_password_url))
            else:
                print('键为空')
        else:
            print("请求{}接口失败".format(verify_code_url))

    def edit_user_info(self):
        """编辑基本信息"""
        by_password = "https://test-play.gamesegirl.com/app/user/login/by_password"
        app_Client_list = ["EPAL_ANDROID", "EPAL_IOS"]
        self.appClient = random.choice(app_Client_list)
        data = {
            "appClient": self.appClient,
            "loginKey": self.email,
            "password": self.pwd
        }
        login_response = requests.post(url=by_password, json=data).json()
        if login_response['status'] == "OK" and login_response['content'] is not None:
            self.tk = login_response['content']
            edit_url = "https://test-play.gamesegirl.com/web/user/edit"
            headers = {"_tk_": self.tk}
            sex_list = [0, 1, 2]
            self.sex = random.choice(sex_list)
            data = {"nickname": self.nickname,
                    "sex": self.sex,
                    "birthday": "2000-01-01"}
            response = requests.post(url=edit_url, json=data, headers=headers).json()
            if response['content']['userId'] == self.user_id and response['content']['nickname'] == self.nickname and \
                    response['content']['sex'] == self.sex:
                print(f"注册邮箱的nickname是:{self.nickname}")
                sex_dict = {
                    "0": "",
                    "1": "",
                    "2": "中性",
                }
                print("注册邮箱性别是:{}".format(sex_dict.get(str(self.sex))))
        else:
            print("登录失败")

    def __del__(self):
        self.cursor.close()
        self.conn.close()


def retry(loop_num=2, wait_time=1):
    """
    :param loop_num: 循环次数,默认2次
    :param wait_time: 等待时间,默认1s
    :return:
    """

    def wrapper(func):
        def _wrapper(*args, **kwargs):
            raise_ex = 0
            for i in range(1, loop_num + 1):
                print(f"第{i}次操作")
                try:
                    return func(*args, **kwargs)
                except Exception as e:
                    time.sleep(wait_time)
                    raise_ex += 1
                    if raise_ex == loop_num:
                        raise e

        return _wrapper

    return wrapper


@retry()
def run(number=1):
    for i in range(number):
        email = "".join(random.choice("0123456789") for i in range(6)) + random.choice(["@163.com", "@qq.com"])
        re = RegisterEmail(email)
        re.register_email()
        re.edit_user_info()


if __name__ == '__main__':
    run(1)
    os.system("pause")

 录屏脚本:

from PIL import ImageGrab
import numpy as np
import cv2
import datetime
from pynput import keyboard
import threading
import os

flag = False  # 停止标志位


def video_record():
    """
    屏幕录制!
    :return:
    """
    name = datetime.datetime.now().strftime('%Y-%m-%d %H-%M-%S')  # 当前的时间
    p = ImageGrab.grab()  # 获得当前屏幕
    a, b = p.size  # 获得当前屏幕的大小
    fourcc = cv2.VideoWriter_fourcc(*'XVID')  # 编码格式
    video = cv2.VideoWriter('%s.avi' % name, fourcc, 20, (a, b))  # 输出文件命名为test.mp4,帧率为16,可以自己设置
    print("开始录制,结束请按Esc键")
    while True:
        im = ImageGrab.grab()
        imm = cv2.cvtColor(np.array(im), cv2.COLOR_RGB2BGR)  # 转为opencv的BGR格式
        video.write(imm)
        if flag:
            print("录制结束!")
            break
    video.release()


def on_press(key):
    """
    键盘监听事件!!!
    :param key:
    :return:
    """
    # print(key)
    global flag
    if key == keyboard.Key.esc:
        flag = True
        print("stop monitor!")
        return False  # 返回False,键盘监听结束!


if __name__ == '__main__':
    th = threading.Thread(target=video_record)
    th.start()
    with keyboard.Listener(on_press=on_press) as listener:
        listener.join()
    os.system("pause")