From 509c82388433ae120469605cc852a6aa39cce636 Mon Sep 17 00:00:00 2001 From: evgeniy_t Date: Sat, 8 Feb 2025 12:15:51 +0500 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20auto=5Fcookies.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Автоматическое создание профилей chrome и получение cookies файлов, с передачей на удалённый хост --- auto_cookies.py | 178 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 auto_cookies.py diff --git a/auto_cookies.py b/auto_cookies.py new file mode 100644 index 0000000..615ed80 --- /dev/null +++ b/auto_cookies.py @@ -0,0 +1,178 @@ +import os +import time +import subprocess +from selenium import webdriver +from selenium.webdriver.chrome.options import Options +from selenium.webdriver.common.by import By +from selenium.webdriver.common.keys import Keys +from selenium.webdriver.support.ui import WebDriverWait +from selenium.webdriver.support import expected_conditions as EC + +BASE_COOKIES_PATH = "/root/script/cookies" # Базовый путь для сохранения cookies +PRIVATE_KEY_PATH = "id_rsa" # Путь к приватному ключу для SCP +SERVER_USER = "root" # Пользователь на удалённом сервере +SERVER_IP = "45.140.146.245" # IP удалённого сервера +REMOTE_COOKIES_PATH = "/usr/script/cookies_" # Путь на удалённом сервере + +BASE_CHROME_PROFILE_PATH = "/root/.chrome-profile_" # Базовый путь к профилю Chrome + +# Акаунты +ACCOUNTS = [ + {"email": "rugikmeg@gmail.com", "password": "k88mGHVQ"}, + {"email": "13ivanill2025@gmail.com", "password": "k88mGHVQ"}, + +] + +def is_profile_created(profile_index): + """Проверка, создан ли профиль.""" + profile_path = f"{BASE_CHROME_PROFILE_PATH}{profile_index}" + return os.path.exists(profile_path) + +def is_logged_in(driver): + """Проверка, выполнен ли вход в аккаунт YouTube.""" + try: + driver.get("https://www.youtube.com") + time.sleep(3) + return "Sign in" not in driver.page_source + except Exception as e: + print(f"Ошибка при проверке авторизации: {e}") + return False + +def login_to_youtube(driver, email, password): + """Авторизация в YouTube.""" + try: + driver.get("https://accounts.google.com/ServiceLogin?service=youtube&uilel=3&passive=true&continue=https%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26app%3Ddesktop%26hl%3Den%26next%3D%252F&hl=en&ec=65620") + time.sleep(2) + + # Вводим email + email_field = WebDriverWait(driver, 10).until( + EC.presence_of_element_located((By.ID, "identifierId")) + ) + email_field.send_keys(email) + email_field.send_keys(Keys.RETURN) + time.sleep(2) + + # Вводим пароль + password_field = WebDriverWait(driver, 10).until( + EC.presence_of_element_located((By.NAME, "Passwd")) + ) + password_field.send_keys(password) + password_field.send_keys(Keys.RETURN) + time.sleep(5) + + # Проверяем успешность авторизации + return is_logged_in(driver) + except Exception as e: + print(f"Ошибка при авторизации: {e}") + return False + +def extract_cookies(driver, profile_index): + """Извлечение cookies и сохранение в файл.""" + try: + cookies = driver.get_cookies() + cookies_path = f"{BASE_COOKIES_PATH}{profile_index}.txt" + with open(cookies_path, "w") as file: + file.write("# Netscape HTTP Cookie File\n") + file.write("# http://curl.haxx.se/rfc/cookie_spec.html\n") + file.write("# This is a generated file! Do not edit.\n\n") + for cookie in cookies: + expiry = cookie.get('expiry', '') + file.write( + f"{cookie['domain']}\tTRUE\t{cookie['path']}\t{str(cookie['secure']).upper()}\t{expiry}\t{cookie['name']}\t{cookie['value']}\n" + ) + print(f"Cookies сохранены в {cookies_path}") + return True + except Exception as e: + print(f"Ошибка при извлечении cookies для профиля {profile_index}: {e}") + return False + +def transfer_cookies_via_scp(profile_index): + """Передача cookies на сервер через SCP.""" + try: + if not os.path.exists(PRIVATE_KEY_PATH): + print(f" Файл ключа {PRIVATE_KEY_PATH} не найден.") + return False + + # Команда SCP + cookies_path = f"{BASE_COOKIES_PATH}{profile_index}.txt" + remote_cookies_path = f"{REMOTE_COOKIES_PATH}{profile_index}.txt" + scp_command = [ + "scp", + "-o", "StrictHostKeyChecking=no", + "-i", PRIVATE_KEY_PATH, + cookies_path, + f"{SERVER_USER}@{SERVER_IP}:{remote_cookies_path}" + ] + + # Выполняем SCP + result = subprocess.run(scp_command, check=True, text=True, capture_output=True) + + if result.returncode == 0: + print(f"Cookies успешно переданы на сервер {SERVER_IP} для профиля {profile_index}.") + return True + else: + print(f"Ошибка при передаче cookies для профиля {profile_index}: {result.stderr}") + return False + except subprocess.CalledProcessError as e: + print(f"Ошибка при выполнении SCP для профиля {profile_index}: {e.stderr}") + return False + except Exception as e: + print(f"Общая ошибка для профиля {profile_index}: {e}") + return False + +def process_profile(profile_index, email, password): + """Обработка одного профиля.""" + try: + # Настройки Chrome + options = Options() +# options.add_argument("--headless") # Без интерфейса + options.add_argument("--disable-gpu") + options.add_argument("--no-sandbox") + options.add_argument("--disable-dev-shm-usage") + + # Указываем профиль пользователя + profile_path = f"{BASE_CHROME_PROFILE_PATH}{profile_index}" + options.add_argument(f"--user-data-dir={profile_path}") + options.add_argument("--profile-directory=Default") + + # Запуск браузера + driver = webdriver.Chrome(options=options) + + # Проверка авторизации + if is_profile_created(profile_index): + print(f"Профиль {profile_index} уже создан. Проверяем авторизацию...") + if not is_logged_in(driver): + print(f"Пользователь не авторизован. Пытаемся войти...") + if not login_to_youtube(driver, email, password): + print(f" Не удалось авторизоваться для профиля {profile_index}.") + driver.quit() + return False + else: + print(f"Профиль {profile_index} не создан. Создаем и авторизуемся...") + if not login_to_youtube(driver, email, password): + print(f" Не удалось авторизоваться для профиля {profile_index}.") + driver.quit() + return False + + # Извлекаем куки + if extract_cookies(driver, profile_index): + if transfer_cookies_via_scp(profile_index): + print(f" Процесс завершён успешно для профиля {profile_index}.") + else: + print(f"Ошибка при передаче cookies для профиля {profile_index}.") + else: + print(f"Ошибка при извлечении cookies для профиля {profile_index}.") + + driver.quit() + return True + except Exception as e: + print(f"Общая ошибка выполнения скрипта для профиля {profile_index}: {e}") + return False + +if __name__ == "__main__": + print("Начинаем выполнение скрипта.") + for profile_index, account in enumerate(ACCOUNTS, start=1): + print(f"Обработка профиля {profile_index}...") + process_profile(profile_index, account["email"], account["password"]) + + print("Все профили обработаны.")