Как автоматизировать вход на сайт
Допустим, вы хотите автоматизировать работу с сайтом. В большинстве случаев вы сначала заходите в свою учетную запись, а потом делаете что-то ещё. Это действие тоже можно автоматизировать! В этой статье вы узнаете, как создать простой скрипт автоматизации, который будет автоматически заходить в ваш аккаунт.
Эта статья предназначена для пошагового создания вашего скриптта. Если вы хотите осмотреть полный скрипт — прокрутите статью до конца.
Шаг 1: подготовьте IDE или похожую программу
Для написания скрипта вам понадобится программа для его написания. Выбор за вами, но мы рекомендуем использовать IDE. Выполните первые 4 шага из следующей статьи: Начало работы со скриптами автоматизации.
Шаг 2: создайте скрипт подключения к API и задайте функции
На этом этапе вам нужно настроить работу скрипта с API. Скрипт будет включать в себя:
- Эндпоинты API
- Переменные для входа в аккаунт
- Заданные функции для входа, открытия и закрытия профиля
- Импортированные модули, включая
requests,hashlibиtime. Также будут включены некоторые модули, связанные с Selenium - Запрос на вход в учетную запись
Используйте для этого следующий шаблон:
import requests
import hashlib
import time
from selenium import webdriver
from selenium.webdriver.chromium.options import ChromiumOptions
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.by import By
MLX_BASE = "https://api.multilogin.com"
MLX_LAUNCHER = "https://launcher.mlx.yt:45001/api/v1"
MLX_LAUNCHER_V2 = (
"https://launcher.mlx.yt:45001/api/v2" # recommended for launching profiles
)
LOCALHOST = "http://127.0.0.1"
HEADERS = {"Accept": "application/json", "Content-Type": "application/json"}
# TODO: Insert your account information in both variables below
USERNAME = ""
PASSWORD = ""
# TODO: Insert the Folder ID and the Profile ID below
FOLDER_ID = ""
PROFILE_ID = ""
def signin() -> str:
payload = {
"email": USERNAME,
"password": hashlib.md5(PASSWORD.encode()).hexdigest(),
}
r = requests.post(f"{MLX_BASE}/user/signin", json=payload)
if r.status_code != 200:
print(f"\nError during login: {r.text}\n")
else:
response = r.json()["data"]
token = response["token"]
return token
def start_profile() -> webdriver:
r = requests.get(
f"{MLX_LAUNCHER_V2}/profile/f/{FOLDER_ID}/p/{PROFILE_ID}/start?automation_type=selenium",
headers=HEADERS,
)
response = r.json()
if r.status_code != 200:
print(f"\nError while starting profile: {r.text}\n")
else:
print(f"\nProfile {PROFILE_ID} started.\n")
selenium_port = response["data"]["port"]
driver = webdriver.Remote(
command_executor=f"{LOCALHOST}:{selenium_port}", options=ChromiumOptions()
)
# For Stealthfox profiles use: options=Options()
# For Mimic profiles use: options=ChromiumOptions()
return driver
def stop_profile() -> None:
r = requests.get(f"{MLX_LAUNCHER}/profile/stop/p/{PROFILE_ID}", headers=HEADERS)
if r.status_code != 200:
print(f"\nError while stopping profile: {r.text}\n")
else:
print(f"\nProfile {PROFILE_ID} stopped.\n")
token = signin()
HEADERS.update({"Authorization": f"Bearer {token}"})Шаблон похож на пример автоматизации с Selenium, за исключением того, что в начале он имеет следующий модуль (он нам понадобится для извлечения данных):
from selenium.webdriver.common.by import By
Шаг 3: выберите веб-страницу для автоматизации процесса входа в систему.
Вы можете использовать любой веб-сайт, содержащий страницу входа. Но для этого руководства мы рекомендуем попробовать эту страницу — она отлично подходит для автоматизации: Login Page.
Шаг 4: найдите нужную информацию
В нашем случае это будут текстовые панели для учетных данных и кнопки входа:

