Screenshots API
Рендеринг любого URL в PNG или JPEG. Только viewport или вся страница, десктоп или мобильное устройство, со всеми элементами управления JS-рендеринга основного API. Идеально подходит для превью, мониторинга и снимков.
Тот же конвейер JS-рендеринга, параметры скриншотов добавлены на стандартный endpoint. Отдельный Screenshots API закрыт для новых регистраций с 1 ноября 2024 года - существующие интеграции продолжают работать, отключение не планируется.
Endpoint
GEThttps://api.crawlbase.com/screenshots?token=YOUR_JS_TOKEN&url=ENCODED_URL
# Requires a JavaScript token (rendering happens in headless Chrome).
# Returns the image bytes directly. Content-Type: image/png (default).Быстрый старт
# Save the screenshot to disk
curl 'https://api.crawlbase.com/screenshots?token=YOUR_JS_TOKEN' \
--data-urlencode 'url=https://github.com/anthropic' \
-o screenshot.png -Gfrom crawlbase import ScreenshotsAPI
api = ScreenshotsAPI({'token': 'YOUR_JS_TOKEN'})
res = api.get('https://github.com/anthropic')
with open('screenshot.png', 'wb') as f:
f.write(res['body'])const { ScreenshotsAPI } = require('crawlbase');
const fs = require('node:fs/promises');
const api = new ScreenshotsAPI({ token: 'YOUR_JS_TOKEN' });
const res = await api.get('https://github.com/anthropic');
await fs.writeFile('screenshot.png', res.body);Параметры
Обязательные
Ваш приватный Crawlbase token.
URL целевой страницы. Должен начинаться с
http или https и быть полностью URL-кодированным.Специфичные для скриншотов
Захватить только видимую область или всю прокручиваемую страницу.
PNG подходит для чёткого текста и UI; JPEG даёт меньший размер на страницах с большим количеством фотографий.
Ширина viewport.
Высота viewport. Игнорируется при
mode=fullpage.Использовать предустановленный профиль устройства. Мобильные пресеты принудительно устанавливают
width=375, height=812 и телефонный User-Agent.Сохранять скриншот в Cloud Storage. Когда значение
true, ответ содержит заголовок screenshot_url, указывающий на сохранённую копию - полезно, когда нужен стабильный URL для встраивания в дашборды или передачи в смежные системы.Управление рендерингом
Унаследовано из набора параметров Crawling API. Параметры рендеринга, которые клиенты чаще всего используют со скриншотами:
Пользовательский User-Agent передаётся целевому сайту дословно. Закодируйте его в URL. Если не указан, Crawlbase ротирует реалистичный UA для каждого запроса.
CSS-селектор элемента, по которому нужно кликнуть перед захватом скриншота (
#some-button, .some-other-button). Закодируйте значение в URL.Автоматическая прокрутка страницы перед захватом. По умолчанию прокрутка длится 10 секунд. Сочетайте с
scroll_interval (10–60 с), чтобы продлить её. Полезно для контента с ленивой загрузкой выше первого экрана при mode=fullpage.Ждать указанное количество миллисекунд после загрузки страницы перед захватом - даёт время анимациям или тяжёлому JS-рендерингу завершиться.
Дождаться завершения активных AJAX-запросов перед захватом.
Геолокация скриншота из конкретной страны (например,
US, GB, DE). Доступность стран зависит от тарифного плана; полный список стран находится в справочнике параметров Crawling API.Распространённые сценарии
Полностраничный мобильный скриншот
curl 'https://api.crawlbase.com/screenshots?token=YOUR_JS_TOKEN' \
--data-urlencode 'url=https://news.ycombinator.com' \
--data-urlencode 'mode=fullpage' \
--data-urlencode 'device=mobile' \
--data-urlencode 'format=jpeg' \
-o hn-mobile.jpg -Gimport requests
res = requests.get(
'https://api.crawlbase.com/screenshots',
params={
'token': 'YOUR_JS_TOKEN',
'url': 'https://news.ycombinator.com',
'mode': 'fullpage',
'device': 'mobile',
'format': 'jpeg',
},
)
with open('hn-mobile.jpg', 'wb') as f:
f.write(res.content)const fs = require('node:fs/promises');
const params = new URLSearchParams({
token: 'YOUR_JS_TOKEN',
url: 'https://news.ycombinator.com',
mode: 'fullpage',
device: 'mobile',
format: 'jpeg',
});
const res = await fetch(`https://api.crawlbase.com/screenshots?${params}`);
await fs.writeFile('hn-mobile.jpg', Buffer.from(await res.arrayBuffer()));require 'net/http'
uri = URI('https://api.crawlbase.com/screenshots')
uri.query = URI.encode_www_form(token: 'YOUR_JS_TOKEN', url: 'https://news.ycombinator.com',
mode: 'fullpage', device: 'mobile', format: 'jpeg')
File.binwrite('hn-mobile.jpg', Net::HTTP.get(uri))Скриншот после клика
# Open a "Show details" panel before capturing
curl 'https://api.crawlbase.com/screenshots?token=YOUR_JS_TOKEN' \
--data-urlencode 'url=https://example.com/product/123' \
--data-urlencode 'css_click_selector=button.show-details' \
--data-urlencode 'page_wait=1500' \
-o detail.png -Gimport requests
# Open a "Show details" panel before capturing
res = requests.get(
'https://api.crawlbase.com/screenshots',
params={
'token': 'YOUR_JS_TOKEN',
'url': 'https://example.com/product/123',
'css_click_selector': 'button.show-details',
'page_wait': '1500',
},
)
with open('detail.png', 'wb') as f:
f.write(res.content)const fs = require('node:fs/promises');
// Open a "Show details" panel before capturing
const params = new URLSearchParams({
token: 'YOUR_JS_TOKEN',
url: 'https://example.com/product/123',
css_click_selector: 'button.show-details',
page_wait: '1500',
});
const res = await fetch(`https://api.crawlbase.com/screenshots?${params}`);
await fs.writeFile('detail.png', Buffer.from(await res.arrayBuffer()));require 'net/http'
# Open a "Show details" panel before capturing
uri = URI('https://api.crawlbase.com/screenshots')
uri.query = URI.encode_www_form(token: 'YOUR_JS_TOKEN', url: 'https://example.com/product/123',
css_click_selector: 'button.show-details', page_wait: '1500')
File.binwrite('detail.png', Net::HTTP.get(uri))Распространённые сценарии использования
- Превью ссылок: генерация Open Graph-заглушек для сайтов без корректных мета-тегов.
- Визуальный мониторинг: еженедельный захват сайта для обнаружения регрессий вёрстки.
- Архивы для compliance: в связке с Cloud Storage для архивации того, как страница выглядела на конкретную дату.
- Email-отчёты: встраивание актуальных скриншотов в регулярные отчёты.