Как вернуть результат выполнения JavaScript?

Все вопросы касающиеся использования
программы можно задать здесь
Ответить
Аватара пользователя
Zerkalo
Сообщения: 6
Зарегистрирован: 06 окт 2021, 15:10

Как вернуть результат выполнения JavaScript?

Сообщение Zerkalo » 06 окт 2021, 15:18

Вопрос по $browser->run_java_script
Да, вот такой код возвращает результат выполнения JavaScript в броузере:

Код: Выделить всё

echo $browser->run_java_script("navigator.appName")."<br>";
Но как вернуть массив?

=== Дополнено. ====
Разобрался. Возвращает эта функция строку. Значит надо внутри JavaScript создать массив и вернуть строку с помощью JSON.stringify.

Отсюда следующий вопрос: есть ли какие-то ограничение на возвращаемую строку? Ну, например, строка не должна быть более 4096 байт, или время отдачи строки не более 10 секунд?

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

Re: Как вернуть результат выполнения JavaScript?

Сообщение bigfozzy » 06 окт 2021, 16:54

echo $browser->run_java_script("JSON.stringify(navigator.languages)")."<br>";
ограничений нет - если что возникнет - пишите - решим.

Аватара пользователя
Zerkalo
Сообщения: 6
Зарегистрирован: 06 окт 2021, 15:10

Re: Как вернуть результат выполнения JavaScript?

Сообщение Zerkalo » 06 окт 2021, 17:06

И я так понял, что с Sock5 с авторизацией Хуман не работает. С авторизацией через HTTS прокси - пошло.
И не получается работать с Sock5 через Proxifier - это нормальная ситуация или я что-то упустил?

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

Re: Как вернуть результат выполнения JavaScript?

Сообщение bigfozzy » 06 окт 2021, 18:42

Socks с авторизацией работает для всех моделей браузера, кроме встроенного FF

$browser->enable_proxy("","socks5://x.x.x.x:xx;xxx;xxx");
$browser->enable_proxy("","socks4://x.x.x.x:xx;xxx;xxx");
$browser->enable_proxy("","socks://x.x.x.x:xx;xxx;xxx");

если не работает - разрешите хуману в брендмауэре порты использовать, он поднимает свой сокс прокси и работает через него

Аватара пользователя
Zerkalo
Сообщения: 6
Зарегистрирован: 06 окт 2021, 15:10

Re: Как вернуть результат выполнения JavaScript?

Сообщение Zerkalo » 06 окт 2021, 19:55

Есть проблема несоответствия...
В Chrome от Гугла
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36
В Opere
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36 OPR/79.0.4143.72 (Edition Yx 05)
Значение navigator.webdriver выдаёт false
А вот в вашем встроенном браузере
Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36
Значение navigator.webdriver выдаёт undefined
Что для всяких мудрёных счётчиков и антифрод систем признак того, что браузер не совсем тот, за кого он себя выдаёт.
В последних версиях броузеров этот параметр выставляется в ReadOnly со значением либо false, либо true - если запущен под webdriver
Но тут надо предусмотреть конечно navigator.webdriver под undefined для User Agent, в которых этого параметра не было.
Возможно настройку добавить в настройки броузера...

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

Re: Как вернуть результат выполнения JavaScript?

Сообщение bigfozzy » 06 окт 2021, 21:39

Спасибо, исправили и обновили

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

Re: Как вернуть результат выполнения JavaScript?

Сообщение bigfozzy » 07 окт 2021, 21:12

Вернули обратно - с этим не проходит авторизацию в гугле.

Если надо изменить - воспользуйтесь:
$js ="Object.defineProperty(Object.getPrototypeOf(navigator), 'webdriver', {    get: () => false  });";
$browser->set_init_java_script($js);

Ответить