upd to sqlite3

This commit is contained in:
Denis
2025-05-20 08:05:56 +03:00
parent 4911a879c9
commit 24c3e61390
2 changed files with 83 additions and 23 deletions

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
@@ -36,12 +37,30 @@ 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)
open('credentials_backup.json', 'w').write(json.dumps(data))
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
def __restart_driver(self):
@@ -53,22 +72,31 @@ class SteamLogin():
# 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)
username = account['username']
@@ -93,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
@@ -109,7 +137,7 @@ class SteamLogin():
self.__wait_get('//*[@id="account_pulldown"]').click()
self.__wait_get('//*[@id="account_dropdown"]/div/a[last()]').click()
self.__restart_driver()
self.__write_to_json(account)
await self.__write_to_database(account)
logger.info(f"Вход для аккаунта {username} не удался. Ошибка: семейный доступ")
continue
@@ -135,7 +163,7 @@ class SteamLogin():
self.__wait_get('//*[@id="account_pulldown"]').click()
self.__wait_get('//*[@id="account_dropdown"]/div/a[last()]').click()
self.__restart_driver()
self.__write_to_json(account)
await self.__write_to_database(account)
logger.info(f"Вход для аккаунта {username} не удался. Ошибка: красная табличка")
continue
@@ -155,6 +183,6 @@ class SteamLogin():
logger.info(f"Вход для аккаунта {username} не удался. Ошибка: {str(e)}")
# Возвращаемся на страницу входа для следующего аккаунта
self.__write_to_json(account)
await self.__write_to_database(account)
self.__restart_driver()