Перехват запросов с помощью js в zennoposter

kopc

Client
Регистрация
24.11.2011
Сообщения
146
Благодарностей
56
Баллы
28
115013


Js и зеннопостер в плане перехвата запросов. 2 вопроса. Как и нафига

Предлагаю на суд свою первую конкурсную статью. И так. К делу.

Стоит отметь, что постер уже имеет встроенный сниффер являющийся по факту вытряхнутой в отдельное окно вкладкой Network из хрома. С ним можно общаться напрямую используя встроенную в «коробку» пачку шарповских классов. Давайте рассмотрим основной из них чуть более подробнее

GetTraffic - что за зверь

Первым и основным с чем вы будете работать это метод GetTraffic
Cсылка на справку для самых неутомимых https://help.zennolab.com/en/v7/zennoposter/7.1.4/topic621.html
Позволяет дернуть из окошка трафика запрос и обработать его как отдельный элемент.

К примеру, у вас есть форма регистрации. Она ругается на регу и плюется в вас капчей. К счастью, зенка умеет обрабатывать кучу всяких разных капчей, а у рукапчи их еще больше.

Но что делать если по какой-то причине вам нужен токен этого сайта или реги?

Ответ. Дернуть его из запроса. К примеру, при написании шаблонов пост/гет может возникнуть необходимость получить ненавистный токен, того что вы прошли ненавистный клауд. Конечно, если вы в душе Еж, то можете разобрать на части ява скрипт и получить из него всю инфу о том, что вы должны сказать сайту. Но это если вы Еж.
Во всех остальных случаях не плохой идеей будет написание «гибридного» шаблона. Вы проходите клауд в браузере, дергаете токен и дальше работает на запросах. Большинство токенов живут либо в теле ответа, либо в его шапке. Обратиться к ним можно как по отдельности, так и одновременно.

Рассмотрим код из представленной справки более подробно.

Тут нас интересуют следующие строки

C#:
// дергаем последний запрос из вкладки «трафик»
var traffic = instance.ActiveTab.GetTraffic();
// получаем коллекцию содержащую в себе инфу о теле запроса, шапки и урлы
// В данном случае присваиваем переменной t поштучно значения из переменной трафик
foreach(var t in traffic)
//Туда сюда. Сендим в лог урлу, метод запроса и код ответа. Обращаться к ним можно используя свойства объекта t. Вроде это свойствами называется. 
//------------Короче жмакаете cntl+пробел и выбираете что вам нужно. Я так и не запомнил правильные названия всей этой теоретической движухи шарпа. Ну тут уже ничего не поделаешь. Или шашечки или ехать
project.SendInfoToLog(string.Format("Url: {0}\r\n Method: {1}\r\n Result: {2}", t.Url, t.Method, t.ResultCode));
// дергаем следующий запрос
traffic = instance.ActiveTab.GetTraffic();
Все это нереально круто пока внезапно вы не утыкаетесь в некоторую, не знаю как сказать, забагованность чтоли, этого метода. У него куча свистелок-перделок и ограничений. Например, для работы в теле объекта и раскидки его по переменным люди используют таблицы, как в этой теме
https://zennolab.com/discussion/threads/poluchit-dannye-iz-gettraffic-v-peremennye.46607/

Но у меня моральная травма от экселя, так что я предпочитаю собственные костили. По крайней мере потому, что я сам сломал ногу и сам их для себя выточил.

Собственно, переходим к заявленной в заголовке теме.

Предлагаю на суд сообщества следующий скрипт для работы с, например, джейсоном тела запроса

JavaScript:
(function() {
    var origOpen = XMLHttpRequest.prototype.open;
    XMLHttpRequest.prototype.open = function() {
    this.addEventListener('load', function() {
    const obj = JSON.parse(this.responseText)
    const rates_now = [];
        
if(this.responseURL.includes("Нужная вам фигня"))
    {
        for (var i = 0; i < obj.data.length; i++)
        Обработка джейсона   
    {
}
}
    alert(результат обработки)
});
origOpen.apply(this, arguments);
};
})();

Первый вопрос, который у вас возникает? Чо это за фигня? А вот что.

Мы можем мониторить трафик напрямую из вкладки Трафик. В чем профит то? Не нужны токены, не нужно изобретать велосипед при работе с getTraffic. Особенно актуально для сайтов с автообновляемым контентом, разрабы которых почему-то решили не использовать websokket.
Второй профит намного более глобальный.

Эта херня фактически один поток. Т.е. вы можете запустить скрипт и работать дальше кубиками.

Но внимательный читатель спросит чем я упоролся зачем там алерт? А это 2я пара костылей. Удивительный мир программирования. Да
JavaScript:
alert(результат обработки)
Alert выводит окно с сообщением в браузере, а зенка умеет их читать. Ага. Этой переменной из вкладки окружения можно пользоваться.

{-Page.LastAlertText-}

Получает инфо от работы скрипта. Но только учитывайте, что оно имеет ограничения по количеству символов, так что впихнуть туда «Войну и Мир» не удастся. Так что не забывайте занулять ее. Именно для зануления алерт и вынесен за приделы обработки джейсона. Смотрите. Вам нужен запрос содержащий например слово "rait". Вы пишете слово рейт, но на сайте есть и другие запросы. Так что как только вы получите слово рейт и обработает его следующий увиденный скриптом запрос обновит содержимое переменно {-Page.LastAlertText-}

