Lightpanda: Браузер для ИИ-парсинга в 11 раз быстрее Chrome

March 15, 2026

Сложность: средняя. Время: около 20 минут. Узнайте, как использовать легковесный headless-браузер для сбора данных под ИИ, который работает в 11 раз быстрее Chrome и потребляет в 9 раз меньше памяти.

Целевая аудитория

  • Инженеры, работающие с крупномасштабным веб-парсингом
  • Разработчики инструментов сбора данных для AI/LLM
  • Инженеры по автоматизации тестирования
  • Технические энтузиасты, интересующиеся высокопроизводительными браузерными технологиями

Основные зависимости и среда

  • Linux x86_64 или macOS aarch64
  • Windows требует наличия WSL2
  • Docker (опционально, рекомендуется для продакшена)
  • Node.js 18+ (для запуска скриптов Puppeteer/Playwright)

TIP

Если вы используете Windows, установите Lightpanda напрямую в WSL2, а Puppeteer запускайте на хостовой системе Windows.

Полная структура проекта

lightpanda-browser/
├── lightpanda              # Исполняемый файл основной программы
├── LICENSE                # Лицензия MIT
├── README.md              # Описание проекта
├── CONTRIBUTING.md        # Руководство по контрибьютингу
├── CLA.md                 # Лицензионное соглашение участника
├── docker/
│   └── Dockerfile         # Файл сборки Docker
├── src/                   # Исходный код на Zig (если вы хотите собрать из исходников)
└── docs/                  # Директория с документацией

Пошаговое руководство

Шаг 1: Загрузка и установка Lightpanda

Мы можем скачать бинарные файлы напрямую из nightly builds.

Установка на Linux:

curl -L -o lightpanda https://github.com/lightpanda-io/browser/releases/download/nightly/lightpanda-x86_64-linux && \
chmod a+x ./lightpanda

Установка на macOS:

curl -L -o lightpanda https://github.com/lightpanda-io/browser/releases/download/nightly/lightpanda-aarch64-macos && \
chmod a+x ./lightpanda

Проверка установки:

./lightpanda --version

WARNING

На данный момент официальные бинарные файлы доступны только для Linux x86_64 и macOS aarch64. Пользователям Windows необходимо использовать WSL2.

Шаг 2: Запуск через Docker (рекомендуется)

Если вы не хотите скачивать бинарный файл, Docker — самый быстрый способ начать работу:

docker run -d --name lightpanda -p 9222:9222 lightpanda/browser:nightly

Это запустит сервер CDP, слушающий порт 9222.

Проверка работы контейнера:

docker ps | grep lightpanda

Шаг 3: Запуск CDP-сервера вручную

Если мы не используем Docker, нужно запустить CDP-сервер вручную:

./lightpanda serve --obey_robots --log_format pretty --log_level info --host 127.0.0.1 --port 9222

Вывод будет примерно таким:

INFO  telemetry : telemetry status . . . . . . . . . . . . .  [+0ms]
      disabled = false

INFO  app : server running . . . . . . . . . . . . . . . .  [+0ms]
      address = 127.0.0.1:9222

TIP

Параметр --obey_robots заставляет Lightpanda соблюдать robots.txt, что является базовым правилом вежливости при парсинге.

Шаг 4: Написание скрипта Puppeteer

Напишем наш первый скрипт для парсинга. Предположим, вы уже установили puppeteer-core в директории проекта:

npm install puppeteer-core

Создайте файл crawler.js:

'use strict'

import puppeteer from 'puppeteer-core';

// Подключение к CDP-серверу Lightpanda через WebSocket
const browser = await puppeteer.connect({
  browserWSEndpoint: "ws://127.0.0.1:9222",
});

// Создание контекста браузера и страницы
const context = await browser.createBrowserContext();
const page = await context.newPage();

// Переход на целевую страницу
await page.goto('https://demo-browser.lightpanda.io/amiibo/', {waitUntil: "networkidle0"});

// Извлечение всех ссылок со страницы
const links = await page.evaluate(() => {
  return Array.from(document.querySelectorAll('a')).map(row => {
    return row.getAttribute('href');
  });
});

console.log('Собрано ссылок:');
links.forEach(link => console.log(link));

// Сбор метрик времени загрузки страницы
const metrics = await page.metrics();
console.log('\nПоказатели страницы:');
console.log('Время выполнения скрипта:', metrics.ScriptDuration, 'ms');
console.log('Количество узлов DOM:', metrics.Nodes);

// Очистка ресурсов
await page.close();
await context.close();
await browser.disconnect();

Запуск скрипта:

node crawler.js

TIP

Если вы запустили Lightpanda через Docker, измените browserWSEndpoint на ws://localhost:9222.

Шаг 5: Ощутите скорость

Официальные данные Lightpanda показывают:

  • Скорость: в 11 раз быстрее Chrome
  • Память: в 9 раз меньше Chrome
  • Запуск: мгновенный (запуск безголового Chrome занимает несколько секунд)

Проведем тест производительности. Убедитесь, что Lightpanda запущен:

./lightpanda serve --host 127.0.0.1 --port 9222

Затем напишите скрипт для массового парсинга:

'use strict'

