Agent Skills by ALSEL
Anthropic ClaudeLLM・AI開発⭐ リポ 0品質スコア 50/100

scraper-builder

PlaywrightとTypeScriptを使用したPageObjectパターンのWebスクレイパープロジェクトを、Docker対応の完全な形で生成するようAIエージェントを導きます。エージェントによるブラウザ上のサイト解析を通じ、セレクターの自動検出もサポートします。スクレイピング・データ抽出・自動化の実装に活用できます。

description の原文を見る

Guide AI agents to generate complete PageObject pattern web scraper projects using Playwright and TypeScript with Docker deployment. Supports agent-browser site analysis for automated selector discovery. Keywords: scraper, playwright, pageobject, web scraping, docker, typescript, data extraction, automation.

SKILL.md 本文

Scraper Builder

PageObject パターンと Playwright、TypeScript を使用した完全に動作する Web スクレイパープロジェクトを生成します。このスキルは、型付きデータ抽出、Docker デプロイメント、サイト分析用オプション agent-browser 統合を備えたサイト固有のスクレイパーを生成します。

このスキルを使用する場合

以下の場合にこのスキルを使用してください:

  • データ抽出のためのサイト固有の Web スクレイパーを構築する
  • ターゲット Web サイト用の PageObject クラスを生成する
  • Docker サポート付きの完全なスクレイパープロジェクトをスキャフォルディングする
  • agent-browser を使用してサイトを分析し、セレクターを自動生成する
  • 再利用可能なスクレイピングコンポーネント(ページネーション、データテーブル)を作成する

以下の場合はこのスキルを使用しないでください:

  • API クライアントを構築する場合(HTTP クライアントライブラリを直接使用してください)
  • QA/E2E テストスイートを記述する場合(テスト用パターンで Playwright test runner を使用してください)
  • ドメイン全体をマスクロール、スパイダリングする場合(Crawlee または Scrapy を使用してください)
  • 認証バイパスまたは CAPTCHA 解決が必要なサイトをスクレイプする場合

コアプリンシパル

1. PageObject カプセル化

ターゲットサイトの各ページは 1 つの PageObject クラスにマップされます。ロケーターはコンストラクタで定義され、スクレイピングロジックはメソッド内に存在します。ページオブジェクトにはアサーション或いはビジネスロジックが含まれることはありません — データを抽出して返すだけです。

2. セレクターの堅牢性

セレクターの優先順位:data-testid > id > セマンティック HTML (rolearia-label) > 構造化 CSS クラス > テキストコンテンツ。位置セレクター (nth-child) と レイアウト依存パスは避けてください。完全な階層については references/playwright-selectors.md を参照してください。

3. コンポジションよりも継承

再利用可能な UI パターン(ページネーション、データテーブル、検索バー)は、ページオブジェクトがプロパティを介して構成するコンポーネントクラスとしてモデル化されます。BasePage のみが継承を使用します — その他はすべて構成します。

4. 型付きデータ抽出

スクレイプされたすべてのデータは、検証のために Zod スキーマを通じてフローします。これは、サイトがマークアップを変更した場合(セレクターの漂流)を、ダウンストリームではなく抽出時にキャッチします。assets/templates/data-schema.ts.md を参照してください。

5. Docker 優先デプロイメント

生成されたプロジェクトには、Microsoft の公式 Playwright イメージを使用した Dockerfile と、出力データとデバッグスクリーンショット用のボリュームマウント付き docker-compose.yml が含まれています。これにより、マシン全体で一貫したブラウザー環境が保証されます。

生成モード

モード 1: Agent-Browser 分析

agent-browser を使用してターゲットサイトをナビゲートし、アクセシビリティツリースナップショットをキャプチャし、セレクターを自動的に検出します。agent に agent-browser CLI へのアクセスがある場合、これが推奨されるモードです。

前提条件: agent-browser がまだインストールされていない場合は、まずスキルとして追加してください:

npx skills add vercel-labs/agent-browser

ワークフロー:

# 1. ターゲットページを開く
agent-browser open https://example.com/products

# 2. 要素参照付きのインタラクティブスナップショットをキャプチャする
agent-browser snapshot -i --json > snapshot.json

# 3. フォーカスされた分析のためにスコープされたセクションをキャプチャする
agent-browser snapshot -i --json -s "main" > main-content.json
agent-browser snapshot -i --json -s "nav" > navigation.json

# 4. 動的動作をテストする(ページネーション、load-more)
agent-browser click @e3
agent-browser wait --load networkidle
agent-browser snapshot -i --json > after-click.json

# 5. 完了時に閉じる
agent-browser close

