Приветствую всех. Это статья для конкурса № 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."
- Номер конкурса статей
- Второй конкурс статей
- Тема статьи
- Нестандартные хаки
Вложения
Последнее редактирование:




А так по теме - статья норм, да вот только для кого она? Начинающий не поймет из статьи ничего, так как сразу объяснять на примере ВК это hardcore, да и примеров маловато. Продвинутый пользователь это итак знает. 
