[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

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