エージェントがスナップショットで行うこと:

  1. 要素参照 (@e1@e2 など) とそのロールをパースする
  2. セマンティック目的(ナビゲーション、データ表示、フォーム、アクション)別に要素をグループ化する
  3. データ要素をフィールド(タイトル、価格、画像など)にマップする
  4. 検出されたセレクターを使用して PageObject クラスを生成する
  5. ページネーションと動的ロードパターンを識別する

完全なワークフローリファレンスについては、references/agent-browser-workflow.md を参照してください。

モード 2: 手動説明

ユーザーはターゲットサイトのページ構造を説明し、エージェントはそれをページオブジェクトにマップします。エージェントは構造化された質問をします:

  1. スクレイプするページは? — URL またはページタイプのリスト
  2. 抽出するデータは? — ページごとのフィールド名と予期されるタイプ
  3. データはどのようにページネーションされますか? — ページ番号付け、load-more、無限スクロール、または単一ページ
  4. 既知のセレクターは? — ユーザーが既に知っている CSS セレクター、data-testid 値、または XPath

その後、エージェントは以下を行います:

  • 説明を data/site-archetypes.json のサイトアーキタイプに一致させる
  • クラス名と責任を持つページオブジェクトマップを提案する
  • ユーザーが計画を確認した後にコードを生成する

モード 3: 完全なプロジェクトスキャフォルド

1 つの操作で scaffolder スクリプトを使用して完全な実行可能なプロジェクトを生成します:

deno run --allow-read --allow-write scripts/scaffold-scraper-project.ts \
  --name "my-scraper" \
  --url "https://example.com" \
  --pages "ProductListing,ProductDetail" \
  --fields "title,price,image_url,description"

これにより、すべてのソースファイル、構成、Docker セットアップ、および実行準備完了のエントリポイント付きプロジェクトが生成されます。完全なオプションについては、「スクリプトリファレンス」セクションを参照してください。

クイックリファレンス

カテゴリアプローチ詳細
フレームワークPlaywrightplaywright パッケージ、@playwright/test ではない
言語TypeScript厳密モード、ES2022 ターゲット
パターンPageObject1 ページあたり 1 つのクラス、コンポーネントを構成
セレクター堅牢data-testid > id > role > CSS クラス > テキスト
Wait 戦略オートウェイトPlaywright 組み込み、ナビゲーション用に networkidle を追加
検証Zodページオブジェクトの出力タイプごとにスキーマ
出力JSON + CSVストレージユーティリティを介して構成可能
Docker公式イメージmcr.microsoft.com/playwright:v1.48.0-jammy
再試行指数バックオフデフォルト 3 試行、構成可能
スクリーンショットエラー時デバッグ用に screenshots/ に保存

生成プロセス

スクレイパーを生成する場合は、以下のシーケンスに従ってください:

ステップ 1: 要件の収集

ユーザーに以下を求めてください:

  • ターゲットサイト URL
  • 抽出するデータフィールド
  • 期待されるページ/アイテム数
  • 出力形式の優先設定(JSON、CSV、両方)
  • Docker デプロイメントが必要かどうか

ステップ 2: サイトを分析

モード 1 (agent-browser) またはモード 2 (手動説明) を使用して、以下を理解します:

  • ページ構造とナビゲーションフロー
  • データ要素の場所とセレクター戦略
  • ページネーション無限スクロールパターン
  • 動的コンテンツロード動作

ステップ 3: ページオブジェクトマップを設計

以下をリストする計画を作成します:

  • 各 PageObject クラスと URL パターン
  • 必要なコンポーネントクラス(Pagination、DataTable など)
  • ページごとのデータスキーマフィールドとタイプ
  • ページ間のスクレイパーのナビゲーションフロー

ステップ 4: 計画を提示

コードを生成する前に、ページオブジェクトマップをユーザーに表示してください。クラス名、フィールド名、実行フローを含めてください。確認を待ってください。

ステップ 5: コードを生成

assets/templates/ のテンプレートを基盤として使用してください:

  • base-page.ts.md — BasePage 抽象クラス
  • page-object.ts.md — サイト固有のページオブジェクト
  • component.ts.md — 再利用可能なコンポーネント
  • scraper-runner.ts.md — オーケストレーター
  • data-schema.ts.md — Zod 検証スキーマ

ステップ 6: 配信

以下を含む完全なプロジェクトを提供してください:

  • すべてのソースファイル
  • assets/configs/ からの構成ファイル
  • その実行方法を説明する README
  • Docker セットアップ(明確に除外されていない限り)

コードパターン

BasePage

navigate()waitForPageLoad()screenshot()getText() ヘルパーを提供する抽象クラス。すべてのページオブジェクトがこれを拡張します。