import puppeteer from 'puppeteer-core';

const browser = await puppeteer.connect({
  browserWSEndpoint: "ws://127.0.0.1:9222",
});

const context = await browser.createBrowserContext();
const page = await context.newPage();

// Пакетный сбор данных с нескольких страниц
const urls = [
  'https://demo-browser.lightpanda.io/amiibo/',
  'https://demo-browser.lightpanda.io/campfire-commerce/',
  'https://demo-browser.lightpanda.io/hacker-news-top-stories/',
];

const startTime = Date.now();

for (const url of urls) {
  console.log(`\nПарсинг: ${url}`);
  const pageStart = Date.now();

  await page.goto(url, {waitUntil: "networkidle0"});

  const title = await page.title();
  console.log(`Заголовок: ${title}`);
  console.log(`Затрачено времени: ${Date.now() - pageStart}ms`);
}

console.log(`\nОбщее время: ${Date.now() - startTime}ms`);

await browser.disconnect();

Запуск:

node batch-crawler.js

Вы заметите, что даже при пакетной загрузке отклик Lightpanda остается очень быстрым.

Шаг 6: Продвинутые возможности — скриншоты

Lightpanda также поддерживает создание скриншотов:

'use strict'

import puppeteer from 'puppeteer-core';

const browser = await puppeteer.connect({
  browserWSEndpoint: "ws://127.0.0.1:9222",
});

const context = await browser.createBrowserContext();
const page = await context.newPage();

// Установка размера вьюпорта
await page.setViewport({ width: 1280, height: 720 });

await page.goto('https://demo-browser.lightpanda.io/campfire-commerce/', {waitUntil: "networkidle0"});

// Сохранение скриншота
await page.screenshot({ path: 'screenshot.png', fullPage: true });

console.log('Скриншот сохранен в screenshot.png');

await browser.disconnect();

Устранение типичных проблем

Q1: Порт 9222 уже занят

Симптом: ошибка "Address already in use" при запуске.

Решение:

# Проверить, кто использует порт
lsof -i :9222

# Или сменить порт
./lightpanda serve --port 9223
# И обновить адрес в скрипте: ws://127.0.0.1:9223

Q2: Ошибка поддержки Web API

Симптом: ошибка "XXX is not defined" при выполнении скрипта.

Решение: Lightpanda сейчас находится в стадии Beta, покрытие Web API не полное. Создайте issue на GitHub, команда обычно отвечает быстро.

Q3: Ошибка запуска Docker-контейнера

Симптом: ошибка при docker run или мгновенное завершение работы контейнера.

Решение:

# Проверить логи контейнера
docker logs lightpanda

# Если конфликт портов, измените их
docker run -d --name lightpanda -p 9322:9222 lightpanda/browser:nightly

Q4: Puppeteer не подключается

Симптом: Error: Protocol error (Target.attachToTarget): No target with given id.

Решение: Убедитесь, что CDP-сервер Lightpanda запущен и его версия совместима с Puppeteer. Попробуйте перезапустить:

# Убить старый процесс
pkill lightpanda
# Запустить снова
./lightpanda serve --port 9222

Q5: Таймаут загрузки страницы

Симптом: TimeoutError: Navigation timeout.

Решение:

# Увеличить время ожидания
await page.goto(url, { timeout: 60000 });
# Или заменить networkidle0 на domcontentloaded
await page.goto(url, { waitUntil: "domcontentloaded" });

Q6: Использование Playwright вместо Puppeteer

Симптом: Непонятно, как интегрировать.

Решение: Способ подключения Playwright аналогичен Puppeteer:

import { chromium } from 'playwright';

const browser = await chromium.connectOverCDP('ws://127.0.0.1:9222');
// Далее использование идентично

Дополнительное чтение / Продвинутые темы

1. Сборка из исходников

Если вы хотите изучить внутреннее устройство Lightpanda или внести свой вклад, вы можете собрать проект сами:

# Установите Zig 0.15.2
curl -L https://ziglang.org/download/0.15.2/zig-linux-x86_64-0.15.2.tar.xz | tar xJ

# Клонируйте проект
git clone https://github.com/lightpanda-io/browser.git
cd browser

# Скомпилируйте
zig build run

2. Интеграция с Playwright

Lightpanda официально поддерживает Playwright. Установка:

npm install playwright
import { firefox } from 'playwright';

const browser = await firefox.connectOverCDP('ws://127.0.0.1:9222');
// Использование как в обычном Playwright

WARNING

Поддержка Playwright имеет ограничения: так как Lightpanda постоянно добавляет новые Web API, Playwright может выбирать другие пути выполнения, что приведет к неработоспособности некоторых скриптов.

3. Прокси и перехват сети

Lightpanda поддерживает прокси и перехват сетевых запросов:

# Указание прокси при запуске
./lightpanda serve --proxy http://proxy:8080

4. Пользовательские HTTP-заголовки

await page.setExtraHTTPHeaders({
  'X-Custom-Header': 'value'
});

5. Web Platform Tests

Команда Lightpanda постоянно проводит тесты на совместимость с Web API. Вы можете проверить поддержку конкретных API на wpt.live.

Updated March 15, 2026