Отказ от ответственности: добавление элементов на веб-сайт может привести к его поломке.

О программе: это журнал сборки, а не подготовленная статья/руководство.

Репо

Обзор

Это использует мое собственное расширение Chrome, оно внедряет JS на эту страницу. Я сделал свой собственный Node API с поддержкой https, который выполняет запрос на получение дампа JSON потока Reddit (проблема CORS). Затем этот массив сообщений для страницы возвращается обратно в CBP, а затем они циклически повторяются по одному каждые 5 секунд.

Строим это

Смысл этого в том, чтобы увидеть, «что всплывает» в конкретном подразделе/как это может объяснить то, что происходит на диаграмме. Как вы можете видеть ниже, это обычный интерфейс CBP, а затем справа находится конкретный сабвуфер, который меня интересует.

Здесь нет ничего необычного, я уже делал инъекцию кода в Chrome Extension, где я внедряю CSS, чтобы скрыть начальные плитки YouTube, поэтому я не отвлекаюсь от того, для чего я изначально пришел на YouTube.

В любом случае, когда вы берете URL-адрес Reddit и добавляете к нему .json, вы получаете дамп содержимого страницы в формате JSON. Мне этого достаточно, чтобы получить информацию об этом, и я могу просто позвонить снова, скажем, после того, как контент закончится или через 5 минут. Контент будет просто медленно переключаться между постами в месте, указанном ниже.

Конечно… все это основано на том, проверяет ли CBP, был ли изменен их DOM (к счастью, они этого не делают). Я заметил, что YouTube делает это. Если вы попытаетесь изменить их DOM, этот JS-наблюдатель или что-то еще выдаст ошибку, тогда сайт перестанет работать. Вот почему я применил подход с внедрением CSS, который переопределяет некоторые вещи. Обработчик кликов JS для его удаления не меняет DOM, просто удаляет правило CSS.

Доказательство концепции

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

Затем я на самом деле позвоню в Reddit, чтобы получить строку, это было бы интересно, если бы вызов рассматривался как указанный CBP и Reddit, как wtf…

Таким образом, manifest.json проверяет активную вкладку/домен и решает, что вводить. Ниже вы можете увидеть, что у меня есть, например, для YouTube, я просто добавлю один для CBP.

Нацельтесь на элемент, чтобы внедрить материал в

Что сложно, так это то, что у них может быть этот «обфускатор» для классов CSS, который может измениться, но неизвестно когда. Пользовательский интерфейс не меняется, поэтому в худшем случае вы все еще можете ориентироваться на вещи по буквальным узлам/порядку DOM, но я посмотрю, не проблема ли это.

Итак, вот тестовый дамп… посмотрим, что получится.

О да, я должен запустить его после загрузки DOM (редактировать манифест).

лол Panik мем, когда SO не работает.

Я просто подожду, пока страница будет готова, используя один из тех методов ожидания, пока DOM загрузит простые вызовы JS. Хм, это тоже ненадежно, я проведу быстрый глупый тест, например. подождите 10 секунд. Я, вероятно, закончу писать «рекурсивную» вещь, чтобы дождаться ее готовности путем опроса DOM. (Я не просто использовал 15-секундное ожидание)

О, это там!

Ах корс… хм. Я думаю, это означает, что я должен обслуживать это сам после того, как вытащу его из Reddit, скажем, с помощью Node API.

Да, поэтому, если я попаду в свой собственный API с открытыми COR, я смогу обслуживать контент Reddit, который будет извлекать мой API/сервер. Это отстой, но мне легко сделать.

Вы можете получить неприятный дамп JSON следующим образом:

И либо просто вставьте его в журнал консоли инструментов разработчика, чтобы приукрасить его, либо используйте онлайн-форматер JSON. Я просто использую консоль.

«Промежуточное ПО»

Я настраиваю быстрый сервер NodeJS, который будет получать вызовы от инжектора кода, а затем заходить на Reddit и возвращать ответ обратно.

Ох… Я понял. Сначала я добавлю текстовый ввод и кнопку, куда я могу вставить дамп Reddit JSON, чтобы извлечь его. Затем запросчик отправит этот URL-адрес в Node API, и он нажмет на него/вернет результаты. Таким образом, я не хочу беспокоиться об интерфейсе в раскрывающемся списке расширений Chrome.

Собираюсь сохранить это с помощью systemd, который я использовал все это время, также может использовать pm2.

Боже, я не могу найти, где установлен узел, ааа… Я настроил эту штуку некоторое время назад, забыл.

Быстрый тест

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

Это некрасиво, но это сработает, посмотрите кратко, можете стилизовать.

Смотрите, как работают события

Хорошо, настал момент истины, полный тест… ааа, нужно поменять местами URL.

Ухххххх, мне нужен SSL, черт возьми… конечно. Ааа, чувак, я просто куплю случайный строковый домен, сгенерирую сертификат Let’s Encrypt и размещу API. Что ж… Я просто воспользуюсь одним из моих существующих API-интерфейсов домена со случайными строками, в которых уже включен SSL.

Застрял… застрял на systemd, не запуская сервер правильно/недействительный SSL, я думаю, что это проблема пути.

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

Вау… запрос вернул консольный журнал lmao любительский час, но он сказал мне, что не так. Зависимости, которую я импортировал в другой API, там не было. О, правильно, если вызов Axios содержит ошибку, я только что вернул ее. Проблема заключалась в том, что я нигде не мог найти журналы ошибок, как будто они должны выводиться в системном журнале. Я сделал обратный хвостовой вызов, и ошибок там не было. Я бы увидел ошибку зависимости, не выполненную.

Хорошо, теперь API сохраняется в systemd после добавления этой неудовлетворенной зависимости.

Хорошо, попробуйте еще раз.

Тьфу... мой метод GET, я просто поменяю его на запрос. Я знаю, что это супер кусок дерьма, но я должен был сделать это за пару часов, но теперь я потратил на это около 6 часов +.

Ладно, это для реалий. Черт, лол, только что перед глазами промелькнуло 5,4 миллиона долларов, это круто… Я вернусь в поля крепостным, которым я являюсь. Пожалуйста, Reddit не ограничивает/не блокирует меня, ха, никогда не должен развиваться против работающей конечной точки.

Да… это работает, длинная гифка здесь, но я почищу ту, что вверху

Примечание: это расширение, возможно, сломало CBP, лол, я имею в виду, что я не могу выбрать другой рынок позже (я думаю, после того, как скрипт запустится). Лично меня не волнует вкладка, которую я в основном смотрю, это BTC-USD. Вы можете переключиться, обновив страницу и выбрав рынок до запуска инжектора.

Примечание: эти расширения не упакованы, и я не собираюсь этого делать. Вы можете использовать их самостоятельно, их довольно легко использовать/загружать как неупакованное расширение.