{"_id":"chrome-extension-automator","_rev":"7-e4c8b39117aee7fc120e4652f0867bdd","name":"chrome-extension-automator","dist-tags":{"latest":"1.0.6"},"versions":{"1.0.0":{"name":"chrome-extension-automator","version":"1.0.0","_id":"chrome-extension-automator@1.0.0","maintainers":[{"name":"ru1n114514","email":"chengrui191954@gmail.com"}],"dist":{"shasum":"424be179d03d9742884aa6c8a96c45ed5d5c8af8","tarball":"https://registry.npmjs.org/chrome-extension-automator/-/chrome-extension-automator-1.0.0.tgz","fileCount":14,"integrity":"sha512-oJ8ha6suH7JZAg10gnMvQwhwYK85dhJ/u0fa7Z285WbZPaeioY3njFCDRFLpc/wwX3pDEwRvs0kEcnHPrRJBjg==","signatures":[{"sig":"MEYCIQD5LxwZwROhlPBz+xXoYW4vywjvip4/32RjbpVO5T/RKAIhALpUlHboJ9L3eut4VgFl7DzSjq4Tp/3gLoSPYldg9sYg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83723},"main":"src/index.js","type":"module","engines":{"node":">=18.0.0"},"scripts":{"start":"node src/index.js","example":"node src/example.js"},"_npmUser":{"name":"ru1n114514","email":"chengrui191954@gmail.com"},"_npmVersion":"10.9.4","description":"Chrome扩展自动化测试框架 - 驱动无头浏览器加载扩展并记录网络流量","directories":{},"_nodeVersion":"22.21.1","dependencies":{"axios":"^1.13.6","ethers":"^6.16.0","puppeteer":"^24.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-extension-automator_1.0.0_1774604346984_0.8322706161183615","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"chrome-extension-automator","version":"1.0.1","_id":"chrome-extension-automator@1.0.1","maintainers":[{"name":"ru1n114514","email":"chengrui191954@gmail.com"}],"bin":{"chrome-extension-automator":"src/cli.js"},"dist":{"shasum":"0463b87ac6a6610b05c104537230604f0ab5b6be","tarball":"https://registry.npmjs.org/chrome-extension-automator/-/chrome-extension-automator-1.0.1.tgz","fileCount":14,"integrity":"sha512-otoVJKr0If8Wvbq9avEA8/RKtLosswK1BDKi9v0g/A+6/tDhjgXwORGWEh9qL62hxKdeAAaviTLtAkbTtomSIg==","signatures":[{"sig":"MEUCICnKISeIdznWfH67GhccP2osoCE8ojvXmPNXoM0SFmQLAiEA2ohfw1yTSQvSDSFpdJAd0QA2cJ8/LqyqmoZhWr+LZiI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87567},"main":"src/index.js","type":"module","engines":{"node":">=18.0.0"},"scripts":{"start":"node src/index.js","example":"node src/example.js"},"_npmUser":{"name":"ru1n114514","email":"chengrui191954@gmail.com"},"_npmVersion":"10.9.4","description":"Chrome扩展自动化测试框架 - 驱动无头浏览器加载扩展并记录网络流量","directories":{},"_nodeVersion":"22.21.1","dependencies":{"axios":"^1.13.6","ethers":"^6.16.0","puppeteer":"^24.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-extension-automator_1.0.1_1774605143862_0.5564258699905762","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"chrome-extension-automator","version":"1.0.2","_id":"chrome-extension-automator@1.0.2","maintainers":[{"name":"ru1n114514","email":"chengrui191954@gmail.com"}],"bin":{"chrome-extension-automator":"src/cli.js"},"dist":{"shasum":"221d4c3015cd2e7d47023df443be997885563006","tarball":"https://registry.npmjs.org/chrome-extension-automator/-/chrome-extension-automator-1.0.2.tgz","fileCount":14,"integrity":"sha512-OhKi92iYTurXSdYdd5Y2WMsTL0ZqJhNooSlx73K4KRxEdnpaxPwnQyQDoFTjXGgHj4ogFOpN4pQ+ARTn+uoj0A==","signatures":[{"sig":"MEYCIQDcQH7IJC4Yow25Q2AsKndmiLK+D+gb5dxE0NJx5HHcCAIhAJuoaOcvbCOZTVTXBsjYtq8CDrNpQd7vf/m/f9exjymg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87587},"main":"src/index.js","type":"module","engines":{"node":">=18.0.0"},"scripts":{"start":"node src/index.js","example":"node src/example.js"},"_npmUser":{"name":"ru1n114514","email":"chengrui191954@gmail.com"},"_npmVersion":"10.9.4","description":"Chrome扩展自动化测试框架 - 驱动无头浏览器加载扩展并记录网络流量","directories":{},"_nodeVersion":"22.21.1","dependencies":{"axios":"^1.13.6","ethers":"^6.16.0","puppeteer":"^24.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-extension-automator_1.0.2_1774606753897_0.12092097344429131","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"chrome-extension-automator","version":"1.0.3","_id":"chrome-extension-automator@1.0.3","maintainers":[{"name":"ru1n114514","email":"chengrui191954@gmail.com"}],"bin":{"chrome-extension-automator":"src/cli.js"},"dist":{"shasum":"e37791167dfd593b49b327f9cb576588770d988e","tarball":"https://registry.npmjs.org/chrome-extension-automator/-/chrome-extension-automator-1.0.3.tgz","fileCount":14,"integrity":"sha512-ERnK2LdYn0nbkhSyGVJXATeF+9tt1K+ipxiLyPWKzCHNZ2QZHSR2fZr2MXiI4gUtyVCbNhdNG3/I2YNVmW5Onw==","signatures":[{"sig":"MEQCIHxCEbS2tUPf50oydd2n1C8EppZpVrCmJT9oOYY5K/tCAiAR537ogZrAkQv9OKkp+ybLOi9yX4CJ9EZyeqsyao2oKQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95050},"main":"src/index.js","type":"module","engines":{"node":">=18.0.0"},"scripts":{"start":"node src/index.js","example":"node src/example.js"},"_npmUser":{"name":"ru1n114514","email":"chengrui191954@gmail.com"},"_npmVersion":"10.9.4","description":"Chrome扩展自动化测试框架 - 驱动无头浏览器加载扩展并记录网络流量","directories":{},"_nodeVersion":"22.21.1","dependencies":{"axios":"^1.13.6","ethers":"^6.16.0","puppeteer":"^24.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-extension-automator_1.0.3_1774607488017_0.083644869992191","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"chrome-extension-automator","version":"1.0.4","_id":"chrome-extension-automator@1.0.4","maintainers":[{"name":"ru1n114514","email":"chengrui191954@gmail.com"}],"bin":{"chrome-extension-automator":"src/cli.js"},"dist":{"shasum":"cdae4aaff6e2dc4378c290e93f2f7a7362459369","tarball":"https://registry.npmjs.org/chrome-extension-automator/-/chrome-extension-automator-1.0.4.tgz","fileCount":14,"integrity":"sha512-iHXqrlto65QHS+RDMt/fWP5jTbu+k1SCegeCPCb9rdbKfsWIQYEkD90ub2pYuXJoilmFhPRk0XQL8sspewwWmA==","signatures":[{"sig":"MEYCIQCaeadMk3Z3BDrgGtisNcv3pg+znSysrDwQR80l9bf2fQIhAN+wyC2T4On8Zm7dN27N85aemIrrJaRvSTvKocGELLLJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":94996},"main":"src/index.js","type":"module","engines":{"node":">=18.0.0"},"scripts":{"start":"node src/index.js","example":"node src/example.js"},"_npmUser":{"name":"ru1n114514","email":"chengrui191954@gmail.com"},"_npmVersion":"10.9.4","description":"Chrome扩展自动化测试框架 - 驱动无头浏览器加载扩展并记录网络流量","directories":{},"_nodeVersion":"22.21.1","dependencies":{"axios":"^1.13.6","ethers":"^6.16.0","puppeteer":"^24.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-extension-automator_1.0.4_1774609449603_0.5285812875706049","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"chrome-extension-automator","version":"1.0.5","_id":"chrome-extension-automator@1.0.5","maintainers":[{"name":"ru1n114514","email":"chengrui191954@gmail.com"}],"bin":{"chrome-extension-automator":"src/cli.js"},"dist":{"shasum":"69948f094518febae2dc389e115e12ae42783421","tarball":"https://registry.npmjs.org/chrome-extension-automator/-/chrome-extension-automator-1.0.5.tgz","fileCount":14,"integrity":"sha512-gXqI3So0CGKGox9HIp0xJ4NbDEmYr/BrVzYNn47omzsexxnIreVqDm3Qm4lxXdbCZ/dgdjjd79dwsgsFKHJucg==","signatures":[{"sig":"MEUCIQDqjIUng6btJmQukZWzPTiPXOzK6fMlK1lHfmbVW1NV4QIgB5LADscQDvG/ao3/eUIqKd49+M5sUu97ixlpt1H6zLg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71647},"main":"src/index.js","type":"module","engines":{"node":">=18.0.0"},"scripts":{"start":"node src/index.js","example":"node src/example.js"},"_npmUser":{"name":"ru1n114514","email":"chengrui191954@gmail.com"},"_npmVersion":"10.9.4","description":"Chrome扩展自动化测试框架 - 驱动无头浏览器加载扩展并记录网络流量","directories":{},"_nodeVersion":"22.21.1","dependencies":{"axios":"1.13.6","ethers":"6.16.0","puppeteer":"24.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-extension-automator_1.0.5_1775636568324_0.019008296542137204","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"chrome-extension-automator","version":"1.0.6","description":"Chrome扩展自动化测试框架 - 驱动无头浏览器加载扩展并记录网络流量","type":"module","main":"src/index.js","bin":{"chrome-extension-automator":"src/cli.js"},"scripts":{"start":"node src/index.js","example":"node src/example.js"},"dependencies":{"axios":"1.13.6","ethers":"6.16.0","puppeteer":"24.0.0"},"engines":{"node":">=18.0.0"},"_id":"chrome-extension-automator@1.0.6","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-fPfjttfdogbq7XH4U7feOhQtXJIF43zvlS8qjG53WWB5dv0n5dIWEC8y1lcTmbolv31NPPhCdSmdWTtm+qH7NQ==","shasum":"6931b71e7ba8f5b8df746691f0da834e61fe9f45","tarball":"https://registry.npmjs.org/chrome-extension-automator/-/chrome-extension-automator-1.0.6.tgz","fileCount":14,"unpackedSize":71700,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD4cS0ojwQTX+52ndKmN8DI+NRHBUqUJ3gZjNFuUgis+QIhAOpjlX4lepZYW6KgNB5EGgxKAk9tymTA3s5xRKEFwO7k"}]},"_npmUser":{"name":"ru1n114514","email":"chengrui191954@gmail.com"},"directories":{},"maintainers":[{"name":"ru1n114514","email":"chengrui191954@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/chrome-extension-automator_1.0.6_1780044685933_0.019952687875372854"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-27T09:39:06.983Z","modified":"2026-05-29T08:51:26.187Z","1.0.0":"2026-03-27T09:39:07.118Z","1.0.1":"2026-03-27T09:52:23.997Z","1.0.2":"2026-03-27T10:19:14.060Z","1.0.3":"2026-03-27T10:31:28.147Z","1.0.4":"2026-03-27T11:04:09.816Z","1.0.5":"2026-04-08T08:22:48.482Z","1.0.6":"2026-05-29T08:51:26.081Z"},"description":"Chrome扩展自动化测试框架 - 驱动无头浏览器加载扩展并记录网络流量","maintainers":[{"name":"ru1n114514","email":"chengrui191954@gmail.com"}],"readme":"# Chrome Extension Automator\n\nChrome 扩展自动化测试框架 —— 驱动无头浏览器加载扩展、执行自动化操作、记录所有网络流量域名。\n\n## 架构\n\n```\nsrc/\n├── index.js                  # 主入口 & Automator 编排器\n├── browser/\n│   └── launcher.js           # 浏览器启动（Puppeteer + 扩展加载）\n├── network/\n│   └── monitor.js            # 网络流量监控（CDP 全目标监听）\n├── extension/\n│   └── resolver.js           # 扩展页面解析（popup/options/SW/offscreen）\n├── modules/\n│   ├── base.js               # 自动化模块基类\n│   └── example.js            # 示例模块\n├── reporter/\n│   └── domain-reporter.js    # 域名报告生成\n└── example.js                # 完整使用示例\n```\n\n## 核心特性\n\n- **全目标网络监听**：通过 CDP 协议附加到所有 Chrome 目标，包括：\n  - 普通页面 (`page`)\n  - Service Worker (`service_worker`)\n  - Offscreen 文档 (`other`)\n  - Background Page (`background_page`)\n- **模块化设计**：继承 `BaseModule` 即可编写自动化操作模块\n- **扩展页面解析**：自动发现扩展 ID，提供 popup/options/offscreen 等页面的访问\n- **域名报告**：自动收集所有网络请求的目标域名，按来源类型分组\n\n## 安装\n\n```bash\nnpm install\n```\n\n## 快速开始\n\n```bash\nnode src/example.js /path/to/your/extension\n```\n\n## 编程使用\n\n```js\nimport { Automator, BaseModule } from './src/index.js';\n\n// 1. 编写自定义模块\nclass MyModule extends BaseModule {\n  name = 'my-module';\n\n  async run() {\n    // this.browser      - Puppeteer Browser 实例\n    // this.resolver      - ExtensionResolver 实例\n    // this.extensionId   - 扩展 ID\n\n    const popup = await this.resolver.openPopup(this.extensionId);\n    await popup.click('#some-button');\n    await popup.close();\n  }\n}\n\n// 2. 配置并运行\nconst automator = new Automator({\n  extension: { path: '/path/to/extension' },\n  browser:   { headless: 'new' },\n  reporter:  { format: 'text' },      // 'json' | 'text'\n});\n\nautomator.use(MyModule);\n\nconst report = await automator.run();\n// report.domains          - 域名列表\n// report.domainsByTargetType - 按来源分组的域名\n```\n\n## 配置项\n\n| 路径 | 说明 | 默认值 |\n|------|------|--------|\n| `extension.path` | 扩展目录路径（必填） | `''` |\n| `browser.headless` | 无头模式 | `'new'` |\n| `browser.args` | 额外 Chrome 参数 | `[]` |\n| `browser.executablePath` | Chrome 路径 | `''`（使用内置） |\n| `browser.timeout` | 启动超时(ms) | `30000` |\n| `network.targetTypes` | 监控的目标类型 | `['page','service_worker','other','background_page']` |\n| `reporter.format` | 报告格式 | `'json'` |\n| `reporter.outputPath` | 报告输出路径 | `''`（控制台输出） |\n\n## 自定义模块\n\n继承 `BaseModule`，实现 `run()` 方法：\n\n```js\nimport { BaseModule } from './src/modules/base.js';\n\nclass ClickAllButtonsModule extends BaseModule {\n  name = 'click-all-buttons';\n\n  async setup() {\n    // 可选：初始化逻辑\n  }\n\n  async run() {\n    const popup = await this.resolver.openPopup(this.extensionId);\n    const buttons = await popup.$$('button');\n    for (const btn of buttons) {\n      await btn.click();\n      await new Promise(r => setTimeout(r, 500));\n    }\n    await popup.close();\n  }\n\n  async teardown() {\n    // 可选：清理逻辑\n  }\n}\n```\n\n模块执行顺序与 `automator.use()` 的注册顺序一致。\n","readmeFilename":"README.md"}