Bullsquid

Bullsquid

Fortran forever
Пикабушник
поставил 10 плюсов и 0 минусов
131 рейтинг 0 подписчиков 0 подписок 2 поста 1 в горячем

Непосредственный переход к скачиванию (без ожидания)

Для ЛЛ: скрипт позволяет скачивать моды с сайта top-mods .ru без ожидания. Если файлы расположены на modsfire .com или sharemods .com, скачивание начинается сразу. Скачать скрипт можно в разделе Установка. В статье описывается анализ функций "ожидание", и способы их обхода.

Пробелы пред точками добавлены умышленно, что бы не превращались в бессмысленные ссылки.

Для остальных:

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

Не вдаваясь сильно в подробности, появилась необходимость обновить пачку модов, ~80 для RimWorld. Мало того, что было ожидание на файловом хостинге, так еще и сам сайт с модами его добавил. top-mods .ru, возможно, не самый лучший пример, потому что там после регистрации ожидание пропадает (хотя я и не проверял). Он просто попался под руку, и интересен как пример подобных функций ожидания.

Я постараюсь описать пошагово, как можно обходить их, на что обращать внимание, и что с этим можно сделать.

Обход top-mods .ru

На страницах сайта перед загрузкой предлагается подождать тридцать секунд. После ожидания появляются кнопки перехода к скачиванию, в моем случае две, Скачать и Зеркало. Осмотрим пациента в инспекторе Google Chrome. Нажимаем на клавиатуре [ ctrl + shift + C ] и жмем на интересующий нас блок.

Непосредственный переход к скачиванию (без ожидания) Расширение для хрома, Javascript, Моды, Инструкция, Длиннопост

Мы видим тег div#timer_1 и сразу же под ним div#timer_2. Нижний скрыт изначально и появляется, когда таймер заканчивается. Значит, все что мы должны сделать - это сразу после загрузки страницы удалить div#timer_1 (что-бы не мешался) и отобразить div#timer_2. И все.

Переходим к написанию скрипта в браузерном расширении Byte Eight Lab - MultiTool (для Google Chrome). Про его установку в самом конце статьи, в разделе Установка, там же можно скачать уже готовый скрипт.

Весь код, проделывающий все выше описанное, сводится всего к паре строк:

Непосредственный переход к скачиванию (без ожидания) Расширение для хрома, Javascript, Моды, Инструкция, Длиннопост

Единственно что добавим еще, это DOMContentLoaded, иначе скрипт выполнится, когда на странице нужных элементов еще нет.

И важно не забыть в настройках указать https://top-mods .ru/* что-бы скрипт выполнялся на всех страницах. И так же для всех остальных доменов, о которых будет ниже.

Непосредственный переход к скачиванию (без ожидания) Расширение для хрома, Javascript, Моды, Инструкция, Длиннопост

Сохраняем, включаем скрипт, обновляем страницу, видим, что сразу доступны все кнопки.

Обход modsfire .com

Попадая на страницу, нас приветствует кнопка GENERATE LINK (которая еще может быть скрыта под блоком перенаправляющая на рекламу). Посмотрим как она работает. После клика пять секунд делает вид что генерирует ссылку, после меняется на DOWNLOAD LINK, которая нечего не скачивает, а направляет нас на еще одну страницу. Пока что вернемся назад, и разберемся с первой страницей.

Переходим в инспектор, и наблюдаем за изменениями.

Непосредственный переход к скачиванию (без ожидания) Расширение для хрома, Javascript, Моды, Инструкция, Длиннопост

Видим, что кнопка - это ссылка, имеет класс download-button, но изначально у нее отсутствует атрибут href. Там же в инспекторе, во вкладке "Сеть" можно заметить, что никакие запросы на сервер не отправляются. Значит ссылка была на странице изначально. Поищем, откуда же она берется. На это может пролить свет функция, которая обрабатывает событие click по этой кнопке. Ищем вкладку "Прослушивание событий" (элемент должен быть выделен).

Непосредственный переход к скачиванию (без ожидания) Расширение для хрома, Javascript, Моды, Инструкция, Длиннопост

Любой обработчик может содержать нужный нам код. Но всегда в первую очередь стоит проверять самый очевидный. А именно, тот который привязан непосредственно к элементу, в нашем случает это a .download-button. Нажмем на него и посмотрим что там внутри.

Непосредственный переход к скачиванию (без ожидания) Расширение для хрома, Javascript, Моды, Инструкция, Длиннопост

