Як ми зробили скриншот без скриншотів

Aug 11, 2026, 6:00 PM · Команда Oiva

Картка «Вибраний елемент» у деталях відповіді

Іноді відгук простіше показати, ніж описати. Увімкніть вибір елемента для опитування — і відвідувач зможе вказати на конкретну частину сторінки: кнопку, заголовок, поле форми — замість того щоб писати «синя кнопка десь зверху». У деталях відповіді ви отримуєте чисте, повністю стилізоване зображення саме цього елемента, поруч із повносторінковим знімком, де його підсвічено.

Схема, що показує фронтенд, бекенд і Node-сервіс з headless Chrome-рендерером, і те, як захоплена сторінка проходить через них на шляху до скриншота в об'єктному сховищі

Щоб це запрацювало, довелося рендерити сторінки, які нам не належать, на доменах, які ми не контролюємо, усередині справжнього браузерного рушія — і повертати коректно оформлений фрагмент з одним елементом із цих сторінок. Перша версія пішла очевидним шляхом: захопити розмітку клікнутого елемента і відрендерити лише її, окремо. У кожному нашому тесті це виглядало правильно — бо в кожному тесті елемент був стилізований інлайновими стилями. Але щойно кнопка на реальній сторінці отримувала свій вигляд із класу в зовнішній таблиці стилів, вирізаний фрагмент повертався плоским, без стилів. В ізольованого фрагмента немає head сторінки, до якого можна підключити таблицю стилів, немає блоку style, немає CSS-змінних, на які міг би спиратися цей клас — нічого не зламалося, просто застосовувати стилі не було до чого.

Виправлення звелося до того, щоб рендерити всю сторінку цілком, а не елемент окремо. Пікер уже позначає клікнутий елемент у момент вибору, тож ми рендеримо всю захоплену сторінку відвідувача цілком, з її справжніми стилями і справжньою версткою, і робимо два знімки з однієї й тієї ж завантаженої сторінки: сторінку цілком і щільно обрізаний позначений елемент. Тепер одне завантаження сторінки в браузері дає обидва зображення — це ще й менше роботи, ніж два окремі рендери, які були потрібні раніше.

Ніщо з цього не змінило те, що бачить відвідувач — він і далі просто клікає на потрібну частину сторінки. Змінилося те, що відбувається після: справжня, коректно стилізована картинка саме цієї частини, а не здогад, зібраний із текстового опису.