Token导航 LogoToken导航TokenDH.com
待分类操作浏览器unknown未标认证来源可访问许可证需确认审计未展示

playwright-scraperPlaywright scraper 测试

Agent Skill

用于辅助测试设计、自动化测试、用例整理和回归验证。它适合让 Agent 编写单元测试、端到端测试、测试计划或根据失败日志定位问题。使用时需要确认项目测试框架、运行命令和夹具数据,避免为了通过测试而改坏真实逻辑;涉及浏览器或外部服务时,应区分本地模拟、测试环境和生产环境。

总安装

367

周安装

15

下载量

119
Local Agent

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:playwright-scraper(Playwright scraper 测试)
来源仓库:https://skills.volces.com
仓库路径:playwright-scraper
安装命令:
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。当前暂无明确安装命令,请以来源页面说明为准。

简介

用于辅助测试设计、自动化测试、用例整理和回归验证。

  • 适合让 Agent 编写单元测试、端到端测试或根据失败日志定位问题。
  • 使用时需确认项目测试框架、运行命令和夹具数据,避免误改真实逻辑。
  • 涉及浏览器或外部服务时,应区分本地模拟、测试环境和生产环境。
  • 建议结合原始 README 进一步核验具体用法和限制条件。

SKILL.md

Playwright 网页爬取技能

功能概述

使用Playwright进行真实浏览器操作,爬取复杂动态网页。

核心能力

  • 真实浏览器操作 - 点击、滚动、输入、等待
  • 处理复杂SPA - 单页应用、多Tab、懒加载
  • AI自动生成脚本 - 无需提前准备,实时分析页面结构
  • 持久化Chrome Profile - 复用登录状态
  • 数据结构化输出 - 自动整理成Markdown/JSON

对比优势

工具局限性Playwright优势
n8n无法处理JS渲染✅ 完整JS渲染支持
Apify需要现成actor✅ AI实时生成脚本
Bright Data按量计费✅ 本地运行,免费

适用场景

  • 公开信息型网站 - 会议日程、展会信息
  • 多Tab懒加载页面 - 需点击切换的内容
  • SPA单页应用 - JavaScript异步加载

不适用场景

  • ⚠️ 反爬机制强的网站 - 需要复杂验证
  • ⚠️ 需多轮调试的场景 - 效率不高
  • ⚠️ 生产环境 - 需要高度稳定性

使用方式

1. 基本爬取(单页面)

官家,请帮我爬取这个页面:https://example.com
等JS渲染完成后提取所有内容
保存成Markdown

2. 多Tab爬取

官家,请爬取MWC巴展议程:
- 页面有5个日期Tab(PRE、MON、TUE、WED、THU)
- 需要点击每个Tab获取数据
- 按日期分别保存

3. 懒加载内容

官家,请爬取这个页面:
- 需要滚动到底部才能加载完整内容
- 等待所有内容加载完成
- 提取所有session数据

技术实现

Playwright核心API

1. 启动浏览器

const { chromium } = require('playwright');

const browser = await chromium.launch({
  headless: false, // 或true
  channel: 'chrome'
});

const context = await browser.newContext({
  viewport: { width: 1920, height: 1080 }
});

const page = await context.newPage();

2. 导航和等待

await page.goto(url, { waitUntil: 'networkidle' });
await page.waitForLoadState('domcontentloaded');
await page.waitForSelector('selector');

3. DOM操作

// 点击
await page.click('button');
await page.click('text=Monday');

// 滚动
await page.evaluate(() => {
  window.scrollTo(0, document.body.scrollHeight);
});

// 等待
await page.waitForTimeout(2000);

4. 数据提取

const data = await page.evaluate(() => {
  const items = Array.from(document.querySelectorAll('.item'));
  return items.map(item => ({
    title: item.querySelector('.title').textContent,
    time: item.querySelector('.time').textContent,
    location: item.querySelector('.location').textContent
  }));
});

5. 持久化Profile

const context = await chromium.launchPersistentContext(
  './user-data',
  { headless: false, channel: 'chrome' }
);

实战案例

案例1:MWC巴展议程爬取

