humanemulator.net — справка. Продукт, демо и покупка — на хуманэмулятор.рф | Демо | Купить | API | лог изменений

Обновлено в августе 2026. · Руководство humanemulator.net

Несколько копий и порты

Теги: порты ошибки PHP

Каждый экземпляр Studio слушает свой HTTP-порт. Скрипт с зашитым localhost:7010 во второй копии бьёт в первую или в мёртвый порт — часто это unknown command. Хост берите из окружения процесса, которым Studio запускает скрипт.

Зачем две копии

  • Два независимых робота сразу: разные прокси, разные профили, разные ящики почты.
  • Отладка нового скрипта, пока боевой крутится по расписанию.
  • Разные проекты без общей папки Settings и общего download.

Одна копия = один HTTP-сервер команд = один исполнитель расписания. Параллельность — это несколько процессов, не «два navigate подряд».

Не ставьте две копии в одну папку установки «поверх» друг друга без разных портов: Settings, download и лог будут общими, отладка превратится в лотерею. Либо две папки, либо явный другой порт и другие пути файлов — см. чеклист ниже.

Что не является второй копией

  • Вкладки браузера внутри одной Studio — один порт. Методы вкладок на хабе browser.
  • Две задачи в одном scheduler — очередь, не параллель. См. гайд расписания.
  • Два PHP-файла, один процесс Studio — всё равно один порт; второй скрипт просто ждёт, если первый ещё бежит из панели.

xhe_host из окружения

При запуске из Studio в процесс попадает RPABOT_HOST_URL. Актуальные шаблоны читают её в xhe_host. Это сделано как раз чтобы не ловить смену порта руками.

$xhe_host = getenv("RPABOT_HOST_URL");

Python:

import os
xhe_host = os.environ.get("RPABOT_HOST_URL", "127.0.0.1:7010")

Подробнее про шаблоны языков: первый скрипт на Python/C#/JS. Старые примеры с "localhost:7010" или 127.0.0.1:7013 — порт чужой машины. В многоэкземплярном контуре их нельзя копировать как есть.

Как проверить, куда стучитесь

app→get_port — порт живого приложения. Сравните с хвостом xhe_host. Панель информации Studio показывает HTTP-запросы команд: видно IP и порт.

Симптом «метод есть в справке, unknown command в логе»: шаблон смотрит на другой экземпляр или Templates не подключены. Сначала порт, потом include. Разбор: unknown command.

Запуск из внешней IDE: выставьте ту же переменную окружения, что у целевой Studio, либо явно хост:порт этой копии. Без живого приложения обёрткам некуда слать POST.

Разведите файлы

Даже при разных портах легко затереть работу соседа:

  • папка download — своя на копию;
  • файлы logger и sqlite — свои;
  • выход Excel/PDF — префикс имени или подпапка botA / botB.

Общий Settings в одной папке установки удобен, пока не начнёте одновременно менять прокси и отпечаток. Тогда лучше две установки или явный профиль на скрипт.

Окна и трей

В настройках задайте «Название окна» — в панели задач будут разные заголовки. «Сворачивать в трей» / «скрывать при старте» не плодят десяток одинаковых кнопок. Для RT то же самое: две службы визуально не различить без заголовка.

Порт второй копии меняйте в настройках этой копии, не «подождите, 7010 освободится». Если порт занят — жива первая Studio или процесс не убился после падения.

Чеклист перед двумя роботами

  1. Две установки или две явно разные папки Settings — не один и тот же профиль «на двоих» без необходимости.
  2. Разные HTTP-порты. Скрипт читает getenv("RPABOT_HOST_URL"), не localhost:7010.
  3. Свои папки download, логов, Excel/PDF. Префикс botA / botB в именах файлов.
  4. Разные заголовки окон. Свои задачи в расписании — очередь не общая между копиями.
  5. Проверка: get_port совпадает с хвостом xhe_host. Иначе — unknown command.
$xhe_host = getenv("RPABOT_HOST_URL");
$logger->info("host", $xhe_host);
$logger->info("port", $app->get_port());

Внешняя IDE: выставьте ту же переменную окружения, что у целевой Studio. Без живого приложения обёрткам некуда слать POST.

FAQ

Порт занят. Первая копия жива или процесс не убился. Смените порт второй копии в настройках, не «подождите и стучите на 7010».

Скрипт из расписания бьёт не туда. Расписание запускает файл в контексте той Studio, где оно висит. Не ожидайте, что задача из копии A пойдёт в порт B.

Harvestor / «многопоточный сбор HTML». Это отдельный объект harvestor, не вторая Studio. Не путайте с двумя полными браузерами.

Две вкладки ≠ два порта. Методы вкладок на хабе browser. Параллельный прокси и разные отпечатки — отдельные процессы.

Скрипт из PyCharm бьёт в 7010, робот на 7020. В окружении IDE нет RPABOT_HOST_URL или зашит старый хост. См. языки.

Все руководства · Типовые ошибки