115014

На скрине представленная общая схема работы с этим скриптом.


Если будут вопрос, пишите в комментарии. Постараюсь ответить


Если доживу до следующего конкурса и мне будет не лень, то расскажу как по тому же принципу работать с сокетами, чтобы обойти систему генера токенов допуска в них.
 

Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.

Регистрация
26.05.2020
Сообщения
461
Благодарностей
164
Баллы
43
Очень интересно, но них.йа не понятно. Лайку пульнул, ибо чую, что тема достойная )
 
  • Спасибо
Реакции: Roman*

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 651
Благодарностей
1 319
Баллы
113
Если будут вопрос, пишите в комментарии. Постараюсь ответить
Не хрена не понятно от слова совсем. Как то более подробней нужно с примерами какими то. А то выглядит как тяп ляп и готово. А как же новички? Они же вообще не поймут и пройдут мимо, открыл, увидел, не хрена не понял, закрыл, и дальше пошел.
 

kopc

Client
Регистрация
24.11.2011
Сообщения
146
Благодарностей
56
Баллы
28
Не хрена не понятно от слова совсем. Как то более подробней нужно с примерами какими то. А то выглядит как тяп ляп и готово. А как же новички? Они же вообще не поймут и пройдут мимо, открыл, увидел, не хрена не понял, закрыл, и дальше пошел.
Приветствую. Спасибо за ваше сообщение. Какой пример вы хотели бы увидеть?
Стоит учесть, что тема не совсем для новичков. Я когда начал осваивать зеннопостер, то на запросах шаблоны начал писать месяцев через 7-8 только.

Отпишитесь, что не понятно. Постараюсь вам объяснить
 
  • Спасибо
Реакции: samsonnn

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 651
Благодарностей
1 319
Баллы
113
Приветствую. Спасибо за ваше сообщение. Какой пример вы хотели бы увидеть?
Стоит учесть, что тема не совсем для новичков. Я когда начал осваивать зеннопостер, то на запросах шаблоны начал писать месяцев через 7-8 только.

Отпишитесь, что не понятно. Постараюсь вам объяснить
Вообще нечего не понятно, от слова совсем, вы пару примеров приведите, выложите со скринами, с описанием что да как, может видео снимите еще лучше будет.
 

Oleg1987

Client
Регистрация
11.08.2014
Сообщения
1 165
Благодарностей
744
Баллы
113
Все это нереально круто пока внезапно вы не утыкаетесь в некоторую, не знаю как сказать, забагованность чтоли, этого метода. У него куча свистелок-перделок и ограничений. Например, для работы в теле объекта и раскидки его по переменным люди используют таблицы, как в этой теме
https://zennolab.com/discussion/threads/poluchit-dannye-iz-gettraffic-v-peremennye.46607/
В этой самой теме приведены примеры как разобрать ответ и получить нужные данные на кошерном C#. Зачем пилить велосипед на JS - непонятно.
 

oleg21621

Client
Регистрация
20.04.2016
Сообщения
745
Благодарностей
139
Баллы
43
нЕ ПОНЯЛ ТЕМУ
 
Последнее редактирование:

kopc

Client
Регистрация
24.11.2011
Сообщения
146
Благодарностей
56
Баллы
28
В этой самой теме приведены примеры как разобрать ответ и получить нужные данные на кошерном C#. Зачем пилить велосипед на JS - непонятно.
Ну в основной статье я дал ссылку на эту тему. Почему js может быть выгоден заместо снипета шарпа из тема.

Во-первых, это тот факт, что скрипт висит на, условно говоря, "пасиве". Следовательно, у вас пропадает необходимость использовать
instance.UseTrafficMonitoring.

Во-вторых, вам никто не мешает писать это все дело в список для последующего разбора. К примеру, это может понадобится для парсинга, когда вы собираете информации о торговых сделках. Не все сайты используют для этого сокеты

В-третьих, так как это формально "отдельный поток" вы можете обратиться к нему из любого места шаблона просто прочитав ласт алерт без необходимости использовать траффик монитор и гет траффик.

В-четвертых, вам не нужно работать с таблицей.

В качестве примера можно указать на динамические джейсоны. Предствим условную ситуацию, где вы получаете ответ капчи. В джейсоне может быть несколько вариантов. Процессинг, капча решена, капча не решена. Исходя из этого вам нужно постоянно обращаться к таблице, тащить из нее данные, разбирать их, потом выполнять действия. Ну это если вы новичок, то именно так и будет выглядеть логика.

Конечно, можно в сам снипет вписать десириалайз боди, потом подцепить нетонсофт либу, разобрать джейсон, потом сделать логику его обработки. Ну это если вы за шарп шарите. Во-всех остальных случаях добро пожаловать в миллион кубиков

