Skip to content

ブラウザ

Glac がホストする Chromium(および Lightpanda)のセッションを、Playwright、Puppeteer など任意の Chrome DevTools Protocol クライアントから外部で操作します。クライアントの接続中は稼働し、最後のクライアントが離れるとページを保ったままスリープします。まだ利用できません。

更新

**未公開。**Glac のブラウザはまだ利用できません。これらのページは、構築中の仕組みを公開前に説明したもので、公開までに変わることがあります。

Glac のブラウザは、タスクごとに専用のマシンで専用の Chromium を動かし、それをコードが Chrome DevTools Protocol(CDP)で外から操作します。Playwright、Puppeteer など、どの CDP クライアントでも使えます。ブラウザ 1 つが 1 つのセッションです。API 呼び出しで作成するとアドレスが返り、クライアントはそこに接続します。このアドレスが認証情報になります。

セッションは、クライアントが接続している間は、ページが何をしていても稼働中です。最後のクライアントが離れると数秒後に、タブ、ページ、その Cookie を保持したままスリープします。次の接続で、元の状態のまま復帰します。

ブラウザを使う場面

  • Web を閲覧するエージェント:自前の CDP クライアントや、アドレスで指定したブラウザを操作する MCP サーバーを介して、Web ページを読んで操作するモデル。
  • 本物のブラウザが必要なページ:スクレイピング、テスト、フォーム入力。ジョブごと、ユーザーごとに、名前で作成して名前で見つけ直せるセッション。
  • 状態を保つブラウザ:ターンの合間にスリープするセッションはページとログイン状態を保持し、元の状態で復帰します。プロファイルを使えば、ログイン状態を新しいセッションに引き継げます。
  • 作業中のエージェントを見る:セッションのページを任意のブラウザでライブ表示。見るだけの人向けのアドレスも用意。

仕組み

  1. 作成。POST /v1/browsers で稼働中のセッションを作成すると、その CDP アドレス cdp_url が返ります。セッションには名前を付けられます。プロジェクトにすでにあるセッションの名前で作成すると、そのセッションがスリープしたところから復帰して返されます。
  2. **接続。**クライアントは cdp_url に接続します。Playwright なら connectOverCDP、Puppeteer なら browserURL を指定した connect を使います。
  3. **スリープ。**最後の接続が閉じてから sleep_after_seconds 秒後(指定しなければ 10 秒)に、セッションはメモリとディスクを保持したままスリープします。接続があれば復帰します。
  4. 終了。DELETE /v1/browsers/{id} で、ページごとセッションを終了します。

セッションの種類は次の 3 つです。

  • chromium-headless(デフォルト):Chromium のヘッドレスシェル。画面のないブラウザ。
  • chromium:フル機能の Chromium。人が見られる 1280×800 の画面付き。
  • lightpanda:Lightpanda。プログラムのために作られたブラウザで、ページのスクリプトを実行して DOM を保持しますが、レイアウトエンジンを持ちません。そのためスクリーンショットと PDF にはページのテキストしか含まれません。

セッションはどれも 1 vCPU、2 GiB のマシンです。その ID はサンドボックスの ID で、セッションとは、プラットフォームがそのために作ったサンドボックスです。そのため /v1/sandboxes/{id}/… の呼び出しはすべてセッションにも使え、中でコマンドを実行したり、ファイルを読んだりできます。通常のサンドボックスは、何を実行してもセッションにはなりません。

クライアントの接続

CDP クライアントに必要なのは cdp_url だけで、これは認証情報です。持っている人なら誰でもブラウザを操作できます。Playwright は chromium.connectOverCDP(cdp_url)(Python では connect_over_cdp)、Puppeteer は puppeteer.connect({ browserURL: cdp_url }) で接続します。このとき Playwright 側にブラウザは必要ありません。

CDP=$(glac browsers create --name agent-42)       # prints the session's CDP address, and nothing else
npx @playwright/mcp --cdp-endpoint "$CDP"          # an agent's browser tools, driving the session
from glac import Glac

glac = Glac()
with glac.browsers.create(name="agent-42") as session:   # deleted when the block ends
    browser = session.connect()                          # Playwright, connected over CDP
    page = browser.contexts[0].pages[0]
    page.goto("https://example.com")

POST /v1/browsers/{id}/rotate-url は、セッションに新しいアドレスを発行します。古いアドレスはそれ以降拒否され、そのアドレスで入った接続はすぐに切断されます(新しいアドレス)。

コマンドラインには glac browsers があり、Python と TypeScript の SDK には、すべての呼び出しを備えた glac.browsers があります。Go、Rust、Java の SDK ではセッションの作成、取得、終了ができ、MCP サーバーではセッションを開く、一覧表示する、閉じることができます(browser_open、browser_list、browser_close)。コマンドライン、Python SDK、MCP サーバーを参照してください。

料金

セッションは、ほかのすべてのインスタンスと同じく、使用したキューブのリソースで定価どおりに課金されます。対象は、処理している間の CPU 時間、稼働中のメモリ(128 MiB 刻み、ミリ秒単位)、送信トラフィックです。セッション独自の料金はありません。セッションは 1 vCPU、2 GiB で、サイトのブラウザのページにある料金計算ツールは、指定しない限り、稼働中の半分の時間 vCPU が使われているものとして計算します。