export abstract class BasePage {
  constructor(protected readonly page: Page) {}
  async navigate(url: string): Promise<void> { /* ... */ }
  async screenshot(name: string): Promise<void> { /* ... */ }
}

参照: assets/templates/base-page.ts.md

PageObject

ロケーターが readonly プロパティ、型付きデータを返すスクレイプメソッド、マルチページフロー用のナビゲーションメソッドを含むサイト固有のクラス。

export class ProductListingPage extends BasePage {
  readonly productCards: Locator;
  readonly nextButton: Locator;
  async scrapeProducts(): Promise<Product[]> { /* ... */ }
  async goToNextPage(): Promise<boolean> { /* ... */ }
}

参照: assets/templates/page-object.ts.md

Component

親ロケータスコープを受け取り、抽出メソッドを提供する再利用可能な UI パターン(Pagination、DataTable)。

export class Pagination {
  constructor(private page: Page, private scope: Locator) {}
  async hasNextPage(): Promise<boolean> { /* ... */ }
  async goToNext(): Promise<void> { /* ... */ }
}

参照: assets/templates/component.ts.md

ScraperRunner

ブラウザーを起動し、ページオブジェクトを作成し、ページを反復処理し、データを収集し、スキーマで検証し、出力を書き込むオーケストレーター。

export class SiteScraper {
  async run(): Promise<void> {
    const browser = await chromium.launch();
    const page = await browser.newPage();
    // navigate, scrape, validate, write
  }
}

参照: assets/templates/scraper-runner.ts.md

DataSchema

スクレイプされたレコードを検証する Zod スキーマ。セレクターの漂流と不正な形式のデータを抽出時にキャッチします。

export const ProductSchema = z.object({
  title: z.string().min(1),
  price: z.number().positive(),
});

参照: assets/templates/data-schema.ts.md

アンチパターン

アンチパターン問題ソリューション
モノリシックスクレイパーすべてのスクレイピングロジックが 1 つのファイル内ページごとに PageObject クラスに分割
Sleep WaitersetTimeout/固定遅延を使用Playwright オートウェイトと networkidle を使用
未検証パイプライン出力に対するスキーマ検証なしすべてのデータタイプに Zod スキーマを追加
セレクターロッタリー脆い位置セレクター堅牢なセレクター階層を使用
サイレント失敗ログなしでエラーを飲み込む失敗をログし、デバッグスクリーンショットを保存
スロットルなしのクローラーリクエスト間に遅延なし構成可能なリクエスト遅延を追加
ハードコード構成コード内の URL とセレクター環境変数と構成ファイルを使用
再試行ロジックなしリクエストごとに 1 回の試行指数バックオフを実装

拡張されたカタログの例と修正については、references/anti-patterns.md を参照してください。

スクリプトリファレンス

scaffold-scraper-project.ts

完全なスクレイパープロジェクトを生成します:

deno run --allow-read --allow-write scripts/scaffold-scraper-project.ts [options]

Options:
  --name <name>       プロジェクト名(必須)
  --path <path>       ターゲットディレクトリ(デフォルト: ./)
  --url <url>         ターゲットサイトベース URL
  --pages <pages>     カンマ区切りのページ名(例:ProductListing,ProductDetail)
  --fields <fields>   カンマ区切りのデータフィールド(例:title,price,rating)
  --no-docker         Docker セットアップをスキップ
  --no-validation     Zod 検証セットアップをスキップ
  --json              JSON として出力
  -h, --help          ヘルプを表示

Examples:
  # 製品スクレイパーをスキャフォルド
  deno run --allow-read --allow-write scripts/scaffold-scraper-project.ts \
    --name "shop-scraper" --url "https://shop.example.com" \
    --pages "ProductListing,ProductDetail" --fields "title,price,image_url"

  # Docker なしの最小限のスクレイパー
  deno run --allow-read --allow-write scripts/scaffold-scraper-project.ts \
    --name "blog-scraper" --no-docker

generate-page-object.ts

既存プロジェクト用に単一の PageObject クラスを生成します:

deno run --allow-read --allow-write scripts/generate-page-object.ts [options]

Options:
  --name <name>           クラス名(必須)
  --url <url>             ページ URL(ドキュメントコメント用)
  --fields <fields>       カンマ区切りのデータフィールド
  --selectors <json>      フィールドからセレクターへの JSON マップ
  --with-pagination       ページネーションメソッドを含める
  --output <path>         出力ファイルパス(デフォルト: stdout)
  --json                  JSON として出力
  -h, --help              ヘルプを表示