На этой странице будут все три элемента. Вот что можно сделать:
- Откройте DevTools в браузере. Вот как это сделать для браузеров на базе Chromium и Firefox:
- Windows и Linux: нажмите
Ctrl + Shift + I - macOS: нажмите
Cmd + Option + I
- Windows и Linux: нажмите
- Убедитесь, что вы находитесь на вкладке «Элементы».
- Используйте горячую клавишу поиска, чтобы найти целевое значение.
- Windows и Linux:
CTRL + F. - macOS:
Cmd + F.
- Windows и Linux:
- Найдите значения, которое нужно использовать для парсинга. В нашем случае это будут следующие значения:
-
id="username"для текстового поля «Username» -
id="password"для текстового поля «Password» -
class="radius"для кнопки «Login»
-
- Выберите элементы с тегами на вкладке «Элементы»
- Щёлкните по выбранному значению и скопируйте значение атрибута
idилиclass. Например, если вы видитеid="username", вам нужно скопироватьusername - Запишите значения где-нибудь — они понадобятся вам позже.

Шаг 5: вернитесь к IDE и добавьте новые строки кода
- Вернитесь к выбранному вами IDE (например, VS Code)
- Щелкните поле кода и добавьте переменную для открытия и выполнения действий в профиле:
driver = start_profile() - Добавьте
driver.get(“<ваш сайт>”). В нашем случае это будет следующая команда:driver.get("https://the-internet.herokuapp.com/login") - Теперь нам нужна небольшая задержка для скрипта, чтобы он начал выполнять другие команды через 5 секунд после открытия веб-страницы:
time.sleep(5).
Шаг 6: создайте скрипт для поиска элемента
Используйте эту команду для поиска элемента: driver.find_element(By.<attribute on the page>, "<element>"). Она указывает скрипту, что искать на странице. В нашем примере мы скопировали несколько значений атрибутов id и class. Добавьте соответствующие строки из списка ниже:
- Добавьте следующую строку для текстового поля имени пользователя:
driver.find_element(By.ID, "username") - Добавьте следующую строку для текстового поля пароля:
password = driver.find_element(By.ID, "password") - Добавьте следующую строку для кнопки входа:
button = driver.find_element(By.CLASS_NAME, "radius")
Эти значения понадобятся нам позже, поэтому нужно создать переменные для команд. Вы можете назвать их как угодно, вот примеры:
login = driver.find_element(By.ID, "username")
password = driver.find_element(By.ID, "password")
button = driver.find_element(By.CLASS_NAME, "radius")Шаг 7: укажите сценарию, что делать
Мы указали скрипту, что именно он должен обнаруживать на странице. Теперь мы попросим скрипт указать учётные данные и выполнить вход на самой странице. Для этого вам понадобятся следующие функции:
-
send_keys()для указания символов, которые следует вводить в текстовые поля. -
click()для имитации щелчка левой кнопкой мыши.
В нашем случае вы могли заметить, что веб-сайт указал следующие значения для учетных данных:
-
tomsmithдля имени пользователя. -
SuperSecretPassword!для пароля.
Нам нужно указать скрипту ввести эти значения и нажать кнопку входа. Вот строки кода:
login.send_keys("tomsmith")
password.send_keys("SuperSecretPassword!")
button.click()Шаг 8: завершите скрипт текстовым уведомлением
Наш скрипт готов. Вы можете продолжить подготовку и запустить скрипт, но мы рекомендуем добавить функцию print(), которая сообщит об успешном завершении скрипта. Придумайте текст для функции и добавьте его в конец скрипта:
print("Signed in")Это необязательно, но вы можете добавить функцию stop_profile() после print(). Мы рекомендуем не использовать её, так как эта строка противоречит сути скрипта.
Шаг 9: подготовьте скрипт перед его запуском
- Установите следующие библиотеки Python (более подробную информацию можно найти в документации вашего IDE):
-
requests. -
selenium.
-
- Вставьте ваши значения в указанные ниже переменные скрипта:
Шаг 10: запуск скрипта
- Откройте приложение для ПК (или подключите агент, если вы используете веб-интерфейс).
- По умолчанию скрипт ниже работает для Mimic . Чтобы использовать его для Stealthfox, замените
options=ChromiumOptions()наoptions=Options()в следующей строке:driver = webdriver.Remote(command_executor=f'{LOCALHOST}:{selenium_port}', options=ChromiumOptions()) - Запустите файл
.pyс вашим кодом автоматизации.
Чтобы запустить скрипт в VS Code, нажмите «Выполнить» → «Запуск без отладки» (или «Запустить отладку»).
Если вы всё сделали правильно, вы увидите результат в терминале. Также в профиле вы увидите учётную запись, под которой вы вошли в систему.

