Compare commits
2 Commits
fd33a824b2
...
24c3e61390
Author | SHA1 | Date | |
---|---|---|---|
|
24c3e61390 | ||
|
4911a879c9 |
4
.env
4
.env
@ -1,3 +1,3 @@
|
||||
API_ID=
|
||||
API_HASH=
|
||||
API_ID=21965168
|
||||
API_HASH=99a551f86da94fbe39097f449434fd53
|
||||
CHANNEL_URL=https://t.me/Burger_Game
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
@ -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
41
main.py
@ -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())
|
@ -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]
|
||||
|
||||
|
@ -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()
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user