Compare commits

...

2 Commits

Author SHA1 Message Date
Denis
24c3e61390 upd to sqlite3 2025-05-20 08:05:56 +03:00
Denis
4911a879c9 fix 2025-05-16 13:02:12 +03:00
6 changed files with 215 additions and 64 deletions

4
.env
View File

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

View File

@ -1,5 +1,35 @@
{
"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",
"password": "steamok111990",
@ -219,36 +249,6 @@
"username": "fpfuryfamily",
"password": "thxfp362",
"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"}]}
{"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"}]}

41
main.py
View File

@ -4,6 +4,7 @@ import json
import logging
import os
import aiosqlite
from dotenv import load_dotenv
from pyrogram import Client
@ -60,15 +61,47 @@ async def fetch_and_monitor_accounts():
accounts.sort(key=lambda x: x['date'], reverse=True)
top_50 = accounts[:50]
with open('credentials.json', 'w', encoding='utf-8') as f:
json.dump({'accounts': top_50}, f, indent=4, ensure_ascii=False)
async with aiosqlite.connect('credentials.db') as db:
# Создаем таблицу, если её нет
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")
SteamLogin().open_steam_login_page_and_type()
await SteamLogin().open_steam_login_page_and_type()
await asyncio.sleep(30)
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,3 +64,82 @@
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: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,6 +3,7 @@ import os
import logging
import time
import aiosqlite
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
@ -16,15 +17,15 @@ class SteamLogin():
if not os.path.exists('credentials_backup.json'):
open('credentials_backup.json', 'w').write(json.dumps({'accounts': []}))
options = Options()
self.options = Options()
prefs = {
"credentials_enable_service": False,
"profile.password_manager_enabled": False,
"profile.password_manager_leak_detection": False # Отключение проверки утечек паролей
}
options.add_experimental_option("prefs", prefs)
self.options.add_experimental_option("prefs", prefs)
self.driver = webdriver.Chrome(
options=options
options=self.options
)
def __wait_get(self, xpath: str, timeout: int = 15):
@ -36,37 +37,73 @@ class SteamLogin():
...
def __write_to_json(self, account: dict):
with open('credentials_backup.json', 'r') as file:
data = json.load(file)
data['accounts'].append(account)
async def __write_to_database(self, account: dict):
async with aiosqlite.connect('credentials.db') as db:
# Создаем таблицу если её нет
await db.execute('''
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)
def open_steam_login_page_and_type(self):
async def open_steam_login_page_and_type(self):
# Открываем страницу входа в Steam
self.driver.get("https://steamcommunity.com/login/home/?goto=")
# Загружаем учетные данные из JSON файла
with open('credentials.json', 'r') as file:
data = json.load(file)
async with aiosqlite.connect('credentials.db') as db:
# Получаем свежие аккаунты из основной таблицы
cursor = await db.execute('SELECT username, password, date FROM accounts')
data = await cursor.fetchall()
with open('credentials_backup.json', 'r') as file:
archive = json.load(file)['accounts']
cursor = await db.execute('SELECT username, password, date FROM backup_accounts')
archived_accounts = await cursor.fetchall()
# Преобразуем в множества для быстрой проверки
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 data['accounts']:
for account in unique_accounts:
if account in archive:
continue
time.sleep(30)
# time.sleep(30)
username = account['username']
password = account['password']
# Задержка перед заходом в аккаунт
WebDriverWait(self.driver, 30).until(
WebDriverWait(self.driver, 15).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'))
)
@ -84,14 +121,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)
if is_code:
self.driver.get("https://steamcommunity.com/login/home/?goto=")
self.__write_to_json(account)
await self.__write_to_database(account)
logger.info(f"Вход для аккаунта {username} не удался. Ошибка: требуется код из почты")
continue
is_authed = self.__wait_get('//*[@id="account_pulldown"]', 5)
if not is_authed:
self.driver.get("https://steamcommunity.com/login/home/?goto=")
self.__write_to_json(account)
await self.__write_to_database(account)
logger.info(f"Вход для аккаунта {username} не удался. Ошибка: не авторизован")
continue
@ -99,8 +136,8 @@ class SteamLogin():
if is_family:
self.__wait_get('//*[@id="account_pulldown"]').click()
self.__wait_get('//*[@id="account_dropdown"]/div/a[last()]').click()
self.driver.get("https://steamcommunity.com/login/home/?goto=")
self.__write_to_json(account)
self.__restart_driver()
await self.__write_to_database(account)
logger.info(f"Вход для аккаунта {username} не удался. Ошибка: семейный доступ")
continue
@ -115,6 +152,8 @@ class SteamLogin():
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'))
).click()
# ключевой момент
WebDriverWait(self.driver, 10).until(
EC.presence_of_element_located(('xpath', '//*[@id="email_authenticator_form"]/div/div[2]/label'))
).click()
@ -123,8 +162,8 @@ class SteamLogin():
if is_red:
self.__wait_get('//*[@id="account_pulldown"]').click()
self.__wait_get('//*[@id="account_dropdown"]/div/a[last()]').click()
self.driver.get("https://steamcommunity.com/login/home/?goto=")
self.__write_to_json(account)
self.__restart_driver()
await self.__write_to_database(account)
logger.info(f"Вход для аккаунта {username} не удался. Ошибка: красная табличка")
continue
@ -144,6 +183,6 @@ class SteamLogin():
logger.info(f"Вход для аккаунта {username} не удался. Ошибка: {str(e)}")
# Возвращаемся на страницу входа для следующего аккаунта
self.__write_to_json(account)
self.driver.get("https://steamcommunity.com/login/home/?goto=")
await self.__write_to_database(account)
self.__restart_driver()