Примечания
Теперь всё готово! Вы не ограничены только этими возможностями. Python и Selenium — довольно гибкие инструменты, и у них есть большой потенциал. Можем порекомендовать вам следующее:
- Вы можете заставить скрипт ждать при определённых условиях (например, скрипт будет ждать, пока на странице не появится определённый элемент). Подробнее об этом можно прочитать в соответствующем документе Selenium : Waiting Strategies.
- Вы можете объединить этот скрипт со скриптом из следующей статьи: Основы веб-скрейпинга с помощью Selenium. Это станет отличной отправной точкой для вашего проекта автоматизации!
- Существует множество способов применения Selenium. Подробнее в справочном центре: Selenium Documentation
Полный сценарий
import requests
import hashlib
import time
from selenium import webdriver
from selenium.webdriver.chromium.options import ChromiumOptions
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.by import By
MLX_BASE = "https://api.multilogin.com"
MLX_LAUNCHER = "https://launcher.mlx.yt:45001/api/v1"
MLX_LAUNCHER_V2 = (
"https://launcher.mlx.yt:45001/api/v2" # recommended for launching profiles
)
LOCALHOST = "http://127.0.0.1"
HEADERS = {"Accept": "application/json", "Content-Type": "application/json"}
# TODO: Insert your account information in both variables below
USERNAME = ""
PASSWORD = ""
# TODO: Insert the Folder ID and the Profile ID below
FOLDER_ID = ""
PROFILE_ID = ""
def signin() -> str:
payload = {
"email": USERNAME,
"password": hashlib.md5(PASSWORD.encode()).hexdigest(),
}
r = requests.post(f"{MLX_BASE}/user/signin", json=payload)
if r.status_code != 200:
print(f"\nError during login: {r.text}\n")
else:
response = r.json()["data"]
token = response["token"]
return token
def start_profile() -> webdriver:
r = requests.get(
f"{MLX_LAUNCHER_V2}/profile/f/{FOLDER_ID}/p/{PROFILE_ID}/start?automation_type=selenium",
headers=HEADERS,
)
response = r.json()
if r.status_code != 200:
print(f"\nError while starting profile: {r.text}\n")
else:
print(f"\nProfile {PROFILE_ID} started.\n")
selenium_port = response["data"]["port"]
driver = webdriver.Remote(
command_executor=f"{LOCALHOST}:{selenium_port}", options=ChromiumOptions()
)
# For Stealthfox profiles use: options=Options()
# For Mimic profiles use: options=ChromiumOptions()
return driver
def stop_profile() -> None:
r = requests.get(f"{MLX_LAUNCHER}/profile/stop/p/{PROFILE_ID}", headers=HEADERS)
if r.status_code != 200:
print(f"\nError while stopping profile: {r.text}\n")
else:
print(f"\nProfile {PROFILE_ID} stopped.\n")
token = signin()
HEADERS.update({"Authorization": f"Bearer {token}"})
driver = start_profile()
driver.get("https://the-internet.herokuapp.com/login")
time.sleep(5)
login = driver.find_element(By.ID, "username")
password = driver.find_element(By.ID, "password")
button = driver.find_element(By.CLASS_NAME, "radius")
login.send_keys("tomsmith")
password.send_keys("SuperSecretPassword!")
button.click()
print("Signed in")В этой статье содержатся сторонние ссылки, которые мы официально не одобряем.