Как сделать активный фокус нескольким одновременно запущенным экземплярам Human Emulator?

Если вы обнаружили какие либо ошибки, недочеты и неудобства или другие незачеты в программе напишите нам об этом на этом форуме - мы бум исправлять
Ответить
Аватара пользователя
leo
Сообщения: 62
Зарегистрирован: 11 мар 2018, 21:19

Как сделать активный фокус нескольким одновременно запущенным экземплярам Human Emulator?

Сообщение leo » 18 фев 2021, 19:56

Доброго времени суток!
Сайты могут определять находится ли окно браузера в фокусе или нет.
Соответственно, когда запускаю несколько экземпляров Human Emulator активный фокус остается только у последнего.
Остальные окна human emulator не в фокусе и сайт может определить, что взаимодействие с сайтом происходит, а фокуса то нет.
Проверить активный фокус окна можно как минимум 2мя способами:
1) вызов document.hasFocus()
2) перехват событий onfocus, onblur
Пример можно увидеть тут: https://www.plus2net.com/javascript_tut ... r-demo.php
Понятно, что наверное можно на уровне javascript подменить результат вывода document.hasFocus(), и можно перехватить событие onblur, но такую подмену сайт тоже может детектировать.
Хотелось бы, чтобы каждое окно Human Emulator думало, что оно в фокусе.
Можно ли это сделать?
Заранее спасибо!

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3047
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Как сделать активный фокус нескольким одновременно запущенным экземплярам Human Emulator?

Сообщение bigfozzy » 18 фев 2021, 21:37

А вы попробуйте - фокус всегда есть :
while (true)
{
	echo $browser->run_java_script("document.hasFocus()");
	sleep(1);
}

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3047
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Как сделать активный фокус нескольким одновременно запущенным экземплярам Human Emulator?

Сообщение bigfozzy » 18 фев 2021, 21:41

с вашим примером:
$browser->navigate("https://www.plus2net.com/javascript_tut ... r-demo.php");
$mouse->send_click(2,2);
while (true)
{
	echo $browser->run_java_script("document.hasFocus()");
	sleep(1);
	echo $span->get_by_id("my_msg", false)->get_inner_text();
}

Аватара пользователя
leo
Сообщения: 62
Зарегистрирован: 11 мар 2018, 21:19

Re: Как сделать активный фокус нескольким одновременно запущенным экземплярам Human Emulator?

Сообщение leo » 19 фев 2021, 20:24

Спасибо за быстрый ответ!
Попробовал ваш скрипт. Запустил. Отдельно вызвал cmd.exe и расположил поверх окна Human Emulator.
Текст изменился на оранжевый "This document is NOT in Focus" и в debug панели появились соответствующие строки.

Изображение

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3047
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Как сделать активный фокус нескольким одновременно запущенным экземплярам Human Emulator?

Сообщение bigfozzy » 20 фев 2021, 00:14

Спасибо, Обновите и попробуйте запустить этот скрипт для Chromium Offscreen.
Остальные модели сделаем чуть позже.

Аватара пользователя
leo
Сообщения: 62
Зарегистрирован: 11 мар 2018, 21:19

Re: Как сделать активный фокус нескольким одновременно запущенным экземплярам Human Emulator?

Сообщение leo » 21 фев 2021, 20:56

bigfozzy писал(а):
20 фев 2021, 00:14
Спасибо, Обновите и попробуйте запустить этот скрипт для Chromium Offscreen.
Спасибо, в Offscreen работает!
bigfozzy писал(а):
20 фев 2021, 00:14
Остальные модели сделаем чуть позже.
Спасибо!!!

Ответить