Новая испанская цифровая газета El Español, появившаяся в этом году, позволяет вам читать только 25 статей в месяц, если вы не платите. Чтение в режиме инкогнито или отключение JavaScript на странице — самые простые способы обойти это ограничение (как и для других платных сетей). Вот, ради обучения, альтернативный путь.

tl;dr

  1. Установите в свой браузер одно из этих двух расширений: Tampermonkey (для Chromium или Chrome) или Greasmonkey (для Mozilla Firefox). Возможно, вам придется перезапустить браузер после его установки.
  2. Установите пользовательский скрипт Lily Luna Potter (нажмите Установить этот скрипт, а на следующей странице Установить).
  3. Просмотрите «Эль Эспаньол». Это всплывающее окно больше не должно скрывать содержимое!

Как это делается (скучная техническая ерунда)

Сначала просматриваем сайт и открываем несколько статей, пока не достигнем лимита. В другом сеансе браузера (например, в приватном окне) откройте другую статью. Используя инструменты разработчика и просмотрев HTTP-трафик, обратите внимание на различия.

Есть небольшой фрагмент JSON, загружаемый динамически, который выглядит интересно. URL-адрес (http://www.elespanol.com/static/sortingHat.js?stigma=xxx) включает в качестве параметра то, что выглядит как идентификатор файла cookie или идентификатор сеанса. Возвращаемый контент представляет собой не более чем логический флаг и выглядит подозрительно связанным с платным доступом.

Существует также XMLHttpRequest URL-адреса http://www.elespanol.com/usuarios/azkaban/promotions/. Предварительный просмотр показывает, что это именно скрывающее всплывающее окно. Весьма вероятно, что на страницах, загружающих этот контент, есть какой-то JavaScript, iif пользователю не разрешено продолжать чтение.

(«Азкабан»…?)

Далее давайте рассмотрим JavaScript, который эти страницы загружают динамически. Глядя на их имена и параметры, можно заметить, что многие из них, вероятно, связаны с аналитикой, отслеживанием или рекламой. Нас это не интересует. (Я имею в виду, конечно, мы заинтересованы — мы хотим, чтобы они исчезли из Интернета. Но это для другого поста…)

Давайте загрузим некоторые другие; в частности, первые три из приведенных выше.

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

Это легко исправить. Вы можете открыть файлы в своем любимом редакторе и использовать его функции для форматирования кода и создания отступов. Альтернативой, если у вас есть среда Node.js, является глобальная установка пакета js-beautify и вызов его из командной строки.

Со скриптами в читабельном виде, теперь дело за ниточкой. Мы уже встречали эти любопытные названия раньше — «распределяющая шляпа» и «азкабан»; но если бы это было не так, мы бы сканировали код и искали ключевые слова («платный доступ», «регистрация» и т. д.), файлы cookie или асинхронный HTTP.

Глядя на экземпляры этих слов, мы замечаем кое-что, что может помочь. «browser.js» определяет глобальный объект с именем «jeef» со свойством «debug», установленным на «false».

Что произойдет, если мы запустим консоль в Chromium и переключим этот флажок…?

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

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

Чтобы начать дамп лога сразу после парсинга и синхронного выполнения browser.js, я добавил эту однострочную строку (jeef.debug = true) в свое расширение Tampermonkey в Chromium как новый пользовательский скрипт.

Теперь, когда я перезагружаю страницу, в начале появляется действительно интересное.

Волшебник — маггл Получение палочки для волшебника xxx Инициализация Азкабана.… К настоящему времени схема именования очевидно, даже для таких, как я, не читавших ни одной книги!

Дальнейшая проверка в поисках «маггла» обнаруживает множество связанных функций с раскрывающимися именами.

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

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

Итак, код конечного пользовательского скрипта таков:

И это работает как… ну, как обаяние.