var btn = $('.download-button') - наша кнопка помещается в переменную
btn .click(function(){... - привязывается событие click

Далее по порядку, проверяет btnClicked - было ли нажатие на кнопку ранее. Если нет, вставляет html в кнопку, эмитирующий генерацию. И самое интересное setTimeout - таймер, который через определенное время изменит вид кнопки, и... добавит атрибут attr('href', btnHref). Это именно то, что мы и искали, переменная btnHref очевидно хранит ссылку. В третьей строке кода на скрине видим: var btnHref = btn.attr('href'); То есть ссылка у этой кнопки была изначально, скрипт просто перенес ее в переменную и удалил атрибут.

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

Расширение Byte Eight Lab - MultiTool встраивает код сразу, как становится это возможно, до загрузки контента, что позволяет нам воспользоваться MutationObserver. Это наблюдатель, который будет сообщать обо всех изменениях на странице. Нас интересуют новые элементы, они будут содержаться в addedNodes. Перебирая элементы, найдем a .download-button.

Непосредственный переход к скачиванию (без ожидания) Расширение для хрома, Javascript, Моды, Инструкция, Длиннопост

Нашли, сразу переходим по ссылке location .href = node .href; В итоге получилось, что страница даже не успела загрузиться до конца, как мы уже переходим далее.

После запуска скрипта происходит удивительное, файл начинает скачиваться сразу, хотя у нас должна была быть еще одна страница с рекламой и кнопкой. Оказывается на второй странице такая же кнопка a .download-button, наш скрипт нашел ее, и точно так же перешел по ссылке location .href = node .href; она уже содержала прямую ссылку на файл.

Обход sharemods .com

Аналогичным образом сначала просто наблюдаем за поведением. Нас встречает кнопка Create download link, через шесть секунд меняется на Download link is ready. Повторное нажатие перезагружает страницу, при этом адрес не меняется, даже не добавляется GET параметр в адрес. Как правило, такое поведение свидетельствует о том, что был передан POST запрос, или установлена cookie. Проверить эту теорию можно в инспекторе, во вкладке "Сеть". Повторяем действия и смотрим на загруженную страницу, она будет самой первой в списке.

Непосредственный переход к скачиванию (без ожидания) Расширение для хрома, Javascript, Моды, Инструкция, Длиннопост

Метод запроса: POST - подтверждает догадку о том, что была отправлена форма.
Проверим HTML:

Непосредственный переход к скачиванию (без ожидания) Расширение для хрома, Javascript, Моды, Инструкция, Длиннопост

Значит все что нужно сделать - отправить форму сразу, как она появится на странице, так же через MutationObserver. Единственным отличием будет только элемент, который нужно найти, в этот раз это form#dForm.

Непосредственный переход к скачиванию (без ожидания) Расширение для хрома, Javascript, Моды, Инструкция, Длиннопост

Когда нужный элемент найден, выполняем node .submit(); это отправит форму. На следующей странице появляется кнопка Start Download, которая уже содержит прямую ссылку на файл. Посмотрим на нее в инспекторе:

Непосредственный переход к скачиванию (без ожидания) Расширение для хрома, Javascript, Моды, Инструкция, Длиннопост

a#downloadbtn - будем дополнительно искать и ее.

Непосредственный переход к скачиванию (без ожидания) Расширение для хрома, Javascript, Моды, Инструкция, Длиннопост

И сразу переходим по ссылке.

Итог

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

Установка

  1. Устанавливаем расширение Byte Eight Lab - MultiTool для Chrome

  2. Скачиваем скрипт Быстрый переход к скачиванию.json

  3. Кликаем по значку расширения, затем во вкладке "Страница" в самом низу, в блоке "Встраиваемые скрипты и стили" жмем добавить.

  4. Откроется вкладка, в ней переходим во вкладку "Настройки", и загружаем скрипт.

Непосредственный переход к скачиванию (без ожидания) Расширение для хрома, Javascript, Моды, Инструкция, Длиннопост
Показать полностью 13

Миниатюры в каталоге www.old-games.ru

Вода

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

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

Ну и естественно...

Миниатюры в каталоге www.old-games.ru Javascript, Расширение для хрома, Ретро-игры, Длиннопост

И ничего. Вот так с ходу, по такому "богатому" описанию найти не удалось. Но есть замечательный сайт, хранящий историю, www.old-games.ru. Было решено пробежаться по каталогу, по жанру стратегии, в надежде узнать по скриншотам.

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

Собственно суть

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

Миниатюры в каталоге www.old-games.ru Javascript, Расширение для хрома, Ретро-игры, Длиннопост

Конечно, не самое элегантное решение, лучше было бы реализовать со стороны сервера, да и нужно на это всего пару строк кода потратить. Но имеем, что имеем.

Как пользоваться

  1. Первое, что нам понадобится, расширение для браузера Byte Eight Lab - MultiTool для Chrome (вроде как в Edge и Opera тоже будет работать).

  2. Второе, сам скрипт.

  3. Кликаем по значку расширения, затем во вкладке "Страница" в самом низу, в блоке "Встраиваемые скрипты и стили" жмем добавить.

  4. Откроется вкладка, в ней переходим во вкладку "Настройки", и загружаем скрипт.

  5. ...

  6. Profit!

Миниатюры в каталоге www.old-games.ru Javascript, Расширение для хрома, Ретро-игры, Длиннопост

В заключении

Игру в итоге благополучно нашел, Dark Reign: Battles of the Outer Rim, да еще много интересного и забытого: KKnD: Krush, Kill 'n Destroy и Battlezone. Хорошие были времена. Обновить воспоминания пока не успел, наверное надо что-то типа VMware организовать под это дело, но это уже другая история.

Если возникнут какие-то проблемы, или может идеи подобного микрокода, пишите, буду рад по мере сил и свободного времени реализовать.

Показать полностью 3
Отличная работа, все прочитано!