- Регистрация
- 24.11.2011
- Сообщения
- 149
- Благодарностей
- 57
- Баллы
- 28
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(результат обработки)
});
};
})();
Первый вопрос, который у вас возникает? Чо это за фигня? А вот что.
Мы можем мониторить трафик напрямую из вкладки Трафик. В чем профит то? Не нужны токены, не нужно изобретать велосипед при работе с getTraffic. Особенно актуально для сайтов с автообновляемым контентом, разрабы которых почему-то решили не использовать websokket.
Второй профит намного более глобальный.
Эта херня фактически один поток. Т.е. вы можете запустить скрипт и работать дальше кубиками.
Но внимательный читатель спросит
JavaScript:
alert(результат обработки)
{-Page.LastAlertText-}
Получает инфо от работы скрипта. Но только учитывайте, что оно имеет ограничения по количеству символов, так что впихнуть туда «Войну и Мир» не удастся. Так что не забывайте занулять ее. Именно для зануления алерт и вынесен за приделы обработки джейсона. Смотрите. Вам нужен запрос содержащий например слово "rait". Вы пишете слово рейт, но на сайте есть и другие запросы. Так что как только вы получите слово рейт и обработает его следующий увиденный скриптом запрос обновит содержимое переменно {-Page.LastAlertText-}
На скрине представленная общая схема работы с этим скриптом.
Если будут вопрос, пишите в комментарии. Постараюсь ответить
Если доживу до следующего конкурса и мне будет не лень, то расскажу как по тому же принципу работать с сокетами, чтобы обойти систему генера токенов допуска в них.
- Номер конкурса статей
- Двадцатый конкурс статей
Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...
Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.