Бот для написания статей. Существует четыре вида чат-ботов. А где с ними можно пообщаться

Итак в этой статье я продемонстрирую как создать простого бота основанного на визуальном поиске объектов на экране. Преимуществом данного метода является «незаметность» для различных систем защиты от ботов. Для написания бота мы естественно будем использовать специализированную среду для разработки ботов . Если боты создаются для того чтобы сэкономить ваше время на совершение однообразных рутинных действий, то NOMAD создан для того, чтобы сэкономить ваше время при написании бота. В сравнении с написанием ботов на неспециализированных средах программирования или на не очень специализированных разработка на NOMAD может происходить в десятки, а то и в сотни раз быстрее. (т.к. для начала вам еще придется разработать инструменты обнаружения объектов, которые в NOMAD уже встроены готовые). Скачать дистрибутив NOMAD с уже установленным ботом из этой статьи вы можете по этой ссылке (внимание! настройки программы в дистрибутиве рассчитаны на установку его в папку по умолчанию, если вы устанавливаете его в другое место, то измените пути к базе и конструктору с проигрывателем!)

adminbot
Дата: 22.07.2015

Управлять многими - то же, что управлять немногими. Дело в организации.

Сунь Цзы

Нашей задачей сейчас является демонстрация того, как делается бот программа, а потому для автоматизации мы выберем что-нибудь простое и в то же время всем доступное, например, Калькулятор. Конечно это не онлайн игра, но поверьте, создание бота для онлайн игры ничем не отличается. (внимание пример работает в Windows 8 и Windows 7, причем калькулятор должен выглядеть как на скриншоте, который есть ниже по тексту, т.е. например, в Windows XP калькулятор называется и выглядит иначе, и потому там бот работать не будет)

