подскажите пожалуйста как это примерно должно выглядеть, я примеров не нашел похожих
сейчас код работает так
var XMLHttpRequest=Components.Constructor("@mozilla.org/xmlextras/xmlhttprequest;1"); var b=XMLHttpRequest(); b.open('GET','https://тутURL/chips/118/trade',false); b.send(''); var body = b.responseText; content.document.querySelector('body').innerHTML = body; iimPlayCode('WAIT SECONDS=0.1'); window.document.querySelector('[name="offers[3194][52][price]"]').value=pricelast; iimPlayCode('WAIT SECONDS=0.1'); window.document.querySelector('[type="submit"]').click();
Отредактировано gødmøde (19-09-2019 18:09:21)
Отсутствует
В Firefox Ctrl + Shift + E
или F12 -> вкладка "Сеть"
дело в том что я не нашел в своем запросе "trade" данные которые отвечают за изменение цены
Отсутствует
после изменения цены прилетел вот этот XHR (который GET прилетел через ~секунду, кторый POST через ~10 )
Отредактировано gødmøde (19-09-2019 18:51:38)
Отсутствует
в первом было написано "No parameters for this request"
а второй, который прилетел спустя 15 сек содержал уже такую инфу
objects: [{"type":"orders_counters","id":"97115","tag":"5l1wel5t","data":false},{"type":"chat_counter","id":"97115","tag":"pw47f3m8","data":false}] request: false csrf_token: l5tl961n7xlrlikj
Отсутствует
Вы сами должны определить какие данные отправляются при взаимодействии со страницей и найти нужные запросы.
Потом пробуйте имитировать запрос через XMLHttpRequest с необходимыми заголовками и параметрами.
Не видя страницы перед глазами со всеми событиями и подключенными скриптами, помощь вам будет схожа с сеансом телепатии. Тут слишком много "если".
Отсутствует
да я уже вроде бы все запросы перебрал, если не трудно посмотрите сами, я вам ПМ написал данные для авторизации
у меня есть подозрения что вот этот запрос мне нужен,
Отредактировано gødmøde (20-09-2019 13:04:28)
Отсутствует
В настройки инструментов разработчика зайдите и включите непрерывные логи "Enable persistent logs"
Отредактировано Squatter (20-09-2019 13:38:22)
Отсутствует
в общем сервер отказывается принимать искусственно отправленный запрос(я никакие параметры его не менял, просто переотправил ранее отправленный запрос) выдает ошибку 403. "HTTP 403 Forbidden" указывает, что сервер понял запрос, но отказывается его авторизовать
ответ пришел такой:
Отредактировано gødmøde (20-09-2019 15:33:18)
Отсутствует
Ваприанты:
- Токенизация
- Проверка рефёрера на сервере
- Отправка из средств разработчика не всегда корректно работает
Составляйте запрос вручную через конструктор XMLHttpRequest.
Отсутствует
Вот заголовки этого XHR
game=178&chip=118&options%5Bchip_min_sum%5D=100&offers%5B3199%5D%5B54%5D%5Bprice%5D=&offers%5B3199%5D%5B54%5D%5Bamount%5D=&offers%5B3199%5D%5B51%5D%5Bprice%5D=&offers%5B3199%5D%5B51%5D%5Bamount%5D=&offers%5B3199%5D%5B52%5D%5Bprice%5D=&offers%5B3199%5D%5B52%5D%5Bamount%5D=&offers%5B3209%5D%5B51%5D%5Bprice%5D=&offers%5B3209%5D%5B51%5D%5Bamount%5D=&offers%5B3209%5D%5B52%5D%5Bprice%5D=&offers%5B3209%5D%5B52%5D%5Bamount%5D=&offers%5B3230%5D%5B51%5D%5Bprice%5D=&offers%5B3230%5D%5B51%5D%5Bamount%5D=&offers%5B3230%5D%5B52%5D%5Bprice%5D=&offers%5B3230%5D%5B52%5D%5Bamount%5D=&offers%5B3186%5D%5B51%5D%5Bprice%5D=&offers%5B3186%5D%5B51%5D%5Bamount%5D=&offers%5B3186%5D%5B52%5D%5Bprice%5D=&offers%5B3186%5D%5B52%5D%5Bamount%5D=&offers%5B3256%5D%5B51%5D%5Bprice%5D=&offers%5B3256%5D%5B51%5D%5Bamount%5D=&offers%5B3256%5D%5B52%5D%5Bprice%5D=&offers%5B3256%5D%5B52%5D%5Bamount%5D=&offers%5B3278%5D%5B51%5D%5Bprice%5D=&offers%5B3278%5D%5B51%5D%5Bamount%5D=&offers%5B3278%5D%5B52%5D%5Bprice%5D=&offers%5B3278%5D%5B52%5D%5Bamount%5D=&offers%5B3213%5D%5B51%5D%5Bprice%5D=&offers%5B3213%5D%5B51%5D%5Bamount%5D=&offers%5B3213%5D%5B52%5D%5Bprice%5D=&offers%5B3213%5D%5B52%5D%5Bamount%5D=&offers%5B3229%5D%5B51%5D%5Bprice%5D=&offers%5B3229%5D%5B51%5D%5Bamount%5D=&offers%5B3229%5D%5B52%5D%5Bprice%5D=&offers%5B3229%5D%5B52%5D%5Bamount%5D=&offers%5B3279%5D%5B51%5D%5Bprice%5D=&offers%5B3279%5D%5B51%5D%5Bamount%5D=&offers%5B3279%5D%5B52%5D%5Bprice%5D=&offers%5B3279%5D%5B52%5D%5Bamount%5D=&offers%5B3187%5D%5B51%5D%5Bprice%5D=&offers%5B3187%5D%5B51%5D%5Bamount%5D=&offers%5B3187%5D%5B52%5D%5Bprice%5D=&offers%5B3187%5D%5B52%5D%5Bamount%5D=&offers%5B3231%5D%5B51%5D%5Bprice%5D=&offers%5B3231%5D%5B51%5D%5Bamount%5D=&offers%5B3231%5D%5B52%5D%5Bprice%5D=&offers%5B3231%5D%5B52%5D%5Bamount%5D=&offers%5B3200%5D%5B51%5D%5Bprice%5D=&offers%5B3200%5D%5B51%5D%5Bamount%5D=&offers%5B3200%5D%5B52%5D%5Bprice%5D=&offers%5B3200%5D%5B52%5D%5Bamount%5D=&offers%5B3201%5D%5B51%5D%5Bprice%5D=&offers%5B3201%5D%5B51%5D%5Bamount%5D=&offers%5B3201%5D%5B52%5D%5Bprice%5D=&offers%5B3201%5D%5B52%5D%5Bamount%5D=&offers%5B3202%5D%5B51%5D%5Bprice%5D=&offers%5B3202%5D%5B51%5D%5Bamount%5D=&offers%5B3202%5D%5B52%5D%5Bprice%5D=&offers%5B3202%5D%5B52%5D%5Bamount%5D=&offers%5B3188%5D%5B51%5D%5Bprice%5D=&offers%5B3188%5D%5B51%5D%5Bamount%5D=&offers%5B3188%5D%5B52%5D%5Bprice%5D=&offers%5B3188%5D%5B52%5D%5Bamount%5D=&offers%5B3189%5D%5B51%5D%5Bprice%5D=&offers%5B3189%5D%5B51%5D%5Bamount%5D=&offers%5B3189%5D%5B52%5D%5Bprice%5D=&offers%5B3189%5D%5B52%5D%5Bamount%5D=&offers%5B3190%5D%5B51%5D%5Bprice%5D=&offers%5B3190%5D%5B51%5D%5Bamount%5D=&offers%5B3190%5D%5B52%5D%5Bprice%5D=&offers%5B3190%5D%5B52%5D%5Bamount%5D=&offers%5B3257%5D%5B51%5D%5Bprice%5D=&offers%5B3257%5D%5B51%5D%5Bamount%5D=&offers%5B3257%5D%5B52%5D%5Bprice%5D=&offers%5B3257%5D%5B52%5D%5Bamount%5D=&offers%5B3232%5D%5B51%5D%5Bprice%5D=&offers%5B3232%5D%5B51%5D%5Bamount%5D=&offers%5B3232%5D%5B52%5D%5Bprice%5D=&offers%5B3232%5D%5B52%5D%5Bamount%5D=&offers%5B3191%5D%5B51%5D%5Bprice%5D=&offers%5B3191%5D%5B51%5D%5Bamount%5D=&offers%5B3191%5D%5B52%5D%5Bprice%5D=&offers%5B3191%5D%5B52%5D%5Bamount%5D=&offers%5B3192%5D%5B51%5D%5Bprice%5D=&offers%5B3192%5D%5B51%5D%5Bamount%5D=&offers%5B3192%5D%5B52%5D%5Bprice%5D=&offers%5B3192%5D%5B52%5D%5Bamount%5D=&offers%5B3203%5D%5B51%5D%5Bprice%5D=&offers%5B3203%5D%5B51%5D%5Bamount%5D=&offers%5B3203%5D%5B52%5D%5Bprice%5D=&offers%5B3203%5D%5B52%5D%5Bamount%5D=&offers%5B3204%5D%5B51%5D%5Bprice%5D=&offers%5B3204%5D%5B51%5D%5Bamount%5D=&offers%5B3204%5D%5B52%5D%5Bprice%5D=&offers%5B3204%5D%5B52%5D%5Bamount%5D=&offers%5B3210%5D%5B51%5D%5Bprice%5D=&offers%5B3210%5D%5B51%5D%5Bamount%5D=&offers%5B3210%5D%5B52%5D%5Bprice%5D=&offers%5B3210%5D%5B52%5D%5Bamount%5D=&offers%5B3214%5D%5B51%5D%5Bprice%5D=&offers%5B3214%5D%5B51%5D%5Bamount%5D=&offers%5B3214%5D%5B52%5D%5Bprice%5D=&offers%5B3214%5D%5B52%5D%5Bamount%5D=&offers%5B3193%5D%5B51%5D%5Bprice%5D=&offers%5B3193%5D%5B51%5D%5Bamount%5D=&offers%5B3193%5D%5B52%5D%5Bprice%5D=&offers%5B3193%5D%5B52%5D%5Bamount%5D=&offers%5B3206%5D%5B51%5D%5Bprice%5D=&offers%5B3206%5D%5B51%5D%5Bamount%5D=&offers%5B3206%5D%5B52%5D%5Bprice%5D=&offers%5B3206%5D%5B52%5D%5Bamount%5D=&offers%5B3205%5D%5B51%5D%5Bprice%5D=&offers%5B3205%5D%5B51%5D%5Bamount%5D=&offers%5B3205%5D%5B52%5D%5Bprice%5D=&offers%5B3205%5D%5B52%5D%5Bamount%5D=&offers%5B3194%5D%5B51%5D%5Bprice%5D=&offers%5B3194%5D%5B51%5D%5Bamount%5D=&offers%5B3194%5D%5B52%5D%5Bprice%5D=333&offers%5B3194%5D%5B52%5D%5Bamount%5D=22&offers%5B3235%5D%5B51%5D%5Bprice%5D=&offers%5B3235%5D%5B51%5D%5Bamount%5D=&offers%5B3235%5D%5B52%5D%5Bprice%5D=&offers%5B3235%5D%5B52%5D%5Bamount%5D=&offers%5B3211%5D%5B51%5D%5Bprice%5D=&offers%5B3211%5D%5B51%5D%5Bamount%5D=&offers%5B3211%5D%5B52%5D%5Bprice%5D=&offers%5B3211%5D%5B52%5D%5Bamount%5D=&offers%5B3195%5D%5B51%5D%5Bprice%5D=&offers%5B3195%5D%5B51%5D%5Bamount%5D=&offers%5B3195%5D%5B52%5D%5Bprice%5D=&offers%5B3195%5D%5B52%5D%5Bamount%5D=&offers%5B3234%5D%5B51%5D%5Bprice%5D=&offers%5B3234%5D%5B51%5D%5Bamount%5D=&offers%5B3234%5D%5B52%5D%5Bprice%5D=&offers%5B3234%5D%5B52%5D%5Bamount%5D=&offers%5B3233%5D%5B51%5D%5Bprice%5D=&offers%5B3233%5D%5B51%5D%5Bamount%5D=&offers%5B3233%5D%5B52%5D%5Bprice%5D=&offers%5B3233%5D%5B52%5D%5Bamount%5D=&offers%5B3207%5D%5B51%5D%5Bprice%5D=&offers%5B3207%5D%5B51%5D%5Bamount%5D=&offers%5B3207%5D%5B52%5D%5Bprice%5D=&offers%5B3207%5D%5B52%5D%5Bamount%5D=&offers%5B3196%5D%5B51%5D%5Bprice%5D=&offers%5B3196%5D%5B51%5D%5Bamount%5D=&offers%5B3196%5D%5B52%5D%5Bprice%5D=&offers%5B3196%5D%5B52%5D%5Bamount%5D=
var http = new XMLHttpRequest(); var url = 'https://тутURL/chips/saveOffers'; var params = 'game=178&chip=118&options%5Bchip_min_sum%5D=100&offers%5B3199%5D%5B54%5D%5Bprice%5D=&offers%5B3199%5D%5B54%5D%5Bamount%5D=&offers%5B3199%5D%5B51%5D%5Bprice%5D=&offers%5B3199%5D%5B51%5D%5Bamount%5D=&offers%5B3199%5D%5B52%5D%5Bprice%5D=&offers%5B3199%5D%5B52%5D%5Bamount%5D=&offers%5B3209%5D%5B51%5D%5Bprice%5D=&offers%5B3209%5D%5B51%5D%5Bamount%5D=&offers%5B3209%5D%5B52%5D%5Bprice%5D=&offers%5B3209%5D%5B52%5D%5Bamount%5D=&offers%5B3230%5D%5B51%5D%5Bprice%5D=&offers%5B3230%5D%5B51%5D%5Bamount%5D=&offers%5B3230%5D%5B52%5D%5Bprice%5D=&offers%5B3230%5D%5B52%5D%5Bamount%5D=&offers%5B3186%5D%5B51%5D%5Bprice%5D=&offers%5B3186%5D%5B51%5D%5Bamount%5D=&offers%5B3186%5D%5B52%5D%5Bprice%5D=&offers%5B3186%5D%5B52%5D%5Bamount%5D=&offers%5B3256%5D%5B51%5D%5Bprice%5D=&offers%5B3256%5D%5B51%5D%5Bamount%5D=&offers%5B3256%5D%5B52%5D%5Bprice%5D=&offers%5B3256%5D%5B52%5D%5Bamount%5D=&offers%5B3278%5D%5B51%5D%5Bprice%5D=&offers%5B3278%5D%5B51%5D%5Bamount%5D=&offers%5B3278%5D%5B52%5D%5Bprice%5D=&offers%5B3278%5D%5B52%5D%5Bamount%5D=&offers%5B3213%5D%5B51%5D%5Bprice%5D=&offers%5B3213%5D%5B51%5D%5Bamount%5D=&offers%5B3213%5D%5B52%5D%5Bprice%5D=&offers%5B3213%5D%5B52%5D%5Bamount%5D=&offers%5B3229%5D%5B51%5D%5Bprice%5D=&offers%5B3229%5D%5B51%5D%5Bamount%5D=&offers%5B3229%5D%5B52%5D%5Bprice%5D=&offers%5B3229%5D%5B52%5D%5Bamount%5D=&offers%5B3279%5D%5B51%5D%5Bprice%5D=&offers%5B3279%5D%5B51%5D%5Bamount%5D=&offers%5B3279%5D%5B52%5D%5Bprice%5D=&offers%5B3279%5D%5B52%5D%5Bamount%5D=&offers%5B3187%5D%5B51%5D%5Bprice%5D=&offers%5B3187%5D%5B51%5D%5Bamount%5D=&offers%5B3187%5D%5B52%5D%5Bprice%5D=&offers%5B3187%5D%5B52%5D%5Bamount%5D=&offers%5B3231%5D%5B51%5D%5Bprice%5D=&offers%5B3231%5D%5B51%5D%5Bamount%5D=&offers%5B3231%5D%5B52%5D%5Bprice%5D=&offers%5B3231%5D%5B52%5D%5Bamount%5D=&offers%5B3200%5D%5B51%5D%5Bprice%5D=&offers%5B3200%5D%5B51%5D%5Bamount%5D=&offers%5B3200%5D%5B52%5D%5Bprice%5D=&offers%5B3200%5D%5B52%5D%5Bamount%5D=&offers%5B3201%5D%5B51%5D%5Bprice%5D=&offers%5B3201%5D%5B51%5D%5Bamount%5D=&offers%5B3201%5D%5B52%5D%5Bprice%5D=&offers%5B3201%5D%5B52%5D%5Bamount%5D=&offers%5B3202%5D%5B51%5D%5Bprice%5D=&offers%5B3202%5D%5B51%5D%5Bamount%5D=&offers%5B3202%5D%5B52%5D%5Bprice%5D=&offers%5B3202%5D%5B52%5D%5Bamount%5D=&offers%5B3188%5D%5B51%5D%5Bprice%5D=&offers%5B3188%5D%5B51%5D%5Bamount%5D=&offers%5B3188%5D%5B52%5D%5Bprice%5D=&offers%5B3188%5D%5B52%5D%5Bamount%5D=&offers%5B3189%5D%5B51%5D%5Bprice%5D=&offers%5B3189%5D%5B51%5D%5Bamount%5D=&offers%5B3189%5D%5B52%5D%5Bprice%5D=&offers%5B3189%5D%5B52%5D%5Bamount%5D=&offers%5B3190%5D%5B51%5D%5Bprice%5D=&offers%5B3190%5D%5B51%5D%5Bamount%5D=&offers%5B3190%5D%5B52%5D%5Bprice%5D=&offers%5B3190%5D%5B52%5D%5Bamount%5D=&offers%5B3257%5D%5B51%5D%5Bprice%5D=&offers%5B3257%5D%5B51%5D%5Bamount%5D=&offers%5B3257%5D%5B52%5D%5Bprice%5D=&offers%5B3257%5D%5B52%5D%5Bamount%5D=&offers%5B3232%5D%5B51%5D%5Bprice%5D=&offers%5B3232%5D%5B51%5D%5Bamount%5D=&offers%5B3232%5D%5B52%5D%5Bprice%5D=&offers%5B3232%5D%5B52%5D%5Bamount%5D=&offers%5B3191%5D%5B51%5D%5Bprice%5D=&offers%5B3191%5D%5B51%5D%5Bamount%5D=&offers%5B3191%5D%5B52%5D%5Bprice%5D=&offers%5B3191%5D%5B52%5D%5Bamount%5D=&offers%5B3192%5D%5B51%5D%5Bprice%5D=&offers%5B3192%5D%5B51%5D%5Bamount%5D=&offers%5B3192%5D%5B52%5D%5Bprice%5D=&offers%5B3192%5D%5B52%5D%5Bamount%5D=&offers%5B3203%5D%5B51%5D%5Bprice%5D=&offers%5B3203%5D%5B51%5D%5Bamount%5D=&offers%5B3203%5D%5B52%5D%5Bprice%5D=&offers%5B3203%5D%5B52%5D%5Bamount%5D=&offers%5B3204%5D%5B51%5D%5Bprice%5D=&offers%5B3204%5D%5B51%5D%5Bamount%5D=&offers%5B3204%5D%5B52%5D%5Bprice%5D=&offers%5B3204%5D%5B52%5D%5Bamount%5D=&offers%5B3210%5D%5B51%5D%5Bprice%5D=&offers%5B3210%5D%5B51%5D%5Bamount%5D=&offers%5B3210%5D%5B52%5D%5Bprice%5D=&offers%5B3210%5D%5B52%5D%5Bamount%5D=&offers%5B3214%5D%5B51%5D%5Bprice%5D=&offers%5B3214%5D%5B51%5D%5Bamount%5D=&offers%5B3214%5D%5B52%5D%5Bprice%5D=&offers%5B3214%5D%5B52%5D%5Bamount%5D=&offers%5B3193%5D%5B51%5D%5Bprice%5D=&offers%5B3193%5D%5B51%5D%5Bamount%5D=&offers%5B3193%5D%5B52%5D%5Bprice%5D=&offers%5B3193%5D%5B52%5D%5Bamount%5D=&offers%5B3206%5D%5B51%5D%5Bprice%5D=&offers%5B3206%5D%5B51%5D%5Bamount%5D=&offers%5B3206%5D%5B52%5D%5Bprice%5D=&offers%5B3206%5D%5B52%5D%5Bamount%5D=&offers%5B3205%5D%5B51%5D%5Bprice%5D=&offers%5B3205%5D%5B51%5D%5Bamount%5D=&offers%5B3205%5D%5B52%5D%5Bprice%5D=&offers%5B3205%5D%5B52%5D%5Bamount%5D=&offers%5B3194%5D%5B51%5D%5Bprice%5D=&offers%5B3194%5D%5B51%5D%5Bamount%5D=&offers%5B3194%5D%5B52%5D%5Bprice%5D=7.694&offers%5B3194%5D%5B52%5D%5Bamount%5D=&offers%5B3235%5D%5B51%5D%5Bprice%5D=&offers%5B3235%5D%5B51%5D%5Bamount%5D=&offers%5B3235%5D%5B52%5D%5Bprice%5D=&offers%5B3235%5D%5B52%5D%5Bamount%5D=&offers%5B3211%5D%5B51%5D%5Bprice%5D=&offers%5B3211%5D%5B51%5D%5Bamount%5D=&offers%5B3211%5D%5B52%5D%5Bprice%5D=&offers%5B3211%5D%5B52%5D%5Bamount%5D=&offers%5B3195%5D%5B51%5D%5Bprice%5D=&offers%5B3195%5D%5B51%5D%5Bamount%5D=&offers%5B3195%5D%5B52%5D%5Bprice%5D=&offers%5B3195%5D%5B52%5D%5Bamount%5D=&offers%5B3234%5D%5B51%5D%5Bprice%5D=&offers%5B3234%5D%5B51%5D%5Bamount%5D=&offers%5B3234%5D%5B52%5D%5Bprice%5D=&offers%5B3234%5D%5B52%5D%5Bamount%5D=&offers%5B3233%5D%5B51%5D%5Bprice%5D=&offers%5B3233%5D%5B51%5D%5Bamount%5D=&offers%5B3233%5D%5B52%5D%5Bprice%5D=&offers%5B3233%5D%5B52%5D%5Bamount%5D=&offers%5B3207%5D%5B51%5D%5Bprice%5D=&offers%5B3207%5D%5B51%5D%5Bamount%5D=&offers%5B3207%5D%5B52%5D%5Bprice%5D=&offers%5B3207%5D%5B52%5D%5Bamount%5D=&offers%5B3196%5D%5B51%5D%5Bprice%5D=&offers%5B3196%5D%5B51%5D%5Bamount%5D=&offers%5B3196%5D%5B52%5D%5Bprice%5D=&offers%5B3196%5D%5B52%5D%5Bamount%5D='; http.open('POST', url, true); //Send the proper header information along with the request http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=UTF-8'); http.onreadystatechange = function() { console.log(this.responseText); } http.send(params);
var b=XMLHttpRequest(); b.open('GET','https://тутURL/chips/118/trade',false); b.send(''); var body = b.responseText;
Отредактировано gødmøde (21-09-2019 12:45:04)
Отсутствует
Для отладки запроса
var XMLHttpRequest = Components.Constructor("@mozilla.org/xmlextras/xmlhttprequest;1");
Отсутствует
Спасибо, все работает чётко
Теперь от нажатия "Воспроизвести" до того момента когда моя цена окажется вне конкуренции - всего 1.22 секунды!
О такой скорости я даже не мечтал, ведь даже если 30 сек уходило это событие, вручную никто бы не тягался, ну мне интересно было довести дело до конца)
Это мой(ну на 25% точно мой) первый рабочий скрипт!Буду интересоваться тематикой JS и далее, если бы не ваша помощь, я бы скорей всего дал заднюю в этом деле.
Дай бог Вам здоровья!(хоть я и атеист, ну неважно!)За то что тратите свое время на помощь другим безвозмездно!
Подскажите напоследок, если реализовывать подобный софт в виде десктопного приложения, то это делается тоже на JS? или это будет в разы сложнее чем на аймакросе и не стоит потраченного времени? как такую тематику правильно гуглить? Что бы копать хотя бы в нужном направлении)
Отсутствует
И вам тоже дай бог здоровья (от агностика)!
По поводу десктопа всё можно, есть множество гайдов, в том числе статей на хабре.
По запросу "desktop js" в выдаче гуугла много статей по этой тематике. Сам таким не занимался поскольку с JS мне на данный момент удобнее работать браузерно, где реализовано много технологий и API дающих дополнительный набор возможностей. Опять же иногда помогают готовые расширения для Firefox.
Но в любом случае для начала необходимо ознакомиться с основами javascript
Отсутствует