Приветствую всех. Это статья для конкурса № II проводимого в 2014 году на сайте http://zennolab.com/.
Думаю, каждый из нас, кто мало-мальски серьёзно занимается созданием автоматов для WEB сталкивался с проблемами чрезмерного потреблением ресурсов (оперативная память, жёсткий диск, трафик), недостатком скорости работы и возникновением ошибок в шаблоне, по причине медленных прокси или неполной загрузки сайта.
Сразу оговорюсь, перечисленные проблемы вовсе не связаны с самой программой, и на мой взгляд ZennoPoster оптимизирован достаточно хорошо. И надо отдать должное разработчикам, они постоянно улучшают производительность своего продукта, за что им отдельная благодарность. А связаны они с тем, что сайты с каждым годом становятся всё более навороченными и тяжёлыми, а скорость их работы более медленной.
Введение
Вот почему, каждый раз разрабатывая очередной постер я задумывался о переходе на GETи POST запросы, потому что я видел различные программы, которые работали в разы быстрее чем мои шаблоны на ZP, а кушали меньше, но я не программист, чтобы писать на чистом C#, но ведь у нас есть ZennoPoster, так что проблему удалось решить вполне успешно.
Взаимодействие с сайтом при помощи POST и GET запросов имеет свои преимущества и недостатки.
Начну с преимуществ:
Теперь поговорим о недостатках:
Хорошо, теперь пришло время перейти к делу. Для работы нам понадобятся следующие инструменты:
Будем делать бота для сайта https://vk.com/, который будет искать случайные профили, и лайкать посты на стене.
Для начала все программы нужно установить и настроить на работу. Ставьте сначала Firefox, затем Charles. Думаю, тут вы сами разберётесь. Если всё сделали правильно, то в Firefox появится расширение под названием "Charles Autoconfiguration".
Социальная сеть, с которой мы будем работать использует защищённый протокол SSL, так что форсируйте использование незащищённого протокола вбив адрес http://vk.com в адресную строку, как использовать SSL читайте ниже, но там возник ряд проблем, которые мне победить не удалось, но может вам удастся.
Создание шаблона
В новых версиях ZP появилась возможность передавать куки из инстанса в файл и обратно, и можно было бы реализовать вход на сайт при помощи обычных действий, и потом использовать куки для необходимых нам операций, но это ведь обучающая статья, не так ли? Поэтому мы пойдём по более сложному пути и сделаем всё на POST и GET запросах.
Чтобы нормально работать с проектом нам нужно добавить "Ссылки из GAC" - "System.Web 4.0.0.0", и прописать в "Директивы using" - "using System.Web;".
Заходим в FF в VK при включёном прокси, и логинимся. Ищем в Charles POST запросы и видим следующую картину.
Делаем выводы, что для того чтобы нормально залогиниться, нам нужен параметр ip_h, логин, пароль и куки. Добываем куки и ip_h со страницы http://vk.com/login.php.
Чтобы понять откуда берётся тот или иной параметр в запросах, нужно использовать поиск по действиями и их внутренностям.
Сразу возникает проблема, информация, получаемая в UTF-8 отображается некорректно, по заголовкам мы видим, что VK использует кодировку windows-1251, её и ставим на настройках GET и POST действий.
Далее записываем куки для будущего использования.
Настало время перейти к поиску пользователей, которых будем лайкать. Обычный поиск VK возвращает только 20 результатов за 1 запрос, делаем цикл, с добавление параметра offset.
Когда лайк поставлен нормально, то в ответе будет "like_my":true, а если встретилась капча, то что-то вроде 16481<!><!>0<!>6590<!>2<!>485585959115<!>0. Длинная цифра - это id, который нужно использовать для получения капчи, GET запросом
https://vk.com/captcha.php?sid=485585959115&s=1.
Если получать капчу при помощи GET запроса, то она приходит в виде бинарных данных, как их приобразовывать я не знаю, поэтому будем грузить капчу в инстанс и оттуда оправлять на распознавание.
То, что у нас получилось в итоге вполне себе рабочий вариант, который можно улучшать и дополнять и получить в конечно варианте нечто вроде этого (то что показано на изображении к vk отношения не имеет).
Вы ограничены только вашей фантазией, так как ZennoPoster предоставляет невероятно широкие возможности для автоматизации работы с сайтами, а благодаря наработкам, встроенным в этот мощный программный комплекс, скорость разработки автоматизированных решений увеличивается многократно, по сравнению с созданием чего-то с 0.
Лично для меня ZennoPoster стал ключом в захватывающий мир программирования, чем надеюсь станет и для вас.
PS. Если статья помогла вам разобраться в теме, я буду очень рад.
Отдельная благодарность сообществу, так как кое-что использовал из уже существующих тем на форуме и разработчикам за отличный продукт.
Ответы на вопросы
Вопрос: Что делать если сайт использует SSL шифрование по защищённому протоколу https.
Ответ: В Charles нужно зайти Proxy > ProxySettings > SSL и прописать там "*vk.com*:443.
Когда попытаемся зайти на сайт, через прокси, в FF появится предупреждение "Это соединение является недостоверным".
Данная проблема решается 2 способами:
Способ 1 - В FF > Инструменты > Charles > InstallCharlesCASSLCertificate.
Способ 2 - Добавить в исключения браузера FF, но если у вас не будет кнопки "Я понимаю риск", нужно сделать следующее: в браузерной строке вбить about:config, в поиске указать browser.xul, и изменить параметр browser.xul.error_pages.expert_bad_cert в значение true. И тогда нужная нам кнопка появится, и можно будет продолжить работу. Нужно будет нажать "Я понимаю риск" > "Добавить в исключения". Если ошибка осталась, то нужно зайти в about:permissions, и нажать на кнопку "Забыть об этом сайте". Если ошибка всё ещё осталась, пока способ лечения не найден (у меня на facebook.com почему то не срабатывает, да и с vk.com возникла проблема, при этом выдавая маразматическое объяснение "Сертификат не будет действителен до 28.08.2014 3:00. Текущее время — 24.11.2014 16:49."
Думаю, каждый из нас, кто мало-мальски серьёзно занимается созданием автоматов для WEB сталкивался с проблемами чрезмерного потреблением ресурсов (оперативная память, жёсткий диск, трафик), недостатком скорости работы и возникновением ошибок в шаблоне, по причине медленных прокси или неполной загрузки сайта.
Сразу оговорюсь, перечисленные проблемы вовсе не связаны с самой программой, и на мой взгляд ZennoPoster оптимизирован достаточно хорошо. И надо отдать должное разработчикам, они постоянно улучшают производительность своего продукта, за что им отдельная благодарность. А связаны они с тем, что сайты с каждым годом становятся всё более навороченными и тяжёлыми, а скорость их работы более медленной.
Введение
Вот почему, каждый раз разрабатывая очередной постер я задумывался о переходе на GETи POST запросы, потому что я видел различные программы, которые работали в разы быстрее чем мои шаблоны на ZP, а кушали меньше, но я не программист, чтобы писать на чистом C#, но ведь у нас есть ZennoPoster, так что проблему удалось решить вполне успешно.
Взаимодействие с сайтом при помощи POST и GET запросов имеет свои преимущества и недостатки.
Начну с преимуществ:
- Лёгкость (в смысле веса) - пожалуй главное преимущество данного подхода. Программе не надо выполнять рендер страницы, не надо подгружать лишние файлы, привязанные к странице (css, js, изображения и др.), происходит значительная экономия ресурсов компьютера.
- Скорость - чтобы выполнить действие вам нужно просто отправить запрос, при этом не нужно загружать страницу, искать и жать на ней кнопку и выполнять другие действия, просто оправляете или берёте то что вам нужно и проверяете ответ. Таким образом где при обычном подходе уже на 10 потоках ощущается загрузка компьютера и падение скорости, при применение POSTи GET запросов и на 100 потоках всё будет работать гладко.
- Работая с POSTи GET запросами, вы в буквальном смысле сможете разобрать сайт по косточкам и получить глубокое понимает процессов, происходящих внутри него, и если даже не получится полностью сделать шаблон на запросах, эти знания помогут вам обойти всевозможные антиспам защиты. Например, когда я делал регалку профилей для одного сайта знакомств, то при регистрации обнаружил интересный запрос с методом "method=log.registrationTime", который отправлялся после первой страницы загрузки регистрации, указывающий на то, что при регистрации, антиспам защита вероятно учитывает время заполнения формы, после чего я подогнал время в шаблоне на заполнение от 30 до 50 секунд.
Теперь поговорим о недостатках:
- Кажущаяся сложность - от освоения в полной мере данного метода меня останавливал, так называемый "страх подхода", так как я не понимал механизма, не понимал, как работать с этим инструментом и с чего начать. Но начал я, как ни странно, с видео по разработке бота для игры на C#, в котором открыл для себя Charles, и это не мой приятель из США, а офигенский прокси-перехватчик запросов, которых открыл мне глаза на то как работают сайты.
- Избыточность - необходимость создавать дополнительные шаги для некоторых операций, например, получение куки, из это вытекает следующий недостаток.
- Более медленная скорость создания шаблонов.
- Отладка сложнее, так как визуально не увидеть где застряло и что вообще происходит.
Хорошо, теперь пришло время перейти к делу. Для работы нам понадобятся следующие инструменты:
- ZennoPoster
- Charles (продукт платный, но я думаю вы знаете, что с этим делать, а если не знаете, пишите в ЛС)
- Mozilla Firefox (+ Adblock Plus, Cookie Controller, Firebug, Proxy Tool, Search Site, по желанию)
- Голова (где скачать не знаю, если найдёте, скиньте пожалуйста ссылочку в ЛС)
Будем делать бота для сайта https://vk.com/, который будет искать случайные профили, и лайкать посты на стене.
Для начала все программы нужно установить и настроить на работу. Ставьте сначала Firefox, затем Charles. Думаю, тут вы сами разберётесь. Если всё сделали правильно, то в Firefox появится расширение под названием "Charles Autoconfiguration".
Социальная сеть, с которой мы будем работать использует защищённый протокол SSL, так что форсируйте использование незащищённого протокола вбив адрес http://vk.com в адресную строку, как использовать SSL читайте ниже, но там возник ряд проблем, которые мне победить не удалось, но может вам удастся.
Создание шаблона
В новых версиях ZP появилась возможность передавать куки из инстанса в файл и обратно, и можно было бы реализовать вход на сайт при помощи обычных действий, и потом использовать куки для необходимых нам операций, но это ведь обучающая статья, не так ли? Поэтому мы пойдём по более сложному пути и сделаем всё на POST и GET запросах.
Чтобы нормально работать с проектом нам нужно добавить "Ссылки из GAC" - "System.Web 4.0.0.0", и прописать в "Директивы using" - "using System.Web;".
Заходим в FF в VK при включёном прокси, и логинимся. Ищем в Charles POST запросы и видим следующую картину.
Делаем выводы, что для того чтобы нормально залогиниться, нам нужен параметр ip_h, логин, пароль и куки. Добываем куки и ip_h со страницы http://vk.com/login.php.
Чтобы понять откуда берётся тот или иной параметр в запросах, нужно использовать поиск по действиями и их внутренностям.
Сразу возникает проблема, информация, получаемая в UTF-8 отображается некорректно, по заголовкам мы видим, что VK использует кодировку windows-1251, её и ставим на настройках GET и POST действий.
Далее записываем куки для будущего использования.
Настало время перейти к поиску пользователей, которых будем лайкать. Обычный поиск VK возвращает только 20 результатов за 1 запрос, делаем цикл, с добавление параметра offset.
Когда лайк поставлен нормально, то в ответе будет "like_my":true, а если встретилась капча, то что-то вроде 16481<!><!>0<!>6590<!>2<!>485585959115<!>0. Длинная цифра - это id, который нужно использовать для получения капчи, GET запросом
https://vk.com/captcha.php?sid=485585959115&s=1.
Если получать капчу при помощи GET запроса, то она приходит в виде бинарных данных, как их приобразовывать я не знаю, поэтому будем грузить капчу в инстанс и оттуда оправлять на распознавание.
То, что у нас получилось в итоге вполне себе рабочий вариант, который можно улучшать и дополнять и получить в конечно варианте нечто вроде этого (то что показано на изображении к vk отношения не имеет).
Вы ограничены только вашей фантазией, так как ZennoPoster предоставляет невероятно широкие возможности для автоматизации работы с сайтами, а благодаря наработкам, встроенным в этот мощный программный комплекс, скорость разработки автоматизированных решений увеличивается многократно, по сравнению с созданием чего-то с 0.
Лично для меня ZennoPoster стал ключом в захватывающий мир программирования, чем надеюсь станет и для вас.
PS. Если статья помогла вам разобраться в теме, я буду очень рад.
Отдельная благодарность сообществу, так как кое-что использовал из уже существующих тем на форуме и разработчикам за отличный продукт.
Ответы на вопросы
Вопрос: Что делать если сайт использует SSL шифрование по защищённому протоколу https.
Ответ: В Charles нужно зайти Proxy > ProxySettings > SSL и прописать там "*vk.com*:443.
Когда попытаемся зайти на сайт, через прокси, в FF появится предупреждение "Это соединение является недостоверным".
Данная проблема решается 2 способами:
Способ 1 - В FF > Инструменты > Charles > InstallCharlesCASSLCertificate.
Способ 2 - Добавить в исключения браузера FF, но если у вас не будет кнопки "Я понимаю риск", нужно сделать следующее: в браузерной строке вбить about:config, в поиске указать browser.xul, и изменить параметр browser.xul.error_pages.expert_bad_cert в значение true. И тогда нужная нам кнопка появится, и можно будет продолжить работу. Нужно будет нажать "Я понимаю риск" > "Добавить в исключения". Если ошибка осталась, то нужно зайти в about:permissions, и нажать на кнопку "Забыть об этом сайте". Если ошибка всё ещё осталась, пока способ лечения не найден (у меня на facebook.com почему то не срабатывает, да и с vk.com возникла проблема, при этом выдавая маразматическое объяснение "Сертификат не будет действителен до 28.08.2014 3:00. Текущее время — 24.11.2014 16:49."
- Тема статьи
- Нестандартные хаки
- Номер конкурса статей
- Второй конкурс статей
Вложения
-
177 байт Просмотры: 1 417
Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...
Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.
Последнее редактирование: