- Регистрация
- 24.11.2011
- Сообщения
- 146
- Благодарностей
- 56
- Баллы
- 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.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...
Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.