> ## Documentation Index
> Fetch the complete documentation index at: https://docs.firecrawl.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Node

> Firecrawl Node SDK を使って、Web サイトをスクレイピング、クロールし、構造化データを抽出します。

Node.js アプリケーションから、単一ページをスクレイピングし、サイト全体をクロールし、URL をマップできます。SDK がページネーション、リトライ、非同期ジョブのポーリングを処理するため、返されたデータの利用に集中できます。

<div id="installation">
  ## インストール
</div>

npm で SDK をインストールします:

```js Node theme={null}
// npm install firecrawl

import { Firecrawl } from 'firecrawl';

const firecrawl = new Firecrawl({
  // 開始にAPIキーは不要です — より高いrate limitsのために追加してください:
  // apiKey: "fc-YOUR-API-KEY",
});
```

<div id="usage">
  ## 使い方
</div>

1. [firecrawl.dev](https://firecrawl.dev) から API キーを取得します。
2. 環境変数 `FIRECRAWL_API_KEY` に API キーを設定するか、`Firecrawl` クラスにパラメータとして渡します。

<Note>
  **API キーがありませんか？** キーなしで `Firecrawl` を作成し、キー不要の Free ティアで `scrape`、`search`、`interact` を利用できます (IP ごとにレート制限あり — [Rate Limits](/ja/rate-limits#keyless-no-api-key) を参照) 。それ以外のすべてのメソッドにはキーが必要です。
</Note>

エラーハンドリング付きで SDK を使用する例は次のとおりです:

```js Node theme={null}
import { Firecrawl } from 'firecrawl';

const firecrawl = new Firecrawl({apiKey: "fc-YOUR_API_KEY"});

// ウェブサイトをスクレイピングする
const scrapeResponse = await firecrawl.scrape('https://firecrawl.dev', {
  formats: ['markdown', 'html'],
});

console.log(scrapeResponse)

// ウェブサイトをクロールする
const crawlResponse = await firecrawl.crawl('https://firecrawl.dev', {
  limit: 100,
  scrapeOptions: {
    formats: ['markdown', 'html'],
  }
});

console.log(crawlResponse)
```

<div id="scraping-a-url">
  ### URLをスクレイピングする
</div>

`scrape` メソッドを使用すると、単一のURLをスクレイピングして構造化されたページデータを取得できます。

```js Node theme={null}
// ウェブサイトをスクレイピングする：
const scrapeResult = await firecrawl.scrape('firecrawl.dev', { formats: ['markdown', 'html'] });

console.log(scrapeResult)
```

<div id="parsing-uploaded-files">
  ### アップロードしたファイルの解析
</div>

URLを指定してスクレイピングする代わりに、ローカルファイル (`html`、`pdf`、`docx`、`xlsx` など) をアップロードする場合は `parse` を使用します。
`parse` は `changeTracking` や、`screenshot`、`branding`、`actions`、`waitFor`、`location`、`mobile` などのブラウザ専用オプションには対応していません。

```js Node theme={null}
const parsed = await firecrawl.parse(
  {
    data: "<html><body><h1>Node Parse</h1></body></html>",
    filename: "upload.html",
    contentType: "text/html",
  },
  {
    formats: ["markdown"],
  },
);

console.log(parsed.markdown);
```

<div id="crawling-a-website">
  ### Web サイトをクロールする
</div>

`crawl` メソッドを使用すると、単一の URL から Web サイト全体をクロールできます。ページ数の上限を設定したり、特定のドメインのみに制限したり、出力フォーマットを選択したりできます。自動ページネーションと手動ページネーションについては、[Pagination](#pagination) を参照してください。

```js Node theme={null}
const job = await firecrawl.crawl('https://docs.firecrawl.dev', { limit: 5, pollInterval: 1, timeout: 120 });
console.log(job.status);
```

<div id="sitemap-only-crawl">
  ### サイトマップのみクロール
</div>

`sitemap: "only"` を使用すると、サイトマップ内の URL のみをクロールします (開始URLは常に対象に含まれ、HTML リンクの探索は行われません) 。

```js Node theme={null}
const job = await firecrawl.crawl('https://docs.firecrawl.dev', {
  sitemap: 'only',
  limit: 25,
});
console.log(job.status, job.data.length);
```

<div id="start-a-crawl">
  ### クロールを開始
</div>

`startCrawl` を使うと、完了を待たずにクロールを開始できます。このメソッドは、後からポーリングできるジョブ ID を返します。完了まで待って処理をブロックしたい場合は、代わりに `crawl` を使用してください。ページングの挙動と制限については [Pagination](#pagination) を参照してください。

```js Node theme={null}
const { id } = await firecrawl.startCrawl('https://docs.firecrawl.dev', { limit: 10 });
console.log(id);
```

<div id="checking-crawl-status">
  ### クロールのステータスを確認する
</div>

`checkCrawlStatus` メソッドを使うと、クロールがまだ実行中か、完了したか、失敗したかを確認できます。`startCrawl` から返されたジョブ ID を渡します。

```js Node theme={null}
const status = await firecrawl.getCrawlStatus("<crawl-id>");
console.log(status);
```

<div id="cancelling-a-crawl">
  ### クロールのキャンセル
</div>

実行中のクロールは、`cancelCrawl` メソッドでキャンセルできます。`startCrawl` が返すジョブ ID を渡してください。

```js Node theme={null}
const ok = await firecrawl.cancelCrawl("<crawl-id>");
console.log("キャンセル済み:", ok);
```

<div id="mapping-a-website">
  ### Web サイトのマッピング
</div>

Web サイト上のすべての URL を検出するには、`map` メソッドを使用します。開始 URL を渡すと、検出されたページの一覧が返されます。

```js Node theme={null}
const res = await firecrawl.map('https://firecrawl.dev', { limit: 10 });
console.log(res.links);
```

<div id="crawling-a-website-with-websockets">
  ### WebSockets を使って Web サイトをクロールする
</div>

`crawlUrlAndWatch` メソッドを使うと、クロール結果をリアルタイムで受け取れます。ジョブ全体の完了を待たずに、各ページがクロールされるたびに受け取れます。

```js Node theme={null}
import { Firecrawl } from 'firecrawl';

const firecrawl = new Firecrawl({ apiKey: 'fc-YOUR-API-KEY' });

// クロールを開始して監視する
const { id } = await firecrawl.startCrawl('https://mendable.ai', {
  excludePaths: ['blog/*'],
  limit: 5,
});

const watcher = firecrawl.watcher(id, { kind: 'crawl', pollInterval: 2, timeout: 120 });

watcher.on('document', (doc) => {
  console.log('DOC', doc);
});

watcher.on('error', (err) => {
  console.error('ERR', err?.error || err);
});

watcher.on('done', (state) => {
  console.log('DONE', state.status);
});

// 監視を開始（WS と HTTP のフォールバック）
await watcher.start();
```

<div id="pagination">
  ### ページネーション
</div>

Firecrawl の /crawl と batch の各エンドポイントは、追加のデータがある場合に `next` URL を返します。Node SDK はデフォルトで自動ページネーションを行い、すべてのドキュメントを集約します。その場合は `next` が `null` になります。自動ページネーションを無効にしたり、上限を設定したりできます。

<div id="crawl">
  #### クロール
</div>

最も手軽なのはウェイター方式の `crawl` を使うことです。あるいはジョブを開始して、ページングを手動で行ってください。

<div id="simple-crawl-auto-pagination-default">
  ##### シンプルなクロール (自動ページ送り、デフォルト)
</div>

* 既定のフローは[ウェブサイトのクロール](#crawling-a-website)を参照してください。

<div id="manual-crawl-with-pagination-control-single-page">
  ##### ページネーション制御付きの手動クロール (単一ページ)
</div>

* ジョブを開始し、`autoPaginate: false` を指定して1ページずつ取得します。

```js Node theme={null}
const crawlStart = await firecrawl.startCrawl('https://docs.firecrawl.dev', { limit: 5 });
const crawlJobId = crawlStart.id;

const crawlSingle = await firecrawl.getCrawlStatus(crawlJobId, { autoPaginate: false });
console.log('単一ページのクロール:', crawlSingle.status, 'ドキュメント数:', crawlSingle.data.length, '次:', crawlSingle.next);
```

<div id="manual-crawl-with-limits-auto-pagination-early-stop">
  ##### 制限付きの手動クロール (自動ページネーション + 早期停止)
</div>

* 自動ページネーションはオンのまま、`maxPages`、`maxResults`、または `maxWaitTime` で早めに停止します。

```js Node theme={null}
const crawlLimited = await firecrawl.getCrawlStatus(crawlJobId, {
  autoPaginate: true,
  maxPages: 2,
  maxResults: 50,
  maxWaitTime: 15,
});
console.log('クロール制限:', crawlLimited.status, 'ドキュメント数:', crawlLimited.data.length, '次:', crawlLimited.next);
```

<div id="batch-scrape">
  #### バッチスクレイプ
</div>

waiter メソッド `batchScrape` を使うか、ジョブを開始して手動でページングします。

<div id="simple-batch-scrape-auto-pagination-default">
  ##### シンプルなバッチスクレイプ (自動ページネーション、デフォルト)
</div>

* 既定のフローは [Batch Scrape](/ja/features/batch-scrape) を参照してください。

<div id="manual-batch-scrape-with-pagination-control-single-page">
  ##### ページネーション制御による手動バッチスクレイプ (単一ページ)
</div>

* ジョブを開始し、`autoPaginate: false` を指定して1ページずつ取得します。

```js Node theme={null}
const batchStart = await firecrawl.startBatchScrape([
  'https://docs.firecrawl.dev',
  'https://firecrawl.dev',
], { options: { formats: ['markdown'] } });
const batchJobId = batchStart.id;

const batchSingle = await firecrawl.getBatchScrapeStatus(batchJobId, { autoPaginate: false });
console.log('バッチ単一ページ:', batchSingle.status, 'ドキュメント数:', batchSingle.data.length, '次:', batchSingle.next);
```

<div id="manual-batch-scrape-with-limits-auto-pagination-early-stop">
  ##### 制限付きの手動バッチスクレイプ (自動ページネーション＋早期停止)
</div>

* 自動ページネーションは有効のまま、`maxPages`、`maxResults`、または `maxWaitTime` で早期停止します。

```js Node theme={null}
const batchLimited = await firecrawl.getBatchScrapeStatus(batchJobId, {
  autoPaginate: true,
  maxPages: 2,
  maxResults: 100,
  maxWaitTime: 20,
});
console.log('バッチ制限:', batchLimited.status, 'ドキュメント:', batchLimited.data.length, '次:', batchLimited.next);
```

<div id="browser">
  ## ブラウザ
</div>

クラウドブラウザセッションを起動し、リモートでコードを実行します。

<div id="create-a-session">
  ### セッションを作成する
</div>

```js Node theme={null}
import { Firecrawl } from 'firecrawl';

const firecrawl = new Firecrawl({ apiKey: "fc-YOUR-API-KEY" });

const session = await firecrawl.browser({ ttl: 600 });
console.log(session.id);          // セッションID
console.log(session.cdpUrl);      // wss://cdp-proxy.firecrawl.dev/cdp/...
console.log(session.liveViewUrl); // https://liveview.firecrawl.dev/...
```

<div id="execute-code">
  ### コードを実行
</div>

```js Node theme={null}
const result = await firecrawl.browserExecute(session.id, {
  code: 'await page.goto("https://news.ycombinator.com")\ntitle = await page.title()\nprint(title)',
});
console.log(result.result); // "Hacker News"
```

Pythonの代わりにJavaScriptを実行する場合:

```js Node theme={null}
const result = await firecrawl.browserExecute(session.id, {
  code: 'await page.goto("https://example.com"); const t = await page.title(); console.log(t);',
  language: "node",
});
```

agent-browserでbashを実行します:

```js Node theme={null}
const result = await firecrawl.browserExecute(session.id, {
  code: "agent-browser open https://example.com && agent-browser snapshot",
  language: "bash",
});
```

<div id="profiles">
  ### プロファイル
</div>

セッションをまたいでブラウザの状態 (クッキー、localStorage など) を保存し、再利用できます。

```js Node theme={null}
const session = await firecrawl.browser({
  ttl: 600,
  profile: {
    name: "my-profile",
    saveChanges: true,
  },
});
```

<div id="connect-via-cdp">
  ### CDP 経由で接続する
</div>

Playwright をフルに制御するには、CDP URL を使用して直接接続します。

```js Node theme={null}
import { chromium } from "playwright";

const browser = await chromium.connectOverCDP(session.cdpUrl);
const context = browser.contexts()[0];
const page = context.pages()[0] || await context.newPage();

await page.goto("https://example.com");
console.log(await page.title());

await browser.close();
```

<div id="list-close-sessions">
  ### セッションの一覧表示と終了
</div>

```js Node theme={null}
// アクティブなセッションを一覧表示する
const { sessions } = await firecrawl.listBrowsers({ status: "active" });
for (const s of sessions) {
  console.log(s.id, s.status, s.createdAt);
}

// セッションを閉じる
await firecrawl.deleteBrowser(session.id);
```

<div id="scrape-bound-interactive-session">
  ### スクレイピングに紐づくインタラクティブセッション
</div>

スクレイピングジョブIDを使うと、そのスクレイピングで再現されたページコンテキストに対して続けて操作できます。

* `interact(jobId, {...})` は、スクレイピングに紐づくブラウザセッション内でコードを実行します。
* 最初の `interact` 呼び出しでは、スクレイピングコンテキストからセッションが自動的に初期化されます。
* 同じジョブIDに対する以降の `interact` 呼び出しでは、そのままライブのブラウザ状態が再利用されます。
* `stopInteraction(jobId)` は、完了後にインタラクティブセッションを停止します。

```js Node theme={null}
const doc = await firecrawl.scrape("https://example.com", {
  actions: [{ type: "click", selector: "a[href='/pricing']" }],
});

const scrapeJobId = doc.metadata?.scrapeId;
if (!scrapeJobId) throw new Error("Missing scrape job id");

const run = await firecrawl.interact(scrapeJobId, {
  code: "console.log(await page.url())",
  language: "node",
  timeout: 60,
});
console.log(run.stdout);

await firecrawl.stopInteraction(scrapeJobId);
```

<div id="error-handling">
  ## エラーハンドリング
</div>

この SDK は Firecrawl API から返されるあらゆるエラーに対して、わかりやすい例外を送出します。上記の例に示すように、呼び出しは `try/catch` ブロックで囲んでください。

> Firecrawl API キーが必要な AI agent ですか？自動オンボーディング手順については、[firecrawl.dev/agent-onboarding/SKILL.md](https://www.firecrawl.dev/agent-onboarding/SKILL.md) を参照してください。