Examples:
  # 既知のセレクター付きページオブジェクトを生成
  deno run --allow-read --allow-write scripts/generate-page-object.ts \
    --name "ProductListing" --url "https://shop.example.com/products" \
    --fields "title,price,rating" \
    --selectors '{"title":".product-title","price":".product-price","rating":".star-rating"}' \
    --with-pagination --output src/pages/ProductListingPage.ts

  # stdout へのクイック生成
  deno run --allow-read scripts/generate-page-object.ts \
    --name "SearchResults" --fields "title,url,snippet"

テンプレートおよびリファレンス

テンプレート(assets/templates/)

テンプレート目的
base-page.ts.mdナビゲーション、スクリーンショット、テキストヘルパー付き抽象 BasePage
page-object.ts.mdロケーターとスクレイプメソッド付きサイト固有のページオブジェクト
component.ts.md再利用可能なコンポーネント:Pagination、DataTable
scraper-runner.ts.mdオーケストレーター:ブラウザー起動、反復、収集、出力
data-schema.ts.mdスクレイプされたデータ検証用 Zod スキーマ

構成(assets/configs/)

構成目的
dockerfile.md公式 Playwright イメージを使用した多段階 Dockerfile
docker-compose.yml.mdデータ/スクリーンショットボリュームマウント付きサービス
tsconfig.json.mdES2022 ターゲット付きの厳密な TypeScript
package.json.mdplaywright、zod、tsx の依存関係
playwright.config.ts.mdスクレイパー用の Playwright 構成

リファレンス(references/)

リファレンス目的
pageobject-pattern.mdスクレイピング向けに適応した PageObject パターン
playwright-selectors.mdセレクター戦略と堅牢性階層
docker-setup.mdDocker 構成とデプロイメント
agent-browser-workflow.mdAgent-browser 分析ワークフロー
anti-patterns.md拡張アンチパターンカタログ

例(assets/examples/)

目的
ecommerce-scraper.md完全なマルチページ製品スクレイパーウォークスルー
multi-page-pagination.mdページネーション処理戦略

データファイル(data/)

ファイル目的
selector-patterns.jsonUI 要素タイプ別に整理された一般的なセレクター
site-archetypes.json一般的なページとフィールド付きの Web サイト構造アーキタイプ

インタラクション例

ユーザー: 「オンライン書店のスクレイパーが必要です。カタログページから本のタイトル、著者、価格、評価を取得したいです。」

エージェントワークフロー:

  1. site-archetypes.json を確認 — ecommerce アーキタイプに一致
  2. ページオブジェクトマップを提案:
    • BookListingPage — ページネーション付きカタログ
    • BookDetailPage — 個別の書籍ページ(詳細スクレイピングが必要な場合)
    • Pagination コンポーネント — 共有ページネーションハンドラー
  3. フィールドマッピング付きの計画を提示:
    • title[itemprop="name"] または .book-title
    • author[itemprop="author"] または .book-author
    • price[itemprop="price"] または .price
    • rating.star-rating または [data-rating]
  4. 確認後、scaffold スクリプトまたは手動コード生成を使用して生成
  5. Docker セットアップと Book タイプの Zod スキーマ付きプロジェクトを配信

統合

このスキルは以下に接続されます:

  • typescript-best-practices — 生成されたコードで使用される TypeScript コーディングパターン
  • devcontainer — 生成されたプロジェクトの開発コンテナーセットアップ
  • agent-browser — サイト分析とセレクター検出(外部ツール)

あなたが行わないこと

このスキルは以下を行いません:

  • 認証またはログインウォールをバイパスする
  • CAPTCHA またはボット検出を解決する
  • JavaScript のみの出力を生成する(常に TypeScript)
  • ドメイン全体をスパイダリングするクローラーを生成する
  • robots.txt に違反するスクレイパーを作成する
  • レート制限された API を処理する(API 作業に HTTP クライアントを使用してください)
  • テストスイートを生成する(QA には Playwright テストパターンを使用してください)

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
jwynia
リポジトリ
jwynia/agent-skills
ライセンス
MIT
最終更新
不明

Source: https://github.com/jwynia/agent-skills / ライセンス: MIT

関連スキル

OpenAILLM・AI開発⭐ リポ 6,054

agent-browser

AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。

by JimmyLv
汎用LLM・AI開発⭐ リポ 1,982

anyskill

AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 1,982

engram

AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 21,584

skyvern

AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。

by Skyvern-AI
汎用LLM・AI開発⭐ リポ 1,149

pinchbench

PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。

by pinchbench
汎用LLM・AI開発⭐ リポ 4,693

openui

OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。

by thesysdev
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: jwynia · jwynia/agent-skills · ライセンス: MIT