Сбой в работе поиска CTRL+F, пожалуйста, предложите альтернативный способ

Привет,

Я был на следующем форуме Discourse:

Мне нужно было найти слово «mac».

Используя CTRL+F, я мог найти эту строку только когда она была на экране. Прокрутка сама по себе заставляла совпадения исчезать.

Это также нарушает индикатор позиции совпадения в полосе прокрутки.

Я понимаю утверждение, что это сделано для «экономии памяти», но у этой системы 64 гигабайта памяти, а эта страница содержит менее 100 килобайт текста. Поэтому я считаю, что это на самом деле функция защиты от парсинга, аналогичная той, что использует Facebook, чтобы предотвратить (но безуспешно) сбор данных.

Ища информацию об этой странной ошибке, я обнаружил огромное количество жалоб на эту крайне мешающую «функцию».

Какие есть альтернативы?

Можно ли отключить это на стороне клиента?

А как насчет загрузки страницы в режиме печати?

Есть ли способ принудительно получить полный текстовый дамп всей страницы, чтобы я мог просто просмотреть его в текстовом редакторе?

А насчет скрипта Greasemonkey, что-нибудь, что может отключить функцию, выгружающую текст из памяти, чтобы его можно было искать?

Мой единственный вариант — взломать сервер базы данных, извлечь все содержимое Discourse и затем написать код для отображения ветки комментариев без этих помех?

Я вижу жалобы на это с 2014 года, поэтому, полагаю, нет желания решать эту проблему, и это «функция, а не ошибка», но функция для владельцев, а не для пользователей?

Каков «контекст» этой очень серьезной проблемы, из-за которой я БОЮСЬ когда-либо столкнуться с необходимостью навигации по форуму «Discourse»?

Да, я озлоблен, как вы это определили?

Я попросил «машину для генерации мусора» предоставить печатную версию:

И примерно через минуту обработки предварительного просмотра это ДЕЙСТВИТЕЛЬНО работает!

Добавьте /print к URL, чтобы загружать до 100 постов за раз. Посмотрите, как это работает здесь: https://forum.openwrt.org/t/re-luci-add-support-for-managing-tags-in-dhcp-and-dns-configuration-web-page/220640/print

Да, посмотрите: https://forum.openwrt.org/raw/220640

Спасибо!

Метод raw сработал для меня,

случайно есть ли дополнение, которое автоматически загружает каждую страницу в raw-режиме?

Я писал другое сообщение, извините, я не могу сидеть весь день и ждать тайм-аута по одной картинке.

Да, я пробовал, но

я не хочу использовать поиск на стороне сервера

и, кроме того, результаты не подходят для меня

Вот как это выглядит

Извините,

Я пытался решить проблему в OpenWRT

и сильно расстроился из-за того, что не могу искать так, как ожидается от браузера.

Мне жаль, что вы восприняли моё нежелание тратить здесь время как невежливость, но, пожалуйста, поймите мою точку зрения.

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

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

а затем нажимаю «Ответить» и получаю сообщение об ошибке: можно загружать только одно изображение за раз.

Это потребовало бы отредактировать всё моё сообщение, которое из-за этих скриншотов должно быть связным.

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

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

Так что… извините, если это звучит невежливо, но я не хочу тратить ещё неизвестно сколько лишних минут на то, чтобы выяснить и выполнить необходимые действия для отправки своего сообщения.

Но уверяю вас, я не хочу быть невежливым по отношению к вам, я просто очень расстроен!

Привет, друзья! Я столкнулся с той же надоедливой проблемой с CTRL+F в Discourse: посты, которые сейчас не видны на экране, просто исчезают из поиска из-за системы ленивой загрузки и выгрузки из памяти. Даже с 64 ГБ оперативной памяти вы не сможете выполнить поиск по всей теме прямо в браузере. Насколько я понял, это скорее функция защиты от парсинга, чем способ экономии памяти. Вот что сработало (и более безопасные) альтернативы, которые я нашел:

  1. Используйте режим печати: Добавьте /print в конец URL темы, например, https://forum.example.com/t/topic-name/12345/print. Это загружает все посты темы сразу и работает с поиском в браузере (CTRL+F). Макет упрощен, но идеально подходит для полнотекстового поиска.

  2. Прокручивайте, пока всё не загрузится: Продолжайте прокручивать страницу, пока система ленивой загрузки не отрисует все посты в DOM. Тогда CTRL+F найдет всё. Для длинных тем это может быть утомительно, но работает без дополнительных инструментов.

  3. Используйте API Discourse: У каждой темы есть JSON-эндпоинт, например, https://forum.example.com/t/{topic_id}.json. Вы можете извлечь все посты из массива post_stream.posts, открыть их в текстовом редакторе и удобно выполнить поиск. Это безопасно, официально и работает независимо от ленивой загрузки.

  4. Подход с пользовательским скриптом (Userscript / Greasemonkey): Вы можете автоматизировать загрузку всех постов на странице с помощью этого простого скрипта для Chrome/Firefox. Он автоматически нажимает «Загрузить больше постов», пока тема полностью не отобразится:

// ==UserScript==
// @name         Discourse Load All Posts
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Auto-click "load more posts" to fully render topic for search
// @match        https://*/*
// @grant        none
// ==/UserScript==
(function() {
    'use strict';
    function loadAll() {
        const button = document.querySelector('.load-more[data-more-url]');
        if (button) {
            button.click();
            setTimeout(loadAll, 500); // wait and try again
        }
    }
    window.addEventListener('load', () => {
        setTimeout(loadAll, 1000); // start a second after page load
    });
})();

После завершения CTRL+F сможет искать по всему содержимому темы.

Экспорт / внешний поиск: Используйте режим печати или JSON API для экспорта постов в PDF, HTML или обычный текст. Откройте их в редакторе, таком как VSCode или Notepad++, для полнотекстового поиска.

:warning: Не пытайтесь взламывать сервер: Проникновение в базу данных или парсинг контента на стороне сервера незаконно и излишне. Используйте API, режим печати или пользовательский скрипт — все они безопасны и работают надежно.

TL;DR: Самый простой способ — режим /print. Более гибкие варианты — JSON API или пользовательский скрипт. CTRL+F работает, когда все посты загружены в DOM. Надеюсь, команда Discourse увидит это и, возможно, однажды рассмотрит возможность добавить опцию «полный поиск» — это серьезная проблема UX для тех, кто занимается исследованиями или углубленным чтением тем :sweat_smile:

Работает ли этот скрипт Greasemonkey?

Ты его написал?

Только чтобы уточнить насчёт скрипта пользователя, который я поделился: я написал его специально для форума, который я использовал, поэтому могут быть некоторые различия в структуре HTML, если вы попытаетесь адаптировать его для других сайтов. Скрипт работает со стандартными темами Discourse, которые используют систему «Загрузить больше сообщений» (ленивая загрузка), автоматически нажимая кнопку «Загрузить больше сообщений» repeatedly, пока все сообщения не будут загружены в DOM. После того как все сообщения загружены, вы можете использовать CTRL+F в вашем браузере для поиска любых ключевых слов как обычно.

На самом деле, многие люди уже много лет используют Tampermonkey/Greasemonkey для работы с Discourse таким образом, и это хорошо работает даже на очень больших форумах.

:warning: Примечание: Некоторые форумы могут изменить класс кнопки (например, `.load-more[data-more-url]`), поэтому вам, возможно, потребуется немного настроить селектор, чтобы он соответствовал фактической кнопке.