[mpc_alert preset=”mpc_preset_11″ icon=”eti eti_info_alt” icon_color=”#333333″ icon_size=”24″ icon_background_color=”#df8384″ icon_padding_divider=”true” icon_padding_css=”padding-top:25px;padding-right:35px;padding-bottom:25px;padding-left:25px;” font_color=”#ffffff” font_transform=”uppercase” font_align=”left” content_border_css=”border-radius:5px;” content_padding_divider=”true” content_padding_css=”padding-top:25px;padding-right:25px;padding-bottom:25px;padding-left:35px;” background_color=”#df8384″ border_css=”border-width:10px;border-color:#d0797c;border-style:solid;border-radius:5px;” padding_divider=”true” margin_divider=”true” margin_css=”margin-bottom:30px;”]UP: 04.11.2019 | В связи с существенно возросшей популярностью данного запроса я принял решения о разморозки проекта. В скором времени будет полноценная реализация на веб сокетах без костылей. Следите за новостями! [/mpc_alert]

Суть проекта

Прежде всего у меня стояла задача избавить себя от надоедливой проверки от яндекса. Для тех кто не в курсе сути проблемы, каждый владелец чата в поиске яндекса (см.пример ниже), должен проходить проверку в случайное время и день недели. Как выглядит проверка? В чат падает вот такое сообщение:

Здравствуйте! Вы получили это сообщение, так как подключены к чатам в поиске Яндекса (tech.yandex.ru/dialogs/chats/). Для оценки качества ответов в чатах мы проводим регулярные проверки. Пожалуйста, для успешного прохождения проверки в ответе на это сообщение пришлите текст “Текст проверки“. В случае, если ответ не последует, мы оставляем за собой право отключить показы вашего чата в сервисах Яндекса.

Пример чата из яндекса

яндекс чат

Палки в колёса от jivosite

Уж не знаю как там принято от других чат серверов, но вот данный экземпляр по какой-то неведомой причине, не стал разрабатывать API по взаимодейсвтию с чатом. И ладно бы просто по лени своей, но когда я начал разбираться в веб версии серверной части то убедился в обратном. Данные товарищи решили усложнить жизнь тем кто будет пытаться реализовать бота (к слову их ещё нет на рынке вообще, и если вы нашли эту тему в поиске то скорее всего на данный момент такого бота ещё нет). Дело в том что под “капотом” сайта наст встречает потрясающая система хэширования данных, причём она настолько фундаментальная что затронула даже классы не говоря уже о банальных div. Весь код пронизан уникальными хэш кодами которые генерируются в сессии и привязаны как к самому чату, так и браузеру или клиенту чата. К частью у нас есть такой потрясающий инструмент как selenium, позволяющий запускать экземпляр бразуера полностью имитируя действия пользователя. Забегая немного вперед хочу сказать что бразуер у меня работает на сервере в скрытом режиме без GUI, потребляя всего 200мг оперативной памяти, а это на секундочку гугл хром)

[mpc_divider preset=”mpc_preset_19″ align=”left” content_type=”title” content_position=”0″ content_border_css=”border-width:2px;border-color:#75cdde;border-style:solid;” content_padding_divider=”true” content_padding_css=”padding-top:5px;padding-right:15px;padding-bottom:5px;padding-left:15px;” font_color=”#0dbbdd” font_size=”16″ font_line_height=”1″ font_transform=”uppercase” font_align=”left” title=”Инспектор наше всё” icon=”fa fa-anchor” icon_color=”#b077b7″ icon_size=”30″ lines_color=”#75cdde” lines_weight=”2″ padding_divider=”true”]

Что бы я без тебя делал

Сколько раз уже меня выручил волшебный инспектор встроенный в гугл хром (к слову я перешел на Brave), конечно я бы мог ручками ковырять исходный код, но данная Штука сильно упрощает работу делая её действительно комфортной. Так что же там у нас под крышкой сайта?

инспектор

Как видно из изображения выше (или не видно), код пестрит различными хэшами, которые к тому же ещё и не связаны. Я бы понял если бы генерировался один ключ на страницу и свой ключ для каждого клиента, но тут почти всё уникально, и постоянно меняется. Как же тогда навести “прицел” веб драйвера на нужные нам элементы? Бывалые наверное уже догадались, конечно же по тексту. Но даже тут не всё так однозначно и просто, и банальный textarea имеет свой класс котоооорый угадайте что? прааавильно, тоже имеет свой ключ (будь он неладен). Я допускаю что данный подход к разработки возможно более надёжен с точки зрения безопасности, или вообще бэкэнда, ноо для меня это стало проблемой (в начале).

[mpc_divider preset=”mpc_preset_12″ content_type=”title” content_padding_divider=”true” content_padding_css=”padding-top:0px;padding-right:10px;padding-bottom:0px;padding-left:10px;” font_color=”#98c96a” font_size=”20″ font_line_height=”1″ font_transform=”uppercase” font_align=”center” title=”Пример” icon_type=”character” icon_character=”P” icon_color=”#98c96a” icon_size=”30″ lines_color=”#98c96a”]

Поле ввода

Рассмотрим самый банальный пример из всего проекта. Допустим у меня уже есть текст который я хочу ввести, но как бы мене найти форму ввода <div textarea, да к тому же ещё нужно после ввода нажать кнопку отправить (которая к слову тоже имеет уникальный идентификатор, у которого нет словесной привязки по которой его можно было-бы найти), и тут нам на помощь снова приходит инспектор) который любезно подсказал что кое что у блоков всё же есть статистическое, а именно data-qa-id. Смотрим пример пути к textarea на скриншоте ниже (я подсветил хэши)

textarea

Волшебство

Скорее всего на изображении выше вы не разглядели data-qa-id, каюсь не нашел хороший плагин лупы =_=

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

zoom

Заключение

А чего вы ожидали?

Я ведь сразу предупредил, исходного кода не будет, он слишком просто и банален что бы его выкладывать. Я описал механику взаимодействия с веб версией живого чата, а дальше уже сами, ну или пиши мне, поделюсь за копеечку :3

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