計測項目 料金 無料プラン(1 日あたり) 有料プランの月間利用枠
CPU(処理している間) 100万 CPU ミリ秒あたり $0.01 100万 CPU ミリ秒 6000万 CPU ミリ秒
メモリ(稼働中と、メモリ上で一時停止している間) 1 GiB-時間あたり $0.008 6 GiB-時間 250 GiB-時間
スリープ中のインスタンスが保持するデータ(メモリと固有のディスク) 1 GB-月あたり $0.02 合計 15 GB(スナップショットとドライブを含む) 20 GB-月(スナップショットとドライブを含む)
インターネットへの送信トラフィック(北米から) 1 GB あたり $0.004 3 GB(リージョンを問わず) 1 TB(リージョンを問わず)
インターネットへの送信トラフィック(ヨーロッパから) 1 GB あたり $0.004
インターネットへの送信トラフィック(アジア太平洋から) 1 GB あたり $0.01
  • スリープ中のセッションは、スリープ中のサンドボックスと同じように課金されます。マシンのメモリ上で一時停止している間は、そのメモリに稼働中と同じ料金がかかります。メモリが保存された後は、保持するもの(メモリと、ディスクのうちセッション固有の部分)に 1 GB-月あたり $0.02 がかかるだけです。
  • 無料プランでは、CPU とメモリは、アカウントで動くほかのすべてのものと合わせて、無料プランのその日のクォータから差し引かれます。有料プランでは、その月の利用枠から、それを超えると残高から差し引かれます。料金とプランを参照してください。

Lightpanda

種類が lightpanda のセッションは、プログラムのために作られたブラウザ Lightpanda 1.0.2 を実行します。ページを取得し、スクリプトを実行して DOM を保持しますが、レイアウトエンジンはありません。何も見せる必要がない場面でページを読んで操作するのに使い、見せる必要があるなら chromium-headless を使ってください。作成、料金、制限はほかの種類と同じで、cdp_url と ws_url も同じように使えます。Lightpanda はオープンソース(AGPL-3.0)で、開発元がリリースしたままの形でセッション内で動きます。

接続したら、Lightpanda の開発元が示しているとおり、自分でコンテキストとページを作って使ってください。接続時にすでに開いているページは Lightpanda の起点で、そこからはナビゲーションできません。

const browser = await chromium.connectOverCDP(session.cdp_url);   // Playwright
const context = await browser.newContext();
const page = await context.newPage();
await page.goto("https://example.com");
console.log(await page.textContent("h1"));

Puppeteer では、puppeteer.connect({ browserURL: session.cdp_url })(または browserWSEndpoint: session.ws_url)で接続し、続けて (await browser.pages())[0] か browser.newPage() を使います。

プラットフォームのエッジ経由で、Playwright 1.64 と Puppeteer 24.43 を使って試した結果は次のとおりです。

動作するもの 動作しないもの
ページの読み込み、リンク、戻る・進む(goto、ページ遷移するクリック、waitForURL と waitForNavigation、goBack、reload)。ページの読み取り(content、textContent、innerText、evaluate、$$eval、ロケーター、waitForSelector) 1 つの接続での 2 つ目のページ(1 つ開いた後の newPage:TargetAlreadyLoaded)と、2 つ目のコンテキスト(Cannot have more than one browser context at a time)。接続ごとに別のブラウザなので、別のページには別の接続を開く(同時に最大 16)
入力とクリック(fill、type、keyboard.type、click) スクリーンキャスト(Page.startScreencast):配信するものがなく、chromium-headless を示すエラーですぐに拒否される
Cookie(context.cookies、addCookies/page.cookies、setCookie)、追加のヘッダー(setExtraHTTPHeaders)、クライアントが応答するリクエスト(Playwright の page.route、Puppeteer のリクエストインターセプト) ライブビューとプロファイル(400 kind_unsupported)
setViewportSize と setViewport、ページ自身のスクリプトより前に実行するスクリプト(addInitScript、evaluateOnNewDocument)、exposeFunction、コンソールメッセージ、Puppeteer の accessibility.snapshot() 16 MiB を超えるブラウザへのメッセージ
スクリーンショットと PDF(page.screenshot()、page.pdf()):ページのテキストのみ(下記参照)

**スクリーンショットや PDF に含まれるのはページのテキストだけです。**Lightpanda にはレイアウトエンジンがないため、page.screenshot() はページのテキストをブロックごとに縦に並べた PNG を、page.pdf() はそのテキストの PDF を返します。どちらも人が見るページの姿ではなく、レイアウトも画像もページ独自の色もありません。描画されたページが必要なら chromium-headless を使います。

制限

  • 同時稼働数:セッションは 1 vCPU、2 GiB のサンドボックス 1 つとして、アカウントのサンドボックスやキューブのインスタンスと合わせ、プランで同時に稼働できる上限に数えられます(無料プランでは 5。制限を参照)。
  • 常に閉じているポート:ネットワークルールの設定にかかわらず、セッションのトラフィックがポート 25、465、587(メール)や、マイニングプールが待ち受けるポート(3333、4444、5555、7777、14444、45700)に届くことはありません。
  • プロキシ:有料プランでは、セッションの Web トラフィックを自前の HTTP プロキシ経由で送信できます(自前のプロキシ)。無料プランでは使えません(403 proxy_not_on_plan)。

次のステップ

  • セッション:呼び出し、セッションが持つもの、名前、スリープと復帰、新しいアドレス、自前のプロキシ。
  • ライブビューとプロファイル:セッションのページをライブで見る方法と、プロファイルに保持されるログイン状態。
ナビゲーション

キーワードを入力して検索…

↑↓ 移動↵ 選択Esc 閉じる