Комментарии 37
От себя могу добавить, что не обязательно дергать весь сайт для проверки наличия автомобилей - достаточно, как вы написали, дёрнуть https://showroom.hyundai.ru/rest/car - тут даже расшифровывать ответ не надо, если машин нет, длина ответа 26 символов, если есть, то больше.
Я лично мониторил этот сайт в течение двух недель и каждый раз при появлении автомобиля на последнем шаге бронирования получал 500ю ошибку от сервера (хотя автомобилей была целая пачка в наличии на сайте). У вас получилось забронировать автомобиль для себя или для кого-либо?
тут даже расшифровывать ответ не надо, если машин нет, длина ответа 26 символов
Согласен, но в качестве полезной информации хотелось передавать в телеграм-канал подробную информацию об автомобилях в наличии, а с текущем уровнем шифрования, в лоб, это сделать не получилось.
Данным же способом можно немного распарсить DOM и передать в канал информацию о о модели, комплектации, стоимости и т.д.
У вас получилось забронировать автомобиль для себя или для кого-либо?
Нет, но планирую плотно заняться мониторингом и бронированием для себя в ближайшие пару месяцев.
тоже сложилось впечатление, что забронировать физически не возможно. стабильная 500 ошибка у разных пользователей, совпадение? не думаю
Отвечу за автора, у меня получилось сделать 3 брони. По поводу ошибки на последнем шаге - тут как я понял все зависит в основном от удачи. Я делал так - если за 2-3 раза последний шаг не срабатывал, то начинал бронировать новую машину. Еще важный момент, что подтверждение брони не всегда срабатывает, поэтому нужно после попыток проверять личный кабинет, 2 из 3 раз я узнал о брони только через несколько часов
Интересно, но главная проблема это бронирование, а оно доступно только после авторизации. Возможно вы видели форму ввода смс-кода сгенерированную с использованием canvas. Если не секрет - пробовали решать этот вопрос?
Не пробовал, но задача интересная =)
А там звонок приходит и поле постоянно меняется. СМС не используется
Верно, но при этом я видел как минимум одного популярного неофициального бота, который справляется с задачей авторизации
как вариант - можно сделать скриншот экрана, распознать символы и вычислить координаты кнопки и дальше сэмулировать нажатие. canvas я так понял это векторный элемент и у него нет отдельных элементов вида <div>
каждое нажатие меняет кнопки местами (цифры) бегающая клавиатура.
Звучит как план и должно получиться, да)
Я пробовал - обходится отправкой на сервер post-запроса с кодом (последние 4 цифры входящего звонка) и прочей информацией - посмотрите в dev tools запрос который отправляется на сервер после ввода кода в canvas и будет всё понятно.
О, не так все сложно, оказывается. А что приходит в ответ на такой запрос?
эти запросы я нашел, получение списка машин, отправка кода, там как раз ничего сложного. а вот быстрее других пройти авторизацию это уже проблема. повторюсь, есть подозрение, что машины для обычных людей не доступны физически, даже если вы дойдёте до бронирования, то сайт в какой то момент пришлёт 500 и потом авторизация слетает.
Прикольно, но там есть кнопочка "Подписка на обновление стока" со значком Телеграмма. Это ли не решение "из коробки", тем более, что для бронирования всё равно надо регистрироваться и авторизовываться на сайте.
Вопрос а раз в сколько секунд он обходит шоурум?
Крон установлен как `* * * * *`, что означает «раз в минуту» — https://github.com/mikhin/hyundai-showroom-monitor-bot/blob/master/index.js#L25
а крон меньше не умеет(
почему сделано через node-cron
, а не просто через setInterval()
?
Хороший вопрос! Честно говоря не помню свою мотивацию, но да, — с точки зрения упрощения кода можно использовать и setInterval()
.
Вообще, я запускал скрипт на сервере при помощи библиотеки pm2
, и там есть встроенный cron
тоже — https://stackoverflow.com/a/42543433. Тогда кажется, лучше убрать cron
из скрипта и устанавливать его на уровне окружения.
Есть более другой вопрос: а не забанят ли бота, опрашивающего страничку слишком часто?
Строго говоря, это не бот опрашивает страницу, а скрипт, размещенный и запущенный на сервере. Думаю, что по ip конечно могут и забанить =) Но, кажется, бот создает примерно такую же нагрузку как и средний пользователь сайта)
Если вы думаете что есть пользователь который круглосуточно каждую минуту долбит одну страницу то вы немного ошибаетесь.
От такого скрипта в логах куча одинаковых запросов, поэтому логичный ход при подобной частоте его забанить (или после нескольких смен IP - выдавать ему неверную информацию).
Таймаут должен быть разумным, а еще лучше заранее согласовать подобный скрапинг с владельцем сайта.
В моём мире, бот - это некая программа, автоматизирующая какой-либо процесс. Соответственно, скрипт - это и есть бот.
Средний пользователь не будет даже раз в минуту 24/7 сидеть и обновлять страницу.
Опытно империческим путем выяснил что есть ограничение на стороне шоурума по кол-ву запроса в N секунд. Бывало днями сидел с авторефрешером в хроме.
С 9 декабря все сильно поменялось. https://showroom.hyundai.ru/rest/car.без браузера и авторизации теперь не работает (HTTP 500 если дергать без кук и HTTP 422 если вызывать с куками но отдельно от страницы)
За частые входы или частые обновления стали блокировать аккаунты на 10 дней. По крайней мере аккаунт с обновлением страницы в раз 10 секунд и ежечасной авторизацией заблокировали. По IP не банят.
Опрашивать сайт раз в минуту - бесполезно, машины уходят за 10-15 секунд
Пишем парсер-мониторинг для «Hyundai Showroom» с выгрузкой в телеграм-канал