需求

  • 5个日期Tab(PRE、MON、TUE、WED、THU)
  • 每个Tab有懒加载
  • 数据通过JS异步请求

实现步骤

// 1. 导航到页面
await page.goto('https://mwcbarcelona.com/agenda');

// 2. 等待页面加载
await page.waitForLoadState('networkidle');

// 3. 循环处理每个Tab
const tabs = ['PRE', 'MON', 'TUE', 'WED', 'THU'];
for (const tab of tabs) {
  // 点击Tab
  await page.click(`text=${tab}`);

  // 等待内容加载
  await page.waitForTimeout(2000);

  // 滚动到底部(触发懒加载)
  await page.evaluate(() => {
    window.scrollTo(0, document.body.scrollHeight);
  });

  // 等待懒加载完成
  await page.waitForTimeout(3000);

  // 提取数据
  const sessions = await page.evaluate(() => {
    const items = Array.from(document.querySelectorAll('.session'));
    return items.map(item => ({
      title: item.querySelector('.title').textContent,
      time: item.querySelector('.time').textContent,
      location: item.querySelector('.location').textContent,
      speakers: item.querySelector('.speakers').textContent
    }));
  });

  // 保存到文件
  const markdown = sessions.map(s =>
    `## ${s.title}\n- 时间: ${s.time}\n- 地点: ${s.location}\n- 演讲者: ${s.speakers}\n`
  ).join('\n');

  fs.writeFileSync(`mwc-${tab}.md`, markdown);
}

关键点

  • ✅ 等待网络空闲(networkidle)
  • ✅ 点击后等待内容加载
  • ✅ 滚动触发懒加载
  • ✅ 等待懒加载完成
  • ✅ 数据结构化提取

最佳实践

1. 等待策略

// ❌ 不推荐:固定等待
await page.waitForTimeout(5000);

// ✅ 推荐:智能等待
await page.waitForLoadState('networkidle');
await page.waitForSelector('.item', { state: 'visible' });
await page.waitForFunction(() => {
  return document.querySelectorAll('.item').length > 10;
});

2. 错误处理

try {
  await page.click('button');
  await page.waitForSelector('.result', { timeout: 10000 });
} catch (error) {
  console.error('操作失败:', error.message);
  // 截图调试
  await page.screenshot({ path: 'error.png' });
}

3. 性能优化

// 阻止不必要的资源加载
await page.route('**/*.{png,jpg,jpeg,gif,svg}', route => route.abort());
await page.route('**/*.css', route => route.abort());

4. 反爬应对

// 设置用户代理
await page.setExtraHTTPHeaders({
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)...'
});

// 禁用webdriver标识
await page.evaluateOnNewDocument(() => {
  Object.defineProperty(navigator, 'webdriver', {
    get: () => false,
  });
});

调试技巧

1. 截图

await page.screenshot({ path: 'debug.png', fullPage: true });

2. 打印HTML

const html = await page.content();
console.log(html);

3. 打印特定元素

const element = await page.$('.item');
const html = await element.innerHTML();
console.log(html);

4. 控制台日志

page.on('console', msg => {
  console.log('PAGE LOG:', msg.text());
});

注意事项

安全提示

  • ⚠️ 仅爬取公开信息
  • ⚠️ 遵守robots.txt
  • ⚠️ 不要过度请求,避免给服务器造成压力
  • ⚠️ 敏感数据不要保存

法律风险

  • ⚠️ 确保爬取行为合法
  • ⚠️ 不要爬取版权内容
  • ⚠️ 不要绕过付费墙
  • ⚠️ 不要爬取个人隐私数据

技术限制

  • ⚠️ 反爬机制强的网站可能失败
  • ⚠️ 需要复杂验证的平台不适用
  • ⚠️ 页面结构变化需重新调试

安装依赖

npm install playwright
npx playwright install chromium

参考资料


创建时间: 2026-02-27 版本: 1.0.0 维护者: 米粒儿(AI Agent)

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Local Agent

82.3%
按下载量换算98

安全审计

暂无安全审计结果可展示。

权限和风险

操作浏览器

该 Skill 可能涉及浏览器控制能力,使用时可能读取或操作网页内容,需要在受控环境中确认权限边界。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills