сделай сохранение куки по файлам - файл = номер телефона. если куки найдены по номеру телефона то просто обновляем сессию, если кук нету то отправляем код и подтверждаем код и сохраняем куки. после каждого обновления сессии нужно сохранять куки. кроме того при создании куки  нужно создать X-App-Type=react_lk. номер телефона нужно указывать при создании объекта класса. Сделай код более профессиональным : import requests
import os
import re
class Megafon:
    def __init__(self):
        self.session = requests.Session()
        self.default_headers = {
            'User-Agent': 'Mozilla/5.0 (Linux; Android 5.1.1; SM-G388F) AppleWebKit/537.36 (KHTML, like Gecko) Brave Chrome/89.0.4389.105 Mobile Safari/537.36',
            'Accept': 'application/json, text/plain, */*',
            'Accept-Language': 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
            'Accept-Encoding': 'gzip, deflate, br, zstd',
            'Referer': 'https://lk.megafon.ru/login',
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
            'X-App-Type': 'react_lk',
            'X-Cabinet-Capabilities': 'web-2020',
            'traceparent': self.generate_traceparent(),
            'Origin': 'https://lk.megafon.ru',
            'DNT': '1',
            'Sec-GPC': '1',
            'Connection': 'keep-alive',
            'Sec-Fetch-Dest': 'empty',
            'Sec-Fetch-Mode': 'cors',
            'Sec-Fetch-Site': 'same-origin',
            'sec-ch-ua-platform': '"Android"',
            'sec-ch-ua': '"Google Chrome";v="89", "Chromium";v="89", "Not=A?Brand";v="24"',
            'sec-ch-ua-mobile': '?1'
        }
        self.jwtToken= None
    def generate_traceparent():
        version = "00"
        trace_id = os.urandom(16).hex()
        while trace_id == "0" * 32:
            trace_id = os.urandom(16).hex()
        parent_id = os.urandom(8).hex()
        while parent_id == "0" * 16:
            parent_id = os.urandom(8).hex()
        trace_flags = "01"
        traceparent = f"{version}-{trace_id}-{parent_id}-{trace_flags}"
        pattern = re.compile(r"^[\da-f]{2}-[\da-f]{32}-[\da-f]{16}-[\da-f]{2}$")
        if not pattern.match(traceparent):
            raise ValueError("Сгенерированное значение `traceparent` не соответствует требуемому формату.")
        return traceparent

    def send_code(self, phone):
        url = "https://lk.megafon.ru/api/auth/otp/request"
        data = f"login=7{phone}&captchaReady=true"
        self.phone = phone
        headers = self.default_headers
        headers["traceparent"] = self.generate_traceparent()
        res=self.session.post(url,data=data,headers=headers)
        if res.status_code==200 and res.json()["ok"] == True:
            print("Сообщение успешно отправлено")
        else:
            print("По каким-то причинам мне не удалось отправить сообщение")
    def sumbit_code(self,code):
        
        url ="https://lk.megafon.ru/api/auth/otp/submit"
        data = f"login=7{self.phone}&otp={code}"
        headers = self.default_headers
        headers["traceparent"] = self.generate_traceparent()
        res = self.session.post(url,data=data,headers=headers)
        if res.status_code==200 and res.json()["authenticated"] == True:
            json_res = res.json()
            print("Код успешно подтвержден")
            print("ФИО:"+json_res["name"])
            self.jwtToken = json_res["jwtToken"]
        else:
            print("При подтверждении кода что-то пошло не так")
    def refresh_session(self):
        print("Обновляю токен...")
        url = "https://lk.megafon.ru/api/auth/sessionCheck"
        headers["traceparent"] = self.generate_traceparent()
        headers.pop("Content-Type", None)
        res= session.get(url,headers=headers)
        if res.status_code == 200 and res.json()["authenticated"] == True:
            if self.jwtToken == None:
                print("ФИО:"+json_res["name"])
            self.jwtToken = json_res["jwtToken"]
        else:
            print("Что-то прошло не так при обновлении Jwt token")
    def get_balance(self):
        url = "https://lk.megafon.ru/api/main/balance"
        headers = self.default_headers
        headers["traceparent"] = self.generate_traceparent()
        headers["X-Cabinet-Authorization"] = "Bearer "+self.jwtToken
        headers.pop("Content-Type", None)
        res = self.session.get(url,headers=headers)
        if res.status_code == 200:
            return res.json["balanceWithLimit"]
        elif res.status_code == 401:
            self.refresh_session()
            return self.get_balance()
        else:
            print("При получении баланса что-то пошло не так")
            return None