用途
Chrome 浏览器自动化技能,专门用于 Chrome 浏览器自动化操作。当用户需要自动化浏览器操作、网页测试、数据抓取或 UI 自动化时使用。
主要能力
技能覆盖以下功能方向:
- 网页自动化操作
- E2E 测试
- 网页截图和 PDF 生成
- 表单自动填充
- 动态网页数据抓取
- 性能测试和监控
典型使用场景包括:自动化登录网站并抓取数据、批量截取网页截图、自动化测试购物流程、监控网站性能指标、自动填写表单并提交、生成网页 PDF 报告。
技术栈
自动化工具:Puppeteer(Chrome DevTools Protocol)、Playwright(跨浏览器自动化)、Selenium(经典自动化框架)、Cypress(现代 E2E 测试框架)。
辅助工具:puppeteer-extra(Puppeteer 插件系统)、puppeteer-stealth(反检测插件)、chrome-launcher(Chrome 启动器)。
核心功能
-
页面导航:使用 puppeteer.launch 启动浏览器,可配置 headless 与 slowMo;通过 page.goto 导航并设置 waitUntil(如 networkidle2);支持 goBack、goForward、reload,最后 browser.close 关闭。
-
元素操作:点击元素(page.click)、输入文本(page.type)、选择下拉框(page.select)、上传文件(uploadFile)、等待元素(waitForSelector)、获取单个元素文本($eval)与多个元素($$eval)。
-
表单自动化:填写文本输入框、选择单选按钮与复选框、选择下拉框、填写日期与文本域、提交表单并等待导航完成。
-
数据抓取:启动浏览器、导航、等待内容加载(waitForSelector),通过 $$eval 批量提取标题、价格、图片、链接等字段,最后关闭浏览器返回数据。
-
截图和 PDF:支持全页截图(fullPage)、元素截图,以及生成 PDF(可设置 format、printBackground、margin)。
-
性能监控:通过 page.tracing 开始/停止追踪,获取 page.metrics 指标,并通过 Performance API 读取 loadTime、domReady、firstPaint 等数据。
高级功能
- 拦截和修改请求:setRequestInterception 后按资源类型 abort 或 continue,可修改请求头。
- 模拟移动设备:使用 puppeteer.devices(如 iPhone 12)配合 page.emulate。
- 处理弹窗:监听 dialog 事件并 accept 或 dismiss;处理新窗口通过 targetcreated 事件。
- Cookie 管理:setCookie、cookies、deleteCookie。
- 执行 JavaScript:page.evaluate 在页面上下文执行代码、传递参数,exposeFunction 向页面暴露函数。
E2E 测试示例
提供 Playwright 测试示例(登录成功与登录失败提示,使用 test、expect、page.fill、page.click、toHaveURL、toContainText 等)与 Cypress 测试示例(购物车添加与删除商品,使用 cy.visit、cy.get、within、should 等)。
反检测技术
使用 puppeteer-extra 与 puppeteer-extra-plugin-stealth,配合 --no-sandbox、--disable-setuid-sandbox、--disable-blink-features=AutomationControlled 等启动参数;设置真实 User-Agent、视口大小,并通过 evaluateOnNewDocument 隐藏 webdriver 标识。
最佳实践
- 错误处理:try/catch/finally 结构,出错时截图保存现场,finally 中关闭浏览器。
- 并发控制:使用 p-limit 限制并发数(示例为 5),每个任务独立开页并在 finally 中关闭页面。
- 资源优化:拦截并阻止 image、stylesheet、font 等资源,设置默认超时与导航超时。
资源清理原则(强制)
所有涉及浏览器的 cron 任务完成后,必须自动关闭 Chrome 进程。任务结束时必须执行:
pkill -f chrome
pkill -f chromium
或在 JavaScript/TypeScript 中显式关闭浏览器:
await browser.close();
const { execSync } = require('child_process');
execSync('pkill -f chrome');
原因:避免内存泄漏和资源占用,防止 Gateway CPU 100% 过载。
注意事项
- 遵守网站的 robots.txt 和服务条款
- 控制请求频率,避免对服务器造成压力
- 使用代理池避免 IP 被封
- 妥善处理验证码和登录
- 定期更新浏览器版本
- 注意内存泄漏,及时关闭页面和浏览器
- 使用无头模式提高性能
- 保存日志和错误截图便于调试
限制
资料未提供该技能的安装命令、依赖版本、收费方式、平台支持范围等具体信息,暂未提供。