Для того чтобы начать играть «автоматически» в что нибудь нам необходимо пройти следующие этапы:

  • Сформулировать для себя задачу. Каких целей должен достигать наш бот.
  • Какие действия он должен выполнять для этого?
  • Исходя из задачи определить какие объекты он должен видеть, и каким образом, и на какие события реагировать для достижения целей описанных в пункте 1.
  • Создание алгоритма.
  • Программирование.
  • Задачей нашего бота будет бесконечно складывать на калькуляторе 2 числа 59 и 3.

    Для достижения нашей цели нам необходимо, чтобы наша программа нажимала на кнопки 5 и 9 калькулятора, а в случае успеха на кнопку + и кнопку 3 и затем кнопку =

    Следовательно эти объекты мы и должны будем искать на изображении, а затем тыкать в них мышью. Также мы будем анализировать число 59 и число 0 в поле результата, а также кнопку CE, для того чтобы сбросить вычисления на 0 перед началом очередной итерации.

    Итак, наш алгоритм: В бесконечном цикле сначала ищем и жмем мышью на кнопку 5, и на кнопку 9. В случае успеха делаем паузу 3 секунды (чтобы успеть насладиться результатом). Затем проверяем есть ли у нас изображение числа 59, если есть то находим и кликаем мышью на кнопки + и 3 калькулятора, если эти операции также выполнены успешно, то находим и кликаем по кнопке = калькулятора. После чего спим 5 секунд. Затем проверяем, если в поле результата нет картинки 0, значит необходимо нажать кнопку CE, чтобы сбросить результаты предыдущих вычислений. После чего итерация повторяется. При нажатии кнопки Esc программа останавливается.

    Продемонстрируем код программы которая у нас получилась:

    Delphi/Pascal

    Procedure StartOnClick(); begin while (getasynckeystate($1B) = 0) do //цикл продолжается пока не нажмут Esc++ begin if five.MouseClick("l") and nine.MouseClick("l") then //если успешно нажали пять и 9 то begin sleep(3000); //спим 3 секунды if fiftynine.FindPicture then //если нашли 59, то прибавим к ним 3: begin if plus.MouseClick("l") and three.MouseClick("l") then //если получилось нажать плюс 3, то жмем на равно equal.MouseClick("l"); end; end; sleep(5000); //спим 5 секунд if not zero.FindPicture then //если на табло нет нуля CE.MouseClick("l"); //то жмем CE Application.ProcessMessages;//принудительно обрабатывает //сообщения пришедшие в окно за время работы, например //сообщение о нажатии клавиши Esc. Если не вызывать то //программа может "подвисать", плохо реагировать на нажатия Esc и т.п. end; //цикл продолжается пока не нажмут Esc -- ShowMessage("Программа остановлена!"); end;

    Procedure StartOnClick () ;

    begin

    while (getasynckeystate ($ 1B ) =0 ) do //цикл продолжается пока не нажмут Esc++

    begin

    if five . MouseClick ("l" ) and nine . MouseClick ("l" ) then //если успешно нажали пять и 9 то

    begin

    sleep (3000 ) ; //спим 3 секунды

    if fiftynine . FindPicture then //если нашли 59, то прибавим к ним 3:

    begin

    if plus . MouseClick ("l" ) and three . MouseClick ("l" ) then //если получилось нажать плюс 3, то жмем на равно

    equal . MouseClick ("l" ) ;

    end ;

    end ;

    sleep (5000 ) ; //спим 5 секунд

    if not zero . FindPicture then //если на табло нет нуля

    CE . MouseClick ("l" ) ; //то жмем CE

    Application . ProcessMessages ; //принудительно обрабатывает

    //сообщения пришедшие в окно за время работы, например

    //сообщение о нажатии клавиши Esc. Если не вызывать то

    //программа может "подвисать", плохо реагировать на нажатия Esc и т.п.

    end ; //цикл продолжается пока не нажмут Esc --

    ShowMessage ("Программа остановлена!" ) ;

    end ;

    Тут мы забежали немного вперед, написав сразу код, т.к. в NOMAD сначала необходимо создать шаблоны изображений которые мы будем искать. Так если посмотреть в код, то можно увидеть следующие записи: five,nine,fiftynine,plus,three,equal,zero,CE — что это? а это собственно и есть те шаблоны, в NOMAD с ними можно работать из кода как с объектами, т.е. пишем имя объекта в коде и вызываем его метод, например: FindPicture — найти изображение шаблона, MouseClick(‘l’) — найти изображение шаблона и кликнуть левой кнопкой мыши по нему. Для того чтобы подробно изучить возможности и функции NOMAD рекомендую обратиться к . А сейчас я в кратце опишу как нам создать недостающие шаблоны:

    Во первых создадим базу данных, для этого в Launcher нажмем кнопку ADD, в открывшимся окне заполним в первом поле имя базы данных (например Калькулятор), и во втором поле укажем каталог где мы хотим хранить все что мы напрограммировали. Т.е. собственно исходник нашей программы, или иными словами базу данных. Далее жмем кнопку Save и в списке у нас должна появится запись. Выбираем ее и жмем кнопку Constructor.

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

    На пункте выделенном на картинке голубым цветом жмем правой кнопкой мыши и выбираем пункт меню «добавить конвеер скриншотов». В появившемся окошке указываем его имя — «Calc». И нажимаем кнопку Input. После чего объект с таким именем должен появиться в дереве объектов в разделе ScreenShotPipe. Найдем его там и кликнем на нем левой кнопкой мыши. В левой части программы появится окошко следующего вида (свойства могут идти в другом порядке):

    Я уже заполнил его так как оно должно выглядеть у вас. Фактически все уже указанно необходимо только в поле WindName написать слово Калькулятор. Все конвеер готов и мы можем приступать к созданию шаблонов, где я и расскажу зачем вообще мы делали этот конвеер.

    В третьих запустим калькулятор и сделаем его снимок, для того чтобы сделать снимок необходимо нажать кнопку ScreenShot в левом верхнем углу Конструктора. После этого у нас появится окно TV со снимком экрана. Теперь нам необходимо нажать кнопку Cut и выделить в окне TV наш калькулятор, результатом этих действий должно быть окно TV с изображением калькулятора.

    Нажимаем кнопку Borders (примечание. с момента написания этой статьи в программе появился режим FixBorders (кнопка черный мониторчик с луной), рекомендую использовать именно его. Используется он точно также как Borders, но работает на динамических изображениях гораздо стабильнее ) и начинаем делать шаблоны. Объясню как это делается на примере шаблона для кнопки «+» — мы должны выбрать на изображении самый характерный его участок, который не повторяется в других местах. Собственно и выбираем сам символ +, нажимаем на кнопку Select, и выделяем этот знак в квадратик:

    Кликаем правой кнопкой мыши внутри пунктирного квадратика и у нас появляется окно:

    в поле имя которого мы пишем «plus» (так как этот объект у нас в коде был написан) и жмем Input. В разделе Templates дерева объектов у нас появился объект с таким именем. Нажмем на него и слева появится уже знакомое нам окошко:

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

    Очень важно, чтобы наименования в точности включая регистр ввода соответствовали тому, что вы видите на картинке. В примере шаблоны five и nine сделаны другим способом, в режиме ColMap, за подробностями того как это делается предлагаю обратиться к документации. На работу кода программы это не окажет особого влияния и вы можете сделать все шаблоны тем же образом как и шаблон кнопки +. А можете ничего не делать, и скачать готовый дистрибутив с примером

    Для того чтобы создать шаблоны fiftynine и zero необходимо делать шаблон участка калькулятора выделенного на картинке:

    По шаблонам все.

    3) Еще нам необходимо создать графический интерфейс программы через который она будет общаться с пользователем. Для этого необходимо в Конструкторе программы войти в меню «Окна» и выбрать пункт «Дизайнер Формы»

    Откроется окно с формой, на которой нужно дважды щелкнуть и из открывшегося окна добавить объект Button в обоих полях формы пишем Start. Жмем ОК и выходим из формы, а на главной форме у нас появилась кнопка Start, нажимаем на нее и появляется опять меню свойств, жмем на закладку Events и видим следующее:

    В колонке Value на против события OnClick дважды щелкаем мышью, и в Value автоматически заполняется значение на картинке выше. А в центральном окне появляется текстовый редактор:

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

    Запускаем калькулятор, делаем его видимым на рабочем столе и жмем кнопку старт. Когда надоест жмем кнопку Esc, и ждем сообщения о том что программа закончена.

    Вот и все. Сложно? Делать это на обычном языке программирования сложнее в разы. Лично у меня написание этого бота заняло не более получаса, чего не могу сказать об этой статье.

    Другие примеры ботов можно поискать на форуме например,

    К сожалению, на данный момент нет хороших библиотек на Python2, для того, чтобы быстро создать чат-бота. Ниже я покажу, как легко можно написать примитивного чат бота для VK, используя API VK.


    Статья написана для новичков, чтобы показать, что ничего сложного в написании ботов на Python нет.

    Авторизация

    Нам понадобится библиотека vk_api . Авторизоваться в вк можно двумя способами:
    - Как пользователь
    - Как сообщество


    В первом случае надо будет ввести логин и пароль. Во втором случае в группе надо включить "Сообщения сообщества" и создать ключ доступа к API:





    import time import vk_api vk = vk_api.VkApi(login = "login", password = "password") #vk_api.VkApi(token = "a02d...e83fd") #Авторизоваться как сообщество vk.auth() Отправка сообщений

    Теперь напишем короткую функцию, которая отправляет сообщение выбранному человеку.


    P.S. Сообщество может отправлять сообщения только ранее писавшим пользователям.


    def write_msg(user_id, s): vk.method("messages.send", {"user_id":user_id,"message":s})

    В vk.method мы можем вызывать любой метод из VK API и передавать параметры в виде словаря.


    В данном случае мы вызываем метод messages.send и в качестве параметров передаем id пользователя и текст сообщения.

    Прием сообщений

    Отлично! Отправлять сообщения мы научились, осталось научиться их принимать. Для этого нам нужен метод messages.get .


    Несколько параметров, на которые стоит обратить внимание:


    1) out - если этот параметр равен 1, сервер вернет исходящие сообщения.
    2) count - количество сообщений, которое необходимо получить.
    3) time_offset - максимальное время, прошедшее с момента отправки сообщения до текущего момента в секундах.
    4) last_message_id - идентификатор сообщения, полученного перед тем, которое нужно вернуть последним (при условии, что после него было получено не более count сообщений)


    values = {"out": 0,"count": 100,"time_offset": 60} vk.method("messages.get", values)

    В нашем случае этот метод вернет все полученные сообщения за последние 60 сек, если их конечно было меньше 100, а если больше, то последние 100.


    В итоге мы получаем список items:


    {u"count": 3441, u"items": [{u"body": u"\u041f\u0438\u0448\u0435\u043c \u0431\u043e\u0442\u0430 \u0434\u043b\u044f \u0432\u043a!", u"date": 1491934484, u"id": 7387, u"out": 0, u"read_state": 0, u"title": u" ... ", u"user_id": 23107592}, {u"body": u"\u041f\u0440\u0438\u0432\u0435\u0442 \u0425\u0430\u0431\u0440!", u"date": 1491934479, u"id": 7386, u"out": 0, u"read_state": 0, u"title": u" ... ", u"user_id": 23107592}]}

    Если объяснять простыми словами, то items - это то, что можно выделить в диалоге.



    Финальный аккорд, делаем вечный цикл, где на каждое сообщение будем отвечать "Привет, Хабр!".


    while True: response = vk.method("messages.get", values) if response["items"]: values["last_message_id"] = response["items"]["id"] for item in response["items"]: write_msg(item,u"Привет, Хабр!") time.sleep(1)

    Чат-бот готов.


    P.S. Мы запоминаем параметр last_message_id, чтобы в следующий раз обрабатывать только новые сообщения.


    Полный код

    # -*- coding: utf-8 -*- import time import vk_api vk = vk_api.VkApi(login = "login", password = "password") #vk_api.VkApi(token = "a02d...e83fd") #Авторизоваться как сообщество vk.auth() values = {"out": 0,"count": 100,"time_offset": 60} def write_msg(user_id, s): vk.method("messages.send", {"user_id":user_id,"message":s}) while True: response = vk.method("messages.get", values) if response["items"]: values["last_message_id"] = response["items"]["id"] for item in response["items"]: write_msg(item,u"Привет, Хабр!") time.sleep(1)


    Получилось 17 строк кода. Успехов!


    UPD 17.09.18:
    К сожалению в новой версии (5.80) VK API был убран метод "messages.get" и данная статья потеряла актуальность. Теперь для создания ботов используйте систему longpoll. Пример на модуле vk_api для Python вы можете найти .

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

    Что такое бот?

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

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

    Зачем он нужен?

    Как создать бота в ВК для группы? Боты в известной социальной сети продвигают различные сообщества. Заниматься накруткой подписчиков в социальных сетях рискованно, особенно если их число превышает пятьсот в день. Если в группе состоят роботы, а это более 30%, то она будет заблокирована администрацией.

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

    Конструкторы

    Многие пользователи социальных сетей не знают, как создать бота в ВК. Прежде чем это сделать, необходимо решить, для чего он нужен. Его создание не требует умения программировать и каких-либо специальных знаний. Конструкторы ботов (одним из самых популярных считается Chatfuel) позволяют создать bot для общения с использованием удобного интерфейса. Таких помощников используют серьезные фирмы и компании. Востребованными конструкторами на сегодняшний день являются: Api.ai, Meya, Pandarabots, Manybot. Данные сервисы применяются для создания чат-ботов в социальных сетях.

    Чат-бот ВК

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

    Существует четыре типа чат-ботов:

    • Помощники. Они всегда рядом, находят нужную пользователю информацию, ставят будильник, выполняют организационные задачи, такие как заказ еды в офис или на дом, бронирование номера в гостинице, покупка билетов.
    • Искусственный интеллект. Новейшие разработки приводят к тому, что чат-боты выполняют задачи, которые требуют от человека много времени. Роботы могут отвечать на вопросы собеседника.
    • Бизнес-боты. Они созданы для того, чтобы увеличить коэффициент полезного действия и оптимизировать бизнес. Например, сервис SpyCat 2.0 оповещает пользователя о полученных комментариях в ВК с функцией автоответчика. Бизнес-боты снижают затраты, автоматизируют рабочие процессы (занимаются рассылкой сообщений сотрудникам и клиентам).
    • Игровые. Программа, которая управляется компьютером. Она имитирует партнеров в командной онлайн-игре. Такие боты основаны на искусственном интеллекте и адаптированы к особенностям конкретной игры.

    Как создать чат-бота в ВК? Сделать это довольно просто. Прежде чем приступить к делу, требуется соблюдение некоторых критериев: постоянный доступ в интернет и много свободного времени. Скачайте бесплатный чат-бот, запустите его и добавьте аккаунт. Далее введите логин и пароль своей страницы в ВК. Далее откроется инструкция, ее следует прочесть и перейти на вкладку «Сообщения». Напишите на стене своего аккаунта «Бот, привет!». Через тридцать секунд он должен ответить. Во вкладках программы «Аккаунт», «Команды» можно настраивать и изменять функции бота.

    Не знаете, как создать бота в ВК самостоятельно? В этом могут помочь бесплатные конструкторы. Если же планируете сделать бота сложнее, лучше написать его вручную, используя любой язык программирования. Существуют инструменты, которые упрощают задачу конструктору. К примеру, api.ai умеет преобразовывать запросы пользователя так, что эти команды понимает компьютер. Если спросить у бота: «Какая завтра будет погода в Ростовской области?» - он поймет вопрос по ключевым словам «погода, завтра, Ростовской области» и выдаст результат.

    На вопрос о том, как создать бота в ВК без программ, специалисты отвечают: в первую очередь выберите язык программирования. Это относится к тем пользователям, которые имеют об этом представление. Чаще всего применяют Python, Javascript. Затем выбирается платформа для работы с ботом: любая социальная сеть, программа отправки и получения сообщений и библиотека для взаимодействия с мессенджером (API). Она позволяет программе общаться с социальной сетью. Когда платформа и язык программирования выбраны, можно создать простого бота, а все дальнейшие действия зависят от первых. Когда бот создан, попробуйте протестировать его. Это помогает устранить недочеты и ошибки, улучшить его.

    Как действовать?

    «Андроид» - это операционная система, созданная для электронных устройств. Она основана на ядре Linux и позволяет создавать приложения, которые управляются устройством через библиотеки «Гугл». Как создать бота ВК? «Андроид» поддерживает программы по созданию ботов со смартфона. Самостоятельно сделать его опять же поможет знание языка программирования. Если с этим возникают сложности, воспользуйтесь автоматическим механизмом или сервисами. Например, Abot поможет создать личного виртуального помощника. Он отвечает на сообщения и различные вопросы клиентов. Это удобная вещь для ведения или контроля бизнеса через смартфон.

    Пишем бота для сайта на javascript

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

    Волею судьбы мне понадобилось написать бота для сайта, навигация по которому полностью построена на ajax.

    Я уже сталкивался с такой проблемой и прекрастно понимаю, что php-шная библиотека curl вполне справляется со своей задачей и в этом случае с ajax-ом, но, видать, я был не первым таким умником и разработчики сайта защитились от ботов постоянно меняя ajax-запросы, да еще и генерируя их с помощью javascript.

    Все статьи цикла
    Промучившись три ночи, я осознал, что нужно писать интерпретатор javascript, вот только занятие это, мягко говоря, не благодарное, покопавшись в интернете я нашел уже 2 готовых (весь остальной абзац к делу фактически не относится):

    Для java. (пользуясь случаем хочу отметить, что вопреки распространенному мнению, java и javascript – два совершенно разных языка, а приставку «java» javascript приобрел в последний момент и только в маркетинговых целях).

    Благодаря случайно попавшейся месяц назад на глаза батиной книжке Питера Нотона за 1996 год я понял, что java – язык без сомнения интересный и позволяющий решить много специфических задач язык. Вот только я, как и большинство, думаю, не смогу взять и написать бота на нем, java требует не малых усилий по изучению, и если и изучать его, то не для написания одной маленькой программки.
    Для python. Наверно в начале весны от одного человека (руководителя одной из конторок по производству сайтов, как он сам себя называет) слышал восторженный отзыв об этом языке программирования, в котором обсирались все известные мне серверные языки и прославлялся великий и могучий python. Из этого монолога я также узнал, что для конторы, по заказу на python-е сейчас пишется CMS и почти завершена. Вот только:
    говорил он не своими словами, а словами программиста, который эту CMS пишет, сам же он даже не знает, как этот самый python выглядит.
    в программировании этот человек не идет дальше лабороторок в институте и даже плохо в нем соображает, все его программирование ограничивается навигацией в интерактивных flesh мультиках,
    даже после полутора лет своей работы контора убыточна,
    возможно из-за предыдущего пункта она, по сути, не легальна и представляет собой просто N-ое количество друзей работающих за идею,
    CMS все еще не доработана даже до beta-версии.

    Исходя из всего этого, я составил обратное мнение об этом языке программирования. Может, конечно, и зря, но этот вариант рассматривать не буду вообще.

    После еще одной бессонной ночи впустую, мой засыпающий мозг вспомнил о Delphi. О той старенькой 7-ой версии, которую машинально устанавливаю после каждого форматирования диска, но с которой, по сути, не работал уже лет пять или даже семь. (Кстати, думаю, в C++Builder все те же самые огурцы лежат, но лично не проверял.)

    Там, на вкладке internet притаился компонент TWebBrowser, он является встроенным в Delphi экземпляром Internet Explorer-а, в котором уже есть так нужный мне интерпретатор javascript.

    При этом мы получаем почти безграничную власть над этим творением Microsoft-а.

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

    Итак, перво-наперво, после размещения компонента TWebBrowser на форме, нам нужно загрузить в него страницу, для этого служит метод Navigate:
    WebBrowser.Navigate(‘http://vvy.me’);

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

    После того, как страница загрузится произойдет событие onDocumentComplete, в котором мы уже и можем приступить к работе со страницей, но для начала нам нужно:

    добавляем в uses модуть MSHTML
    добавляем переменные:
    WB_Doc: IHTMLDocument2; // В этой переменной будет хранится интерфейс взаимодействия со всем WebBrowser-ом WB_HTMLWindow: IHTMLWindow2; // А тут уже наше окно, с которым и работает javascript

    и конечно кусок кода в процедуре onDocumentComplete
    WebBrowser1.Document.QueryInterface(IHTMLDocument2, WB_Doc); WB_HTMLWindow:= WB_Doc.parentWindow; if not Assigned(WB_HTMLWindow) then showmessage(‘авот фих тебе’) else showmessage(‘ все OK’);

    Но на самом деле все немного сложнее, событие onDocumentComplete возникает при:

    загрузке html-кода страницы,
    загрузке каждого фрейма в отдельности,
    в случаях работы javascript на странице, когда происходит какое-то изменение в содержимом тегов,
    и еще куча всего.

    При этом во время возникновения события объект браузера может быть не доступен, но мы можем убедится в возможности взаимодействия с WebBrowser-ом по его свойству ReadyState, если все хорошо, то оно должно быть равно 4 или READYSTATE_COMPLETE, кому как нравится. Все остальные значения от 0 до 3 в нашем контексте мало интересны и лишь обозначают степень готовности WebBrowser-а к работе с ним.

    Что бы добраться до html-кода страницы мы можем применить вот такую функцию:
    function GetHtml(doc: IHtmlDocument2): string; var iDisp: IDispatch; iCollection: IHTMLElementCollection; begin result:= »; iCollection:= doc.all.Tags(‘HTML’) as IHTMLElementCollection; iDisp:= iCollection.item(0, 0); result:= (iDisp as IHTMLElement).outerHTML; end;

    Хоть она и вернула все содержимое в виде одной строки, кодовые символы
    в наличии, и все прекрасно загружается например в TMemo с переносом строк:
    Memo.Lines.Add(GetHtml(WB_Doc));

    Смертельный номер! Функция GetHtml вернет нам не просто html-код страницы, а код, в котором выполнились уже все скрипты, т.е вместо

    Мы получим
    document.write(‘Я работаю!’); Я работаю!

    И даже больше: мы можем обращаться к html-элементам страницы, например заполнять input-ты или отправлять формы средствами Delphi, но что б не курить мануалы еще и по этому вопросу я поступаю хитрее, а точнее выполняю javascript, например:
    WB_HTMLWindow.execScript(‘alert(“Тадам!”)’, ‘javascript’);

    Схема работы получается предельно простая (с примерами как получилось у меня):

    Загружаем первую страницу
    Например, код ссылки, в том виде как ее получил WebBrowser
    Далее

    Получаем цункцией GetHtml ее html-код с уже отработавшими скриптами
    Наша ссылка получилась вот такой
    Далее

    И малого того, что событие onclick задается в самом javascript, так еще и функцию qwerty явно прогнали через абсфукатор, но это нам не помешает
    Регулярками вытаскиваем код из события onclick
    qwerty()

    С помощью.execScript запускаем событие onclick, вернее код из него
    Из многочисленных событий onDocumentComplete ифом(if) выбираем то, в котором WebBrowser.ReadyState равно 4 и только тогда продолжаем работу.

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

    И так по кругу

    Кстати, в TWebBrowser частенько не выполняются правильно написанные скрипты, которые выполняются в обычном IE, в этом случае на экран выскакивает стандартное окошко об ошибке в javascript, с предложением запустить отладку. И, кроме того, что они мельтешат перед глазами, они еще иступарят нам весь компонент делая его не доступным до момента загрузки нового url-а, да и всю программу, подобно процедуре showmessage(). Это можно решить, назначив свойству Silent значение true. Оно поможет нам отключить все ошибки javascript в TWebBrowser, но оставит нам сообщения об ошибках взаимодействия с самим компонентом, что жизненно важно при отладке.

    У TWebBrowser еще куча плюшек, но лично мне хватило перечисленных, а еще все это работает не только в компонентах WebBrowser, но и окнах Internet Explorer-а, достаточно получить указатель на окно программы и вперед!

    В конце хочу сказать, что если для работы бота лучше использовать регулярные выражения в самом Delphi, а не в javascrip. Для этого нужно будет импортировать отдельную библиотеку, но это уже совсем другая история.

    ВКонтакте
  • Войдите ВК под аккаунтом, на котором вы собираетесь использовать бота.
  • После загрузки игры, обновите страницу, нажав F5. Это важно!
  • Скопируйте в адресную строку браузера следующий код: var allscripts=document.getElementsByTagName(«script»); script=allscripts.innerHTML;var json=JSON.parse(script.substring(script.indexOf(‘{«api_url’), script.indexOf(‘»};’)) + ‘»}’);var answer1=prompt(«VK id»,json.viewer_id);var answer2=prompt(«VK auth»,json.auth_key);
  • Если окошки не появились, то обновите страницу с игрой, нажав F5, и еще раз повторите действия в пунктах 4 и 5.
  • Перейдите по ссылке и нажмите «Разрешить».
  • Скопируйте из браузерной строки значение параметра access_token. Не обращайте внимание на предупреждение, данный параметр используется в боте исключительно для получения списка ваших друзей в игре.
  • Одноклассники
  • Войдите в Одноклассники под аккаунтом, на котором вы собираетесь использовать бота.
  • Перейдите на страницу с игрой.
  • Скопируйте в адресную строку браузера следующий код: var frame=document.getElementById(«appMain_Div»).src;window.location.href=frame;
  • Пропишите в начало адресной строки «javascript:» (без кавычек).
  • Нажмите Enter. Как создать бот собственными силами за пять минут

    Браузер перейдет на похожую страницу. На этой странице скопируйте в адресную строку браузера следующий код: var script=document.getElementsByTagName(«script»).innerHTML;var json=JSON.parse(script.substring(script.indexOf(‘{«web_se’), script.indexOf(‘»};’)) + ‘»}’);var answer1=prompt(«Odnoklassniki id»,json.logged_user_id);var answer2=prompt(«Odnoklassniki auth»,json.auth);

  • Пропишите в начало адресной строки «javascript:» (без кавычек).
  • Нажмите Enter. По очереди выведутся два окна с нужными параметрами. Сохраните их где-нибудь (например, в блокноте), т.к. перейти на вкладку с регистрацией в боте вы не сможете, пока не закроете эти сообщения.
  • Mail.ru
  • Войдите в Mail.ru под аккаунтом, на котором вы собираетесь использовать бота.
  • Перейдите на страницу с игрой.
  • Скопируйте в адресную строку браузера следующий код: var url=document.getElementById(‘app-wrapper’).dataset.src;var params=url.split(«?»).split(«&»);var id=params.split(«=»);var auth=params.split(«=»);var answer1=prompt(«Mail.ru id»,id);var answer2=prompt(«Mail.ru auth»,auth);
  • Пропишите в начало адресной строки «javascript:» (без кавычек).
  • Нажмите Enter. По очереди выведутся два окна с нужными параметрами. Сохраните их где-нибудь (например, в блокноте), т.к. перейти на вкладку с регистрацией в боте вы не сможете, пока не закроете эти сообщения.
  • Как написать Telegram бота: практическое руководство

    В последнее время Telegram у всех на слуху. Нужно отдать должное отделу маркетинга этого приложения, шумиху подняли на славу. Одной из основных «фишек» Telegram является его якобы защищённость — по словам Павла Дурова вся переписка между пользователями шифруется. Более того, ни одна спец.служба мира не будет иметь доступ к вашим сообщениям. Но в данной статье речь не об этом.

    На чем писать бота для браузера

    Сегодня хотелось бы поговорить о не менее крутой фишке в Telegram, а именно о ботах. Помимо того, что в сети уже полно информации о различного рода Telegram ботах (github бот, например), мессенджер открыл своё API для разработчиков, и теперь каждый может создать своего собственного бота с блэкджеком и плюшками.

    В статье я приведу пример написания онлайн бота с использованием Python и Django фреймворка. То есть мы «запилим» полноценное веб-приложение, которое будет крутиться на удалённом хосте и принимать команды от пользователей. Весь исходный текст доступен в моём github репозитории.

    Документация, описывающая процесс взаимодействия с ботами Telegram находится тут. Чтобы не изобретать велосипед, я нашел неплохую Python библиотеку, реализующую все основные функции ботов — telepot. Как я уже упоминал ранее, для того, чтобы обслуживать пользователей нашего бота мы будет разрабатывать веб-приложение, используя Django фреймворк.

    Как создать Telegram бота?

    Для начала нам необходимо зарегистрировать в Telegram нашего будущего бота. Это делается следующим образом:

    • Необходимо установить приложение Telegram на телефон или компьютер. Скачать приложение можно тут
    • Добавляем к себе в контакт-лист бота с именем BotFather
    • Запускаем процедуру «общения» с ботом нажатием кнопки Start . Далее перед нами предстанет список команд точно как на скриншоте.
    • Для того, чтобы создать нового бота необходимо выполнить команду /newbot и следовать инструкциям. Обратите внимание, что username для бота должен всегда содержать в конце слово bot . Например, DjangoBot или Django_bot.

    • Для нашего бота я выбрал имя PythonPlanetBot, так как его основная функция заключается в парсинге RSS feed сайта Python Planet и выдача информации о последних постах пользователю 🙂

    После создания бота, обратите внимание на строку с текстом:

    Use this token to access the HTTP API:

    За которой следует т.н. token по которому мы будем манипулировать нашим ботом. Помимо функции создания telegram бота, BotFather также имеет ряд других возможностей:

    • Присвоить боту описание
    • Установить аватар
    • Поменять token
    Приступаем к кодированию

    Как я ранее уже упоминал, мы будем писать веб-приложение на Django . Но стоит отметить, что это делать необязательно. Можно обойтись и обычным Python скриптом, правда в этом случае необходимо будет периодически опрашивать Telegram на предмет новых запросов от пользователей бота (используя метод getUpdates ) и увеличивая offset для получения самых последних данных без повторений. В Telegram существует два взаимоисключающих метода получения команд/сообщений для вашего бота.

    • Использование вызова API метода getUpdates
    • Установка Webhook

    Установка Webhook заключается в передаче боту специального URL адреса на который будет поступать POST запрос каждый раз, когда кто-то начнёт посылать сообщения боту. Именно этот вариант мы и будем использовать для взаимодействия между ботом и его пользователем. Для того, чтобы задать URL, необходимо использовать API метод setWebhook . Отмечу, что URL должен начинаться с https, то есть иметь защищённое SSL соединение с валидным сертификатом. Telegram разрешает использовать самоподписанный сертификат, правда для этого необходимо в методе setWebhook передавать также публичный ключ в PEM формате (ASCII base64). Либо же можно получить валидный бесплатный SSL сертификат от Let’s Encrypt.

    Подробнее о getUpdates и setWebhook можно почитать соответственно здесь и тут.

    Итак, вернёмся к python библиотеке для работы с Telegram — telepot . На текущий момент самой последней её версий является 6.7. Устанавливаем её в виртуальное окружение python virtualenv:

    Самый простой вариант взаимодействия с Telegram ботом на Python выглядит следующим образом:

    Переменной token присваиваем значение токена, полученного при создании бота через BotFather. В итоге после выполнения этих команд мы получим:

    Поздравляю! Мы вызывали самый простой API запрос getMe, который возвращает информацию о боте: username, id, first_name.

    Добавим нашего бота к себе в контакт-лист и пошлём ему первую стандартную команду /start

    Выполняем код:

    Процесс общения с telegram ботом происходит по HTTPS; для передачи данных используется JSON. Метод getUpdates возвращает список/массив из объектов типа Update. Внутри Update находится объект Message. Для стандартного взаимодействия с ботом нас фактически интересует именно объект Message, у которого мы считываем атрибут text, хранящий в себе текст, переданный боту и объект chat, в котором лежит информация о пользователе, инициировавшем общение с нашим Telegram ботом. Также имеется параметр update_id, который служит в качестве offset параметра при вызове метода getUpdates. То есть update_id+1 вернёт все сообщения, поступившие после последнего update_id, при этом все предыдущие сообщения будут удалены.

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

    Простая функция парсинга RSS фида Planet Python выглядит вот так:

    Здесь я использую python библиотеку requests для работы с HTTP в самом простейшем варианте без обработки ошибок. Django «вьюшка» выглядит следующим образом:

    CommandReceiveView ждёт POST запрос на себя, парсит его и отвечает исходя из заданной команды. Полноценное Django приложение можно найти по этой ссылке. Стоит отметить в коде использование ещё одного API вызова — sendMessage . Этот метод отправляет сообщение заданному пользователю, используя при этом chat_id и сам текст сообщения. Chat_id — это уникальный идентификатор чата между пользователем и ботом (его идентификатор есть в ответе на запрос getUpdates ). У Telegram ботов есть одно ограничение, они не могут посылать сообщения пользователям, которые предварительно не инициировали общение с ним. По-видимому это сделано дабы избежать массового создания спам-ботов.

    Я предполагаю, что вы уже клонировали мой репозиторий, настроили окружение и установили все необходимые зависимости: Django, requests, telepot. Если же вы не знаете как это сделать, то совсем скоро я напишу цикл статей о разработке веб-приложений на Python, включая разбор экосистемы: разработка, настройка, деплой. Если вам это интересно, то отпишитесь, пожалуйста, в комментариях к этой статье. Хочется получить обратную связь 🙂

    Итак, веб-приложение на Django запущено. Как же начать тестировать бота? А всё очень просто — необходимо симулировать действия Telegram сервиса. Для этого нам понадобится HTTP клиент и тело запроса. В качестве HTTP клиента я часто использую Chrome плагин под названием Postman, а тело запроса мы возьмём напрямую из данных, полученных с помощью API вызова getUpdates .

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

    http://127.0.0.1:8000/planet/b…BOT_TOKEN /

    где BOT_TOKEN — это токен нашего бота. Смотрим скриншот:

    А давайте-ка отправим команду feed для получения списка новостей из Planet Python:

    На скриншотах видно, что бот адекватно отреагировал на нашу команду вывести список последних 10 постов.

    Следующим шагом является деплой нашего Django приложения на удалённый хост и последующий вызов метода setWebhook для передачи URL на который будет посылаться POST запрос от сервиса Telegram каждый раз при поступлении команд боту от пользователей. Об этом мы поговорим в следующей заметке.

    В последнее время Telegram у всех на слуху. Нужно отдать должное отделу маркетинга этого приложения, шумиху подняли на славу. Одной из основных "фишек" Telegram является его якобы защищённость - по словам Павла Дурова вся переписка между пользователями шифруется. Более того, ни одна спец.служба мира не будет иметь доступ к вашим сообщениям. Но в данной статье речь не об этом. Сегодня хотелось бы поговорить о не менее крутой фишке в Telegram, а именно о ботах. Помимо того, что в сети уже полно информации о различного рода Telegram ботах (github бот, например), мессенджер открыл своё API для разработчиков, и теперь каждый может создать своего собственного бота с блэкджеком и плюшками.

    В статье я приведу пример написания онлайн бота с использованием Python и Django фреймворка. То есть мы "запилим" полноценное веб-приложение, которое будет крутиться на удалённом хосте и принимать команды от пользователей. Весь исходный текст доступен в моём github репозитории .

    Документация, описывающая процесс взаимодействия с ботами Telegram находится . Чтобы не изобретать велосипед, я нашел неплохую Python библиотеку, реализующую все основные функции ботов - telepot . Как я уже упоминал ранее, для того, чтобы обслуживать пользователей нашего бота мы будет разрабатывать веб-приложение, используя Django фреймворк.

    Как создать Telegram бота?

    Для начала нам необходимо зарегистрировать в Telegram нашего будущего бота. Это делается следующим образом:

    • Необходимо установить приложение Telegram на телефон или компьютер. Скачать приложение можно
    • Добавляем к себе в контакт-лист бота с именем BotFather
    • Запускаем процедуру "общения" с ботом нажатием кнопки Start . Далее перед нами предстанет список команд точно как на скриншоте.
    • Для того, чтобы создать нового бота необходимо выполнить команду /newbot и следовать инструкциям. Обратите внимание, что username для бота должен всегда содержать в конце слово bot . Например, DjangoBot или Django_bot.

    • Для нашего бота я выбрал имя PythonPlanetBot, так как его основная функция заключается в парсинге RSS feed сайта Python Planet и выдача информации о последних постах пользователю:)

    После создания бота, обратите внимание на строку с текстом:

    Use this token to access the HTTP API:

    За которой следует т.н. token по которому мы будем манипулировать нашим ботом. Помимо функции создания telegram бота, BotFather также имеет ряд других возможностей:

    • Присвоить боту описание
    • Установить аватар
    • Поменять token
    Приступаем к кодированию

    Как я ранее уже упоминал, мы будем писать веб-приложение на Django . Но стоит отметить, что это делать необязательно. Можно обойтись и обычным Python скриптом, правда в этом случае необходимо будет периодически опрашивать Telegram на предмет новых запросов от пользователей бота (используя метод getUpdates ) и увеличивая offset для получения самых последних данных без повторений. В Telegram существует два взаимоисключающих метода получения команд/сообщений для вашего бота.

    • Использование вызова API метода getUpdates
    • Установка Webhook

    Установка Webhook заключается в передаче боту специального URL адреса на который будет поступать POST запрос каждый раз, когда кто-то начнёт посылать сообщения боту. Именно этот вариант мы и будем использовать для взаимодействия между ботом и его пользователем. Для того, чтобы задать URL, необходимо использовать API метод setWebhook . Отмечу, что URL должен начинаться с https, то есть иметь защищённое SSL соединение с валидным сертификатом. Telegram разрешает использовать самоподписанный сертификат, правда для этого необходимо в методе setWebhook передавать также публичный ключ в PEM формате (ASCII base64). Либо же можно получить от Let"s Encrypt.

    Подробнее о getUpdates и setWebhook можно почитать соответственно и .

    Итак, вернёмся к python библиотеке для работы с Telegram - telepot . На текущий момент самой последней её версий является 6.7. Устанавливаем её в виртуальное окружение python virtualenv:

    Pip install telepot

    Самый простой вариант взаимодействия с Telegram ботом на Python выглядит следующим образом:

    Import telepot token = "123456" TelegramBot = telepot.Bot(token) print TelegramBot.getMe()

    Переменной token присваиваем значение токена, полученного при создании бота через BotFather. В итоге после выполнения этих команд мы получим:

    {u"username": u"PythonPlanetBot", u"first_name": u"Python Planet Bot", u"id": 199266571}

    Поздравляю! Мы вызывали самый простой API запрос getMe, который возвращает информацию о боте: username, id, first_name.

    Добавим нашего бота к себе в контакт-лист и пошлём ему первую стандартную команду /start

    Выполняем код:

    TelegramBot.getUpdates() [{u"message": {u"date": 1459927254, u"text": u"/start", u"from": {u"username": u"adilkhash", u"first_name": u"Adil", u"id": 31337}, u"message_id": 1, u"chat": {u"username": u"adilkhash", u"first_name": u"Adil", u"type": u"private", u"id": 7350}}, u"update_id": 649179764}]

    Процесс общения с telegram ботом происходит по HTTPS; для передачи данных используется JSON. Метод getUpdates возвращает список/массив из объектов типа Update . Внутри Update находится объект Message . Для стандартного взаимодействия с ботом нас фактически интересует именно объект Message, у которого мы считываем атрибут text, хранящий в себе текст, переданный боту и объект chat, в котором лежит информация о пользователе, инициировавшем общение с нашим Telegram ботом. Также имеется параметр update_id, который служит в качестве offset параметра при вызове метода getUpdates. То есть update_id+1 вернёт все сообщения, поступившие после последнего update_id, при этом все предыдущие сообщения будут удалены.

    TelegramBot.getUpdates(649179764+1) [{u"message": {u"date": 1459928527, u"text": u"hello bro", u"from": {u"username": u"adilkhash", u"first_name": u"Adil", u"id": 31337}, u"message_id": 13, u"chat": {u"username": u"adilkhash", u"first_name": u"Adil", u"type": u"private", u"id": 7350}}, u"update_id": 649179765}]

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

    Простая функция парсинга RSS фида Planet Python выглядит вот так:

    # -*- coding: utf8 -*- from xml.etree import cElementTree import requests def parse_planetpy_rss(): """Parses first 10 items from http://planetpython.org/rss20.xml """ response = requests.get("http://planetpython.org/rss20.xml") parsed_xml = cElementTree.fromstring(response.content) items = for node in parsed_xml.iter(): if node.tag == "item": item = {} for item_node in list(node): if item_node.tag == "title": item["title"] = item_node.text if item_node.tag == "link": item["link"] = item_node.text items.append(item) return items[:10]



    Есть вопросы?

    Сообщить об опечатке

    Текст, который будет отправлен нашим редакторам: