lightpanda-browser は何をしますか?
Lightpanda — Zig製のヘッドレスブラウザをAIエージェントと自動化向けに活用するためのエキスパートスキル。Chrome比でメモリ9分の1、速度11倍。インストール、CLI、CDPサーバー、Playwright/Puppeteer統合、Webスクレイピングに対応。
目次
概要
Lightpandaは、ヘッドレスブラウザをZigで一から実装したプロジェクトです。以下の特徴があります:
- 高速: Chromeより11倍高速なページ読み込み
- 低メモリ: メモリ使用量はChromeの9分の1
- API互換: CDP(Chrome DevTools Protocol)対応により、PlaywrightやPuppeteerと連携可能
- 軽量バイナリ: 単一バイナリで配布
インストール
各プラットフォーム向け
# Linux (x86_64)
curl -L https://github.com/lightpanda-io/lightpanda/releases/latest/download/lightpanda-linux-x86_64.tar.gz | tar xz
sudo mv lightpanda /usr/local/bin/
# macOS (Apple Silicon)
brew install lightpanda-io/tap/lightpanda
# Windows (WSL2推奨)
# WSL2上のUbuntuでLinux版インストール手順を実行
Docker
docker pull lightpanda/lightpanda:latest
docker run -p 9222:9222 lightpanda/lightpanda
CLIの使い方
基本的なページ取得
# URLを指定してHTMLをコンソールに出力
lightpanda https://example.com
# ファイルに保存
lightpanda --output page.html https://example.com
オプション
-l, --listen <addr> CDPサーバーのリッスンアドレス(例: 0.0.0.0:9222)
-o, --output <file> 出力ファイル
-t, --timeout <ms> タイムアウト(ミリ秒)
-w, --wait <ms> ページ読み込み後の待機時間
-h, --help ヘルプを表示
CDPサーバー
CDPサーバーを起動して、外部ツールからブラウザ制御を行うことができます。
# デフォルトポート(9222)で起動
lightpanda --listen 0.0.0.0:9222
# 特定のポートで起動
lightpanda --listen localhost:8080
CDPエンドポイント
サーバー起動後、以下のエンドポイントにアクセス可能:
| エンドポイント | 説明 |
|---|---|
/json/version | ブラウザバージョン情報 |
/json | 利用可能なターゲット一覧 |
/devtools/browser/<id> | WebSocket接続エンドポイント |
Playwright/Puppeteerとの連携
Playwright(Python)
import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
browser = await p.chromium.connect_over_cdp("http://localhost:9222")
page = await browser.new_page()
await page.goto("https://example.com")
title = await page.title()
print(f"ページタイトル: {title}")
await browser.close()
asyncio.run(main())
Puppeteer(Node.js)
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.connect({
browserURL: 'http://localhost:9222'
});
const page = await browser.newPage();
await page.goto('https://example.com');
const title = await page.title();
console.log(`ページタイトル: ${title}`);
await browser.close();
})();
Webスクレイピング
静的ページのスクレイピング
# シンプルな取得
lightpanda --output response.html https://target-site.com
# 待機時間を設定してJavaScript実行後に取得
lightpanda --wait 3000 --output page.html https://single-page-app.com
JavaScriptによる動的コンテンツの抽出
CDPサーバー経由で接続し、ページ内のJavaScriptを実行:
import asyncio
from playwright.async_api import async_playwright
async def scrape_dynamic():
async with async_playwright() as p:
browser = await p.chromium.connect_over_cdp("http://localhost:9222")
page = await browser.new_page()
await page.goto("https://dynamic-site.com")
# JavaScriptを実行してデータを抽出
data = await page.evaluate("""() => {
return {
title: document.title,
items: Array.from(document.querySelectorAll('.item')).map(el => el.textContent)
}
}""")
print(data)
await browser.close()
asyncio.run(scrape_dynamic())
設定オプション
環境変数による設定:
| 環境変数 | 説明 | デフォルト値 |
|---|---|---|
LIGHTPANDA_PORT | CDPサーバーのポート | 9222 |
LIGHTPANDA_HOST | リッスンアドレス | 127.0.0.1 |
LIGHTPANDA_TIMEOUT | デフォルトタイムアウト(ms) | 30000 |
LIGHTPANDA_USER_AGENT | カスタムUser-Agent | なし |
LIGHTPANDA_HEADLESS | ヘッドレスモード(常にtrue) | true |
トラブルシューティング
よくある問題
-
ポートが既に使用されています
- 別のポートを指定するか、既存のプロセスを終了してください。
lsof -i :9222 kill <PID> -
Playwright/Puppeteerが接続できない
- CDPサーバーが起動しているか確認:
curl http://localhost:9222/json/version - ファイアウォール設定を確認。
- CDPサーバーが起動しているか確認:
-
ページが正しくレンダリングされない
- 特にSPAの場合は
--waitオプションで待機時間を増やしてください。 - JavaScriptエラーが原因の場合、ブラウザのコンソールログを確認。
- 特にSPAの場合は
-
バイナリが見つからない
- パスが通っているか確認:
which lightpanda - またはインストールディレクトリから直接実行。
- パスが通っているか確認:
サポート
詳細は Lightpanda公式ドキュメント を参照してください。 バグ報告や機能リクエストは GitHub Issues まで。