在 Manus 中运行任何 Skill
一键导入
一键导入
一键在 Manus 中运行任何 Skill
开始使用web-agent
星标0
分支0
更新时间2026年3月31日 12:19
自然言語で指示した内容をAIがブラウザで自律操作する
安装
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
文件资源管理器
4 个文件SKILL.md
readonly菜单
自然言語で指示した内容をAIがブラウザで自律操作する
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | web-agent |
| description | 自然言語で指示した内容をAIがブラウザで自律操作する |
| mode | agent |
| inputs | [{"name":"url","type":"text","message":"操作対象のURLは?","validate":"^https?://"},{"name":"task","type":"textarea","message":"やりたいことを自然言語で入力してください"}] |
| hooks | {"before":"$TASKP_SKILL_DIR/scripts/chrome.sh","after":"$TASKP_SKILL_DIR/scripts/cleanup.sh"} |
| tools | ["mcp:playwriter"] |
URL: {{url}} タスク: {{task}}
await page.goto("{{url}}", { waitUntil: "domcontentloaded" });
await snapshot({ page });
snapshotの結果でページ上の要素(aria-ref)を確認してから操作を開始する。
ページ全体のsnapshotが大きい場合、locatorでスコープを絞る:
// メインコンテンツだけ取得(サイドバー・ヘッダー・フッターを除外)
await snapshot({ locator: page.locator("main") });
// 特定のフォームやダイアログだけ取得
await snapshot({ locator: page.locator('[role="dialog"]') });
await snapshot({ locator: page.locator("form") });
// キーワードで要素をフィルタリング(最初の10件を返す)
await snapshot({ page, search: /button|submit|login/i });
2回目以降のsnapshotは自動的に差分だけ返す(showDiffSinceLastCallがデフォルトで有効)。
変更がなければ「No changes since last snapshot」と返るので、トークンを無駄にしない。
snapshotで確認したaria-refやlocatorを使って操作する。1操作ずつexecuteを呼ぶこと。
await page.locator("aria-ref=e3").fill("テキスト");
await page.locator("aria-ref=e7").click();
操作後はsnapshotで結果を確認(スコープを絞ること):
await snapshot({ locator: page.locator("main") });
await page.screenshot({ path: "screenshot.png", scale: "css" });
screenshotWithAccessibilityLabels() は使わない(矢印やラベルが入るため)。
ページの状態確認には snapshot() を使うこと。
DOMから必要なデータだけをevaluateで取得する(snapshot不要):
const data = await page.evaluate(() => ({
title: document.title,
links: Array.from(document.querySelectorAll("a")).map(a => ({ text: a.textContent, href: a.href }))
}));
console.log(JSON.stringify(data, null, 2));
snapshot({ locator: page.locator("main") }) を優先。ページ全体の snapshot({ page }) はトークンを大量消費するので初回のみpage.evaluate() を使い、必要な情報だけ返すpage.screenshot({ scale: "css" }) を使う。screenshotWithAccessibilityLabels() は使わない同じサイトで繰り返す操作は、stateにヘルパー関数を定義して再利用する:
state.helpers = {
getProducts: async () => page.evaluate(() =>
Array.from(document.querySelectorAll(".product")).map(p => ({
name: p.querySelector("h2")?.textContent,
price: p.querySelector(".price")?.textContent
}))
),
search: async (query) => {
await page.locator('input[name="q"]').fill(query);
await page.locator('button[type="submit"]').click();
}
};
以降は1行で呼べる(トークン節約):
await state.helpers.search("AI agent");
console.log(JSON.stringify(await state.helpers.getProducts(), null, 2));