Основное предназначение скрипта уйти от instance.UseTrafficMonitoring, который необходим, если вы будете парсить не один запрос, а постоянно один и тот же запрос
 

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 651
Благодарностей
1 319
Баллы
113
ТС где рабочий пример?
Шаблон с примером?
Скрины с примером?
Видео где?
 
  • Спасибо
Реакции: Ribas и djaga

slavyn8213

Client
Регистрация
28.10.2018
Сообщения
173
Благодарностей
39
Баллы
28
было б доходчиво-с примерами для новичков-однозначно за тебя проголосовал бы- а так читаю -интересно-но них... не понятно)) не у всех такие знания как у вас
 

ZennoLab Team

Super Moderator
Команда форума
Регистрация
22.01.2019
Сообщения
1 221
Благодарностей
3 367
Баллы
113
было б доходчиво-с примерами для новичков-однозначно за тебя проголосовал бы- а так читаю -интересно-но них... не понятно)) не у всех такие знания как у вас
@kopc подсказывают вам идею для следующего конкурса статей. Адаптируйте текущий материал для новичков.
 

Tony80

Client
Регистрация
21.07.2021
Сообщения
173
Благодарностей
43
Баллы
28
А как же новички? Они же вообще не поймут и пройдут мимо, открыл, увидел, не хрена не понял, закрыл, и дальше пошел.
Проголосую руками и ногами за того автора, кто вместо отдельной авторской темы сделает одно очень важное для Зенно сообщества дело - это составит подробный roadmap -> какими знаниями и в каким областях нужно обладать, чтобы понимать те или иные решения/примеры.

Я вот открыл - интуитивно понял, что к чему относится, но тут же понял, что cамостоятельно я такое использовать не смогу.

p.s. При этом я ещё молчу, что доходчиво и понятно излагать - отдельный навык :-)
 

DiXakMan

Client
Регистрация
17.09.2018
Сообщения
90
Благодарностей
15
Баллы
8
Еще прикол данного подхода, getTraffic работает корректно только для CEF браузера, для Chromium не работает, особенно если запрос "защищен", это когда рядом с запросом шестеренка иконка, тогда тело не получить
 

Roman*

Client
Регистрация
25.09.2013
Сообщения
1 651
Благодарностей
655
Баллы
113
Только я обрадовался, что будет обход клауда новым способон, но так нифига и не понял, увы, про парсинг трафика итак были сниппеты на сишарпе без наворотов. Тем кто все таки ищет как обойти клауд, принцип тот же, браузерно прогружаем клауд, берем куки клауда и уже на запросах пуляем все остальное, например вход в аккаунты или что то другое, прокся при этом должна быть одна и та же в браузере и запросах.
P.S. Но лайк все равно поставил)
 
  • Спасибо
Реакции: Live9up и rol

marushin

Client
Регистрация
12.01.2015
Сообщения
185
Благодарностей
55
Баллы
28
Тоже не втыкаю - то ли обуздали яву и сами генерим токены на отправку, тем самым избавляемся от браузера и катаемся на запросах - это крутяк. Или просто парсим ответ с токеном полученным обычным http - тогда в чём соль?
 

ZennoCat

Client
Регистрация
06.01.2020
Сообщения
35
Благодарностей
8
Баллы
8
Как раз на днях использовал такой подход, чтобы не тратить тысячелетия на разбор гугловского js кода просто сделал гибридный шаблон и в ответ забирал токен далее его подставлял в post/get запросы и получал необходимые ответы)). Только я использовал код c#, нужно будет попробовать ваш метод через js
 

WLDN

Client
Регистрация
09.07.2015
Сообщения
357
Благодарностей
564
Баллы
93
К слову в C# и на "пассиве" можно сделать и таблицу можно не использовать. Метод не "забагован" и работает нормально. Просто немного надо прокачать навыки кодинга. А вот вебсокет он ловить не умеет - это точно.
 

Arkadash

Client
Регистрация
23.02.2019
Сообщения
35
Благодарностей
7
Баллы
8
интересно, но них.йа не понятно
Вероятно автор просто усложнил схему:
1. Включаем браузер
C#:
instance.Launch(ZennoLab.InterfacesLibrary.Enums.Browser.BrowserType.Chrome, true);
2. Берём из куки-контейнера нужные токены
C#:
return Encoding.UTF8.GetString(project.Profile.CookieContainer.Export());
3. Выключаем браузер
C#:
instance.Launch(ZennoLab.InterfacesLibrary.Enums.Browser.BrowserType.WithoutBrowser, true);
4. Работаем на запросах с готовыми куками
 
Регистрация
26.05.2020
Сообщения
461
Благодарностей
164
Баллы
43
4. Работаем на запросах с готовыми куками
Как долго? Все эти 4 строки кода в одном кубике можно юзать? Подставлять перед каждым запросом этот кубик?
Все же нехватает доброго примера в виде шаблона на подобные штуки )
 

Arkadash

Client
Регистрация
23.02.2019
Сообщения
35
Благодарностей
7
Баллы
8

frion-seo

Client
Регистрация
27.02.2011
Сообщения
506
Благодарностей
451
Баллы
63
С алертом это прикольно придумано . Я когда делал подобное поднимал локальный wss сервер и на него передавал через js перехваченные данные
120408
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)