@pyrokine/mcp-chrome 1.1.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +103 -53
- package/dist/anti-detection/behavior.d.ts +0 -8
- package/dist/anti-detection/behavior.d.ts.map +1 -1
- package/dist/anti-detection/behavior.js +0 -16
- package/dist/anti-detection/behavior.js.map +1 -1
- package/dist/cdp/client.d.ts +0 -2
- package/dist/cdp/client.d.ts.map +1 -1
- package/dist/cdp/client.js +30 -45
- package/dist/cdp/client.js.map +1 -1
- package/dist/cdp/launcher.d.ts +1 -8
- package/dist/cdp/launcher.d.ts.map +1 -1
- package/dist/cdp/launcher.js +4 -20
- package/dist/cdp/launcher.js.map +1 -1
- package/dist/core/auto-wait.d.ts +2 -2
- package/dist/core/auto-wait.d.ts.map +1 -1
- package/dist/core/auto-wait.js +1 -1
- package/dist/core/auto-wait.js.map +1 -1
- package/dist/core/errors.d.ts +10 -13
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +19 -25
- package/dist/core/errors.js.map +1 -1
- package/dist/core/locator.d.ts +6 -7
- package/dist/core/locator.d.ts.map +1 -1
- package/dist/core/locator.js +77 -31
- package/dist/core/locator.js.map +1 -1
- package/dist/core/retry.d.ts.map +1 -1
- package/dist/core/retry.js +1 -1
- package/dist/core/retry.js.map +1 -1
- package/dist/core/session.d.ts +32 -33
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +154 -114
- package/dist/core/session.js.map +1 -1
- package/dist/core/types.d.ts +4 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +6 -0
- package/dist/core/types.js.map +1 -1
- package/dist/core/unified-session.d.ts +54 -67
- package/dist/core/unified-session.d.ts.map +1 -1
- package/dist/core/unified-session.js +215 -181
- package/dist/core/unified-session.js.map +1 -1
- package/dist/extension/bridge.d.ts +0 -19
- package/dist/extension/bridge.d.ts.map +1 -1
- package/dist/extension/bridge.js +6 -52
- package/dist/extension/bridge.js.map +1 -1
- package/dist/extension/http-server.d.ts +13 -11
- package/dist/extension/http-server.d.ts.map +1 -1
- package/dist/extension/http-server.js +101 -95
- package/dist/extension/http-server.js.map +1 -1
- package/dist/index.js +11 -64
- package/dist/index.js.map +1 -1
- package/dist/tools/browse.d.ts +3 -80
- package/dist/tools/browse.d.ts.map +1 -1
- package/dist/tools/browse.js +135 -291
- package/dist/tools/browse.js.map +1 -1
- package/dist/tools/cookies.d.ts +3 -71
- package/dist/tools/cookies.d.ts.map +1 -1
- package/dist/tools/cookies.js +75 -157
- package/dist/tools/cookies.js.map +1 -1
- package/dist/tools/evaluate.d.ts +3 -52
- package/dist/tools/evaluate.d.ts.map +1 -1
- package/dist/tools/evaluate.js +35 -86
- package/dist/tools/evaluate.js.map +1 -1
- package/dist/tools/extract.d.ts +3 -226
- package/dist/tools/extract.d.ts.map +1 -1
- package/dist/tools/extract.js +98 -170
- package/dist/tools/extract.js.map +1 -1
- package/dist/tools/index.d.ts +9 -9
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +9 -9
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/input.d.ts +3 -258
- package/dist/tools/input.d.ts.map +1 -1
- package/dist/tools/input.js +56 -143
- package/dist/tools/input.js.map +1 -1
- package/dist/tools/logs.d.ts +3 -51
- package/dist/tools/logs.d.ts.map +1 -1
- package/dist/tools/logs.js +47 -108
- package/dist/tools/logs.js.map +1 -1
- package/dist/tools/manage.d.ts +3 -64
- package/dist/tools/manage.d.ts.map +1 -1
- package/dist/tools/manage.js +243 -373
- package/dist/tools/manage.js.map +1 -1
- package/dist/tools/schema.d.ts +16 -182
- package/dist/tools/schema.d.ts.map +1 -1
- package/dist/tools/schema.js +70 -159
- package/dist/tools/schema.js.map +1 -1
- package/dist/tools/wait.d.ts +3 -221
- package/dist/tools/wait.d.ts.map +1 -1
- package/dist/tools/wait.js +74 -145
- package/dist/tools/wait.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
English | [中文](README_zh.md)
|
|
4
4
|
|
|
5
|
-
Chrome browser automation MCP Server with dual-mode architecture: **Extension mode** (recommended) controls your
|
|
5
|
+
Chrome browser automation MCP Server with dual-mode architecture: **Extension mode** (recommended) controls your
|
|
6
|
+
existing browser, **CDP mode** (fallback) launches a dedicated instance.
|
|
6
7
|
|
|
7
8
|
[](LICENSE)
|
|
8
9
|
[](https://nodejs.org/)
|
|
@@ -17,7 +18,8 @@ Chrome browser automation MCP Server with dual-mode architecture: **Extension mo
|
|
|
17
18
|
- **Semantic Targeting**: 11 ways to locate elements (role, text, label, css, css+text combo, xpath, coordinates, etc.)
|
|
18
19
|
- **Auto-Wait**: Built-in clickability and input-ready detection with deadline-based timeout budget
|
|
19
20
|
- **Dual Input Mode**: `precise` (debugger API, bypasses CSP) or `stealth` (JS injection, no debug banner)
|
|
20
|
-
- **Smart Output**: Bare `return` auto-wrapped in IIFE; large results (>100KB) auto-saved to file; `output` writes raw
|
|
21
|
+
- **Smart Output**: Bare `return` auto-wrapped in IIFE; large results (>100KB) auto-saved to file; `output` writes raw
|
|
22
|
+
text for strings
|
|
21
23
|
- **Multi-Server**: Extension auto-discovers and connects to multiple MCP Server instances simultaneously
|
|
22
24
|
- **Anti-Detection**: Optional fingerprint masking and behavior simulation
|
|
23
25
|
- **Structured Errors**: Every error includes code, message, suggestion, and context
|
|
@@ -81,7 +83,8 @@ claude mcp add chrome -- node /path/to/mcp-chrome/dist/index.js
|
|
|
81
83
|
|
|
82
84
|
**Step 3: Connect**
|
|
83
85
|
|
|
84
|
-
The Extension auto-connects to the MCP Server via HTTP/WebSocket (port 19222-19299). Click the toolbar icon to verify
|
|
86
|
+
The Extension auto-connects to the MCP Server via HTTP/WebSocket (port 19222-19299). Click the toolbar icon to verify
|
|
87
|
+
connection status.
|
|
85
88
|
|
|
86
89
|
```
|
|
87
90
|
browse(action="list") // List all tabs
|
|
@@ -91,7 +94,8 @@ extract(type="screenshot")
|
|
|
91
94
|
|
|
92
95
|
### Mode 2: CDP Mode (Fallback)
|
|
93
96
|
|
|
94
|
-
CDP mode launches or connects to a dedicated Chrome instance. Used when the Extension is not installed, or for
|
|
97
|
+
CDP mode launches or connects to a dedicated Chrome instance. Used when the Extension is not installed, or for
|
|
98
|
+
headless/isolated scenarios.
|
|
95
99
|
|
|
96
100
|
```bash
|
|
97
101
|
# Start Chrome with remote debugging
|
|
@@ -103,25 +107,27 @@ browse(action="connect", port=9222)
|
|
|
103
107
|
browse(action="open", url="https://example.com")
|
|
104
108
|
```
|
|
105
109
|
|
|
106
|
-
> When the Extension is connected, all tools use Extension mode automatically. CDP mode activates only when the
|
|
110
|
+
> When the Extension is connected, all tools use Extension mode automatically. CDP mode activates only when the
|
|
111
|
+
> Extension is unavailable.
|
|
107
112
|
|
|
108
113
|
## Available Tools (8 Tools)
|
|
109
114
|
|
|
110
115
|
### browse - Browser Management & Navigation
|
|
111
116
|
|
|
112
|
-
| Action | Description
|
|
113
|
-
|
|
114
|
-
| `launch` | Launch new Chrome instance (CDP mode)
|
|
115
|
-
| `connect` | Connect to running Chrome (CDP mode)
|
|
116
|
-
| `list` | List all pages/tabs
|
|
117
|
-
| `attach` | Attach to a specific page/tab
|
|
118
|
-
| `open` | Navigate to URL
|
|
119
|
-
| `back` | Go back in history
|
|
120
|
-
| `forward` | Go forward in history
|
|
121
|
-
| `refresh` | Reload page
|
|
122
|
-
| `close` | Close browser connection
|
|
123
|
-
|
|
124
|
-
Extension-specific: `list` returns `managed` field (whether tab is in MCP Chrome group) and `isActive` field (whether
|
|
117
|
+
| Action | Description |
|
|
118
|
+
|-----------|---------------------------------------|
|
|
119
|
+
| `launch` | Launch new Chrome instance (CDP mode) |
|
|
120
|
+
| `connect` | Connect to running Chrome (CDP mode) |
|
|
121
|
+
| `list` | List all pages/tabs |
|
|
122
|
+
| `attach` | Attach to a specific page/tab |
|
|
123
|
+
| `open` | Navigate to URL |
|
|
124
|
+
| `back` | Go back in history |
|
|
125
|
+
| `forward` | Go forward in history |
|
|
126
|
+
| `refresh` | Reload page |
|
|
127
|
+
| `close` | Close browser connection |
|
|
128
|
+
|
|
129
|
+
Extension-specific: `list` returns `managed` field (whether tab is in MCP Chrome group) and `isActive` field (whether
|
|
130
|
+
it's the current operation target). `open` auto-creates tab group (cyan color).
|
|
125
131
|
|
|
126
132
|
### input - Keyboard & Mouse Input
|
|
127
133
|
|
|
@@ -137,7 +143,8 @@ Event sequence model supporting arbitrary combinations:
|
|
|
137
143
|
| `type` | Type text |
|
|
138
144
|
| `wait` | Pause between events |
|
|
139
145
|
|
|
140
|
-
Parameters: `humanize` enables Bézier curve movement and random delays. `tabId` targets a specific tab. `frame` targets
|
|
146
|
+
Parameters: `humanize` enables Bézier curve movement and random delays. `tabId` targets a specific tab. `frame` targets
|
|
147
|
+
an iframe (CSS selector or index). Both Extension mode only.
|
|
141
148
|
|
|
142
149
|
### extract - Content Extraction
|
|
143
150
|
|
|
@@ -149,7 +156,8 @@ Parameters: `humanize` enables Bézier curve movement and random delays. `tabId`
|
|
|
149
156
|
| `screenshot` | Take screenshot |
|
|
150
157
|
| `state` | Get page state (URL, title, interactive elements) |
|
|
151
158
|
|
|
152
|
-
Parameters: `output` saves result to file. `tabId` targets a specific tab. `frame` targets an iframe. Both Extension
|
|
159
|
+
Parameters: `output` saves result to file. `tabId` targets a specific tab. `frame` targets an iframe. Both Extension
|
|
160
|
+
mode only.
|
|
153
161
|
|
|
154
162
|
### wait - Wait for Conditions
|
|
155
163
|
|
|
@@ -166,31 +174,31 @@ Parameters: `tabId` targets a specific tab. `frame` targets an iframe. Both Exte
|
|
|
166
174
|
|
|
167
175
|
Execute JavaScript in page context.
|
|
168
176
|
|
|
169
|
-
| Parameter | Description
|
|
170
|
-
|
|
171
|
-
| `script` | JavaScript code (required). Bare `return` statements auto-wrapped in IIFE
|
|
172
|
-
| `args` | Arguments passed to script (script must be a function expression)
|
|
173
|
-
| `mode` | `precise` (default, debugger API) or `stealth` (JS injection)
|
|
174
|
-
| `output` | Save result to file (strings written as raw text, others as JSON)
|
|
175
|
-
| `tabId` | Target a specific tab (Extension mode)
|
|
176
|
-
| `frame` | Target an iframe by CSS selector or index (Extension mode)
|
|
177
|
-
| `timeout` | End-to-end budget (ms)
|
|
177
|
+
| Parameter | Description |
|
|
178
|
+
|-----------|---------------------------------------------------------------------------|
|
|
179
|
+
| `script` | JavaScript code (required). Bare `return` statements auto-wrapped in IIFE |
|
|
180
|
+
| `args` | Arguments passed to script (script must be a function expression) |
|
|
181
|
+
| `mode` | `precise` (default, debugger API) or `stealth` (JS injection) |
|
|
182
|
+
| `output` | Save result to file (strings written as raw text, others as JSON) |
|
|
183
|
+
| `tabId` | Target a specific tab (Extension mode) |
|
|
184
|
+
| `frame` | Target an iframe by CSS selector or index (Extension mode) |
|
|
185
|
+
| `timeout` | End-to-end budget (ms) |
|
|
178
186
|
|
|
179
187
|
Results >100KB are auto-saved to `/tmp/` with a structured hint returned.
|
|
180
188
|
|
|
181
189
|
### manage - Page & Environment Management
|
|
182
190
|
|
|
183
|
-
| Action | Description
|
|
184
|
-
|
|
185
|
-
| `newPage` | Create new page/tab
|
|
186
|
-
| `closePage` | Close page
|
|
187
|
-
| `clearCache` | Clear cache/cookies/storage
|
|
188
|
-
| `viewport` | Set viewport size
|
|
189
|
-
| `userAgent` | Set User-Agent
|
|
190
|
-
| `emulate` | Device emulation (iPhone, iPad, etc.)
|
|
191
|
-
| `inputMode` | Query or set input mode (`precise` / `stealth`)
|
|
192
|
-
| `stealth` | Inject anti-detection scripts
|
|
193
|
-
| `cdp` | Send raw CDP command (advanced, e.g. `Runtime.evaluate`)
|
|
191
|
+
| Action | Description |
|
|
192
|
+
|--------------|----------------------------------------------------------|
|
|
193
|
+
| `newPage` | Create new page/tab |
|
|
194
|
+
| `closePage` | Close page |
|
|
195
|
+
| `clearCache` | Clear cache/cookies/storage |
|
|
196
|
+
| `viewport` | Set viewport size |
|
|
197
|
+
| `userAgent` | Set User-Agent |
|
|
198
|
+
| `emulate` | Device emulation (iPhone, iPad, etc.) |
|
|
199
|
+
| `inputMode` | Query or set input mode (`precise` / `stealth`) |
|
|
200
|
+
| `stealth` | Inject anti-detection scripts |
|
|
201
|
+
| `cdp` | Send raw CDP command (advanced, e.g. `Runtime.evaluate`) |
|
|
194
202
|
|
|
195
203
|
### logs - Browser Logs
|
|
196
204
|
|
|
@@ -199,7 +207,8 @@ Results >100KB are auto-saved to `/tmp/` with a structured hint returned.
|
|
|
199
207
|
| `console` | Console logs (with level filter) |
|
|
200
208
|
| `network` | Network request logs (with URL filter) |
|
|
201
209
|
|
|
202
|
-
Parameters: `output` saves result to file. `tabId` targets a specific tab (Extension mode). `frame` is not applicable
|
|
210
|
+
Parameters: `output` saves result to file. `tabId` targets a specific tab (Extension mode). `frame` is not applicable
|
|
211
|
+
for logs.
|
|
203
212
|
|
|
204
213
|
### cookies - Cookie Management
|
|
205
214
|
|
|
@@ -216,37 +225,76 @@ All tools use a unified `Target` type for element location:
|
|
|
216
225
|
|
|
217
226
|
```typescript
|
|
218
227
|
// By accessibility (recommended - most stable)
|
|
219
|
-
{
|
|
228
|
+
{
|
|
229
|
+
role: "button", name
|
|
230
|
+
:
|
|
231
|
+
"Submit"
|
|
232
|
+
}
|
|
220
233
|
|
|
221
234
|
// By text content
|
|
222
|
-
{
|
|
235
|
+
{
|
|
236
|
+
text: "Click here", exact
|
|
237
|
+
:
|
|
238
|
+
true
|
|
239
|
+
}
|
|
223
240
|
|
|
224
241
|
// By form label
|
|
225
|
-
{
|
|
242
|
+
{
|
|
243
|
+
label: "Email"
|
|
244
|
+
}
|
|
226
245
|
|
|
227
246
|
// By placeholder
|
|
228
|
-
{
|
|
247
|
+
{
|
|
248
|
+
placeholder: "Enter your name"
|
|
249
|
+
}
|
|
229
250
|
|
|
230
251
|
// By title attribute
|
|
231
|
-
{
|
|
252
|
+
{
|
|
253
|
+
title: "Close dialog"
|
|
254
|
+
}
|
|
232
255
|
|
|
233
256
|
// By alt text (images)
|
|
234
|
-
{
|
|
257
|
+
{
|
|
258
|
+
alt: "Profile picture"
|
|
259
|
+
}
|
|
235
260
|
|
|
236
261
|
// By test ID
|
|
237
|
-
{
|
|
262
|
+
{
|
|
263
|
+
testId: "submit-button"
|
|
264
|
+
}
|
|
238
265
|
|
|
239
266
|
// By CSS selector
|
|
240
|
-
{
|
|
267
|
+
{
|
|
268
|
+
css: "#login-form .submit-btn"
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// Disambiguate multiple matches (0-based)
|
|
272
|
+
{
|
|
273
|
+
css: ".ant-select-input", nth
|
|
274
|
+
:
|
|
275
|
+
1
|
|
276
|
+
}
|
|
241
277
|
|
|
242
278
|
// By CSS + text (filter by text content)
|
|
243
|
-
{
|
|
279
|
+
{
|
|
280
|
+
css: "button", text
|
|
281
|
+
:
|
|
282
|
+
"Submit", exact
|
|
283
|
+
:
|
|
284
|
+
true
|
|
285
|
+
}
|
|
244
286
|
|
|
245
287
|
// By XPath
|
|
246
|
-
{
|
|
288
|
+
{
|
|
289
|
+
xpath: "//button[@type='submit']"
|
|
290
|
+
}
|
|
247
291
|
|
|
248
292
|
// By coordinates
|
|
249
|
-
{
|
|
293
|
+
{
|
|
294
|
+
x: 100, y
|
|
295
|
+
:
|
|
296
|
+
200
|
|
297
|
+
}
|
|
250
298
|
```
|
|
251
299
|
|
|
252
300
|
## Usage Examples
|
|
@@ -292,6 +340,9 @@ evaluate(script="document.title", tabId="12345")
|
|
|
292
340
|
// Full page
|
|
293
341
|
extract(type="screenshot", fullPage=true)
|
|
294
342
|
|
|
343
|
+
// JPEG with quality (smaller file)
|
|
344
|
+
extract(type="screenshot", format="jpeg", quality=80, output="/tmp/screenshot.jpg")
|
|
345
|
+
|
|
295
346
|
// Save to file
|
|
296
347
|
extract(type="screenshot", output="/tmp/screenshot.png")
|
|
297
348
|
```
|
|
@@ -420,4 +471,3 @@ MIT License - see [LICENSE](LICENSE) for details.
|
|
|
420
471
|
|
|
421
472
|
- [Model Context Protocol](https://modelcontextprotocol.io/) - MCP specification
|
|
422
473
|
- [Chrome DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/) - CDP documentation
|
|
423
|
-
|
|
@@ -46,13 +46,5 @@ export declare class BehaviorSimulator {
|
|
|
46
46
|
* 更新当前鼠标位置
|
|
47
47
|
*/
|
|
48
48
|
setCurrentPosition(point: Point): void;
|
|
49
|
-
/**
|
|
50
|
-
* 生成人类化的鼠标移动路径
|
|
51
|
-
*/
|
|
52
|
-
generateHumanMousePath(to: Point): Point[];
|
|
53
|
-
/**
|
|
54
|
-
* 生成人类化的打字延迟序列
|
|
55
|
-
*/
|
|
56
|
-
generateTypingDelays(textLength: number, baseDelay?: number): number[];
|
|
57
49
|
}
|
|
58
50
|
//# sourceMappingURL=behavior.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"behavior.d.ts","sourceRoot":"","sources":["../../src/anti-detection/behavior.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAA;AAE3C;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGnE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAC9B,IAAI,EAAE,KAAK,EACX,EAAE,EAAE,KAAK,EACT,KAAK,CAAC,EAAE,MAAM,GACf,KAAK,EAAE,CA4BT;AAwBD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,GAAE,MAAY,GAAG,MAAM,CAI9D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,eAAe,CAAsB;IAE7C;;OAEG;IACH,kBAAkB,IAAI,KAAK;IAI3B;;OAEG;IACH,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"behavior.d.ts","sourceRoot":"","sources":["../../src/anti-detection/behavior.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAA;AAE3C;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGnE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAC9B,IAAI,EAAE,KAAK,EACX,EAAE,EAAE,KAAK,EACT,KAAK,CAAC,EAAE,MAAM,GACf,KAAK,EAAE,CA4BT;AAwBD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,GAAE,MAAY,GAAG,MAAM,CAI9D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,eAAe,CAAsB;IAE7C;;OAEG;IACH,kBAAkB,IAAI,KAAK;IAI3B;;OAEG;IACH,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;CAIzC"}
|
|
@@ -93,21 +93,5 @@ export class BehaviorSimulator {
|
|
|
93
93
|
setCurrentPosition(point) {
|
|
94
94
|
this.currentPosition = { ...point };
|
|
95
95
|
}
|
|
96
|
-
/**
|
|
97
|
-
* 生成人类化的鼠标移动路径
|
|
98
|
-
*/
|
|
99
|
-
generateHumanMousePath(to) {
|
|
100
|
-
return generateBezierPath(this.currentPosition, to);
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* 生成人类化的打字延迟序列
|
|
104
|
-
*/
|
|
105
|
-
generateTypingDelays(textLength, baseDelay = 100) {
|
|
106
|
-
const delays = [];
|
|
107
|
-
for (let i = 0; i < textLength; i++) {
|
|
108
|
-
delays.push(getTypingDelay(baseDelay));
|
|
109
|
-
}
|
|
110
|
-
return delays;
|
|
111
|
-
}
|
|
112
96
|
}
|
|
113
97
|
//# sourceMappingURL=behavior.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"behavior.js","sourceRoot":"","sources":["../../src/anti-detection/behavior.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"behavior.js","sourceRoot":"","sources":["../../src/anti-detection/behavior.ts"],"names":[],"mappings":"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"}
|
package/dist/cdp/client.d.ts
CHANGED
package/dist/cdp/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/cdp/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAC,YAAY,EAAC,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/cdp/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAC,YAAY,EAAC,MAAM,QAAQ,CAAA;AAwBnC;;GAEG;AACH,KAAK,gBAAgB,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;AAElD;;GAEG;AACH,qBAAa,SAAU,SAAQ,YAAY;IACvC,aAAa;IACb,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAkB;IACjE,OAAO,CAAC,EAAE,CAA4C;IACtD,OAAO,CAAC,SAAS,CAAmE;IACpF,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,cAAc,CAAoE;IAC1F,OAAO,CAAC,kBAAkB,CAA8C;IAExE,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;OAEG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,SAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA8CzE;;OAEG;IACG,IAAI,CAAC,CAAC,GAAG,OAAO,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,GAAE,MAA0C,GACpD,OAAO,CAAC,CAAC,CAAC;IA6Cb;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAOxD;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAOzD;;;;OAIG;IACH,YAAY,CAAC,CAAC,GAAG,OAAO,EACpB,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,EAClC,OAAO,SAAkB,GAC1B,OAAO,CAAC,CAAC,CAAC;IA8Bb;;;;;OAKG;IACH,KAAK,IAAI,IAAI;IAYb;;OAEG;IACH,OAAO,CAAC,aAAa;IAiDrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAcxB;;OAEG;IACH,OAAO,CAAC,WAAW;CAStB;AAgCD;;GAEG;AACH,wBAAsB,oBAAoB,CACtC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,MAA6B,GACvC,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,MAA6B,GACvC,OAAO,CAAC,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,oBAAoB,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAExG"}
|
package/dist/cdp/client.js
CHANGED
|
@@ -7,29 +7,25 @@
|
|
|
7
7
|
import { EventEmitter } from 'events';
|
|
8
8
|
import WebSocket from 'ws';
|
|
9
9
|
import { CDPError, ConnectionRefusedError, TimeoutError } from '../core/errors.js';
|
|
10
|
+
import { DEFAULT_TIMEOUT } from '../core/types.js';
|
|
10
11
|
/**
|
|
11
12
|
* CDP 客户端
|
|
12
13
|
*/
|
|
13
14
|
export class CDPClient extends EventEmitter {
|
|
14
15
|
/** 默认命令超时 */
|
|
15
|
-
static DEFAULT_COMMAND_TIMEOUT =
|
|
16
|
+
static DEFAULT_COMMAND_TIMEOUT = DEFAULT_TIMEOUT;
|
|
16
17
|
ws = null;
|
|
17
18
|
callbacks = new Map();
|
|
18
19
|
nextId = 1;
|
|
19
20
|
eventListeners = new Map();
|
|
20
21
|
activeEventWaiters = new Set();
|
|
21
|
-
_endpoint = '';
|
|
22
|
-
get endpoint() {
|
|
23
|
-
return this._endpoint;
|
|
24
|
-
}
|
|
25
22
|
get isConnected() {
|
|
26
23
|
return this.ws !== null && this.ws.readyState === WebSocket.OPEN;
|
|
27
24
|
}
|
|
28
25
|
/**
|
|
29
26
|
* 连接到 CDP 端点
|
|
30
27
|
*/
|
|
31
|
-
async connect(endpoint, timeout =
|
|
32
|
-
this._endpoint = endpoint;
|
|
28
|
+
async connect(endpoint, timeout = DEFAULT_TIMEOUT) {
|
|
33
29
|
return new Promise((resolve, reject) => {
|
|
34
30
|
const timer = setTimeout(() => {
|
|
35
31
|
reject(new TimeoutError(`连接超时: ${endpoint} (${timeout}ms)`));
|
|
@@ -109,7 +105,9 @@ export class CDPClient extends EventEmitter {
|
|
|
109
105
|
catch (err) {
|
|
110
106
|
clearTimeout(timeoutId);
|
|
111
107
|
this.callbacks.delete(id);
|
|
112
|
-
reject(new CDPError(`Failed to send CDP command ${method}: ${err instanceof Error ?
|
|
108
|
+
reject(new CDPError(`Failed to send CDP command ${method}: ${err instanceof Error ?
|
|
109
|
+
err.message :
|
|
110
|
+
'Unknown error'}`));
|
|
113
111
|
}
|
|
114
112
|
});
|
|
115
113
|
}
|
|
@@ -136,7 +134,7 @@ export class CDPClient extends EventEmitter {
|
|
|
136
134
|
*
|
|
137
135
|
* close()/handleClose() 会立即 reject 所有活跃的等待者,不必等 timer 超时。
|
|
138
136
|
*/
|
|
139
|
-
waitForEvent(event, predicate, timeout =
|
|
137
|
+
waitForEvent(event, predicate, timeout = DEFAULT_TIMEOUT) {
|
|
140
138
|
return new Promise((resolve, reject) => {
|
|
141
139
|
const listener = (params) => {
|
|
142
140
|
if (!predicate || predicate(params)) {
|
|
@@ -239,32 +237,30 @@ export class CDPClient extends EventEmitter {
|
|
|
239
237
|
* 处理连接关闭
|
|
240
238
|
*/
|
|
241
239
|
handleClose() {
|
|
240
|
+
if (this.ws === null) {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
this.ws = null;
|
|
242
244
|
this.rejectAllPending('连接已关闭');
|
|
245
|
+
this.eventListeners.clear();
|
|
243
246
|
this.emit('disconnected');
|
|
244
247
|
}
|
|
245
248
|
}
|
|
246
249
|
/** 默认 HTTP 请求超时 */
|
|
247
250
|
const DEFAULT_HTTP_TIMEOUT = 10000;
|
|
248
251
|
/**
|
|
249
|
-
*
|
|
252
|
+
* 请求 CDP HTTP 接口(公共逻辑)
|
|
250
253
|
*/
|
|
251
|
-
|
|
252
|
-
|
|
254
|
+
async function cdpHttpFetch(host, port, path, timeout) {
|
|
255
|
+
// noinspection HttpUrlsUsage — CDP 调试协议只支持 HTTP
|
|
256
|
+
const url = `http://${host}:${port}${path}`;
|
|
253
257
|
const controller = new AbortController();
|
|
254
258
|
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
259
|
+
let response;
|
|
255
260
|
try {
|
|
256
|
-
|
|
257
|
-
if (!response.ok) {
|
|
258
|
-
throw new ConnectionRefusedError(host, port);
|
|
259
|
-
}
|
|
260
|
-
const data = (await response.json());
|
|
261
|
-
return data.webSocketDebuggerUrl;
|
|
261
|
+
response = await fetch(url, { signal: controller.signal });
|
|
262
262
|
}
|
|
263
263
|
catch (error) {
|
|
264
|
-
if (error instanceof ConnectionRefusedError) {
|
|
265
|
-
throw error;
|
|
266
|
-
}
|
|
267
|
-
// AbortError 表示超时
|
|
268
264
|
if (error instanceof Error && error.name === 'AbortError') {
|
|
269
265
|
throw new TimeoutError(`连接超时: ${host}:${port} (${timeout}ms)`);
|
|
270
266
|
}
|
|
@@ -273,33 +269,22 @@ export async function getBrowserWSEndpoint(host, port, timeout = DEFAULT_HTTP_TI
|
|
|
273
269
|
finally {
|
|
274
270
|
clearTimeout(timeoutId);
|
|
275
271
|
}
|
|
272
|
+
if (!response.ok) {
|
|
273
|
+
throw new ConnectionRefusedError(host, port);
|
|
274
|
+
}
|
|
275
|
+
return (await response.json());
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* 获取浏览器 WebSocket 端点
|
|
279
|
+
*/
|
|
280
|
+
export async function getBrowserWSEndpoint(host, port, timeout = DEFAULT_HTTP_TIMEOUT) {
|
|
281
|
+
const data = await cdpHttpFetch(host, port, '/json/version', timeout);
|
|
282
|
+
return data.webSocketDebuggerUrl;
|
|
276
283
|
}
|
|
277
284
|
/**
|
|
278
285
|
* 获取所有可用的 targets
|
|
279
286
|
*/
|
|
280
287
|
export async function getTargets(host, port, timeout = DEFAULT_HTTP_TIMEOUT) {
|
|
281
|
-
|
|
282
|
-
const controller = new AbortController();
|
|
283
|
-
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
284
|
-
try {
|
|
285
|
-
const response = await fetch(url, { signal: controller.signal });
|
|
286
|
-
if (!response.ok) {
|
|
287
|
-
throw new ConnectionRefusedError(host, port);
|
|
288
|
-
}
|
|
289
|
-
return (await response.json());
|
|
290
|
-
}
|
|
291
|
-
catch (error) {
|
|
292
|
-
if (error instanceof ConnectionRefusedError) {
|
|
293
|
-
throw error;
|
|
294
|
-
}
|
|
295
|
-
// AbortError 表示超时
|
|
296
|
-
if (error instanceof Error && error.name === 'AbortError') {
|
|
297
|
-
throw new TimeoutError(`连接超时: ${host}:${port} (${timeout}ms)`);
|
|
298
|
-
}
|
|
299
|
-
throw new ConnectionRefusedError(host, port);
|
|
300
|
-
}
|
|
301
|
-
finally {
|
|
302
|
-
clearTimeout(timeoutId);
|
|
303
|
-
}
|
|
288
|
+
return cdpHttpFetch(host, port, '/json/list', timeout);
|
|
304
289
|
}
|
|
305
290
|
//# sourceMappingURL=client.js.map
|
package/dist/cdp/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/cdp/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAC,YAAY,EAAC,MAAM,QAAQ,CAAA;AACnC,OAAO,SAAS,MAAM,IAAI,CAAA;AAC1B,OAAO,EAAC,QAAQ,EAAE,sBAAsB,EAAE,YAAY,EAAC,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/cdp/client.ts"],"names":[],"mappings":"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"}
|
package/dist/cdp/launcher.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* 负责启动 Chrome 浏览器进程并获取 CDP 端点
|
|
5
5
|
*/
|
|
6
|
-
import type
|
|
6
|
+
import { type LaunchOptions } from '../core/types.js';
|
|
7
7
|
/**
|
|
8
8
|
* 查找 Chrome 可执行文件
|
|
9
9
|
*/
|
|
@@ -15,9 +15,6 @@ export declare class BrowserLauncher {
|
|
|
15
15
|
private process;
|
|
16
16
|
private _port;
|
|
17
17
|
get port(): number;
|
|
18
|
-
private _endpoint;
|
|
19
|
-
get endpoint(): string;
|
|
20
|
-
get isRunning(): boolean;
|
|
21
18
|
/**
|
|
22
19
|
* 启动浏览器
|
|
23
20
|
*/
|
|
@@ -26,10 +23,6 @@ export declare class BrowserLauncher {
|
|
|
26
23
|
* 关闭浏览器
|
|
27
24
|
*/
|
|
28
25
|
close(): void;
|
|
29
|
-
/**
|
|
30
|
-
* 强制关闭浏览器
|
|
31
|
-
*/
|
|
32
|
-
forceClose(): void;
|
|
33
26
|
/**
|
|
34
27
|
* 构建启动参数
|
|
35
28
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../../src/cdp/launcher.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../../src/cdp/launcher.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAkB,KAAK,aAAa,EAAC,MAAM,kBAAkB,CAAA;AA6BpE;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,GAAG,IAAI,CAU1C;AAED;;GAEG;AACH,qBAAa,eAAe;IACxB,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,KAAK,CAA2B;IAExC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACG,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IA6B1D;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,OAAO,CAAC,SAAS;IAwDjB;;OAEG;IACH,OAAO,CAAC,eAAe;CA0C1B"}
|
package/dist/cdp/launcher.js
CHANGED
|
@@ -8,6 +8,7 @@ import { existsSync, mkdirSync } from 'fs';
|
|
|
8
8
|
import { homedir, platform } from 'os';
|
|
9
9
|
import { join } from 'path';
|
|
10
10
|
import { BrowserNotFoundError, TimeoutError } from '../core/errors.js';
|
|
11
|
+
import { DEFAULT_TIMEOUT } from '../core/types.js';
|
|
11
12
|
/**
|
|
12
13
|
* 默认 profile 目录(固定路径,保留 cookies 和登录状态)
|
|
13
14
|
*/
|
|
@@ -54,18 +55,11 @@ export class BrowserLauncher {
|
|
|
54
55
|
get port() {
|
|
55
56
|
return this._port;
|
|
56
57
|
}
|
|
57
|
-
_endpoint = '';
|
|
58
|
-
get endpoint() {
|
|
59
|
-
return this._endpoint;
|
|
60
|
-
}
|
|
61
|
-
get isRunning() {
|
|
62
|
-
return this.process !== null && !this.process.killed;
|
|
63
|
-
}
|
|
64
58
|
/**
|
|
65
59
|
* 启动浏览器
|
|
66
60
|
*/
|
|
67
61
|
async launch(options = {}) {
|
|
68
|
-
const { executablePath, port = 0, incognito = false, headless = false, userDataDir, timeout =
|
|
62
|
+
const { executablePath, port = 0, incognito = false, headless = false, userDataDir, timeout = DEFAULT_TIMEOUT, } = options;
|
|
69
63
|
// 查找 Chrome
|
|
70
64
|
const chromePath = executablePath ?? findChrome();
|
|
71
65
|
if (!chromePath) {
|
|
@@ -79,8 +73,7 @@ export class BrowserLauncher {
|
|
|
79
73
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
80
74
|
});
|
|
81
75
|
// 等待 CDP 端点就绪
|
|
82
|
-
|
|
83
|
-
return this._endpoint;
|
|
76
|
+
return this.waitForEndpoint(timeout);
|
|
84
77
|
}
|
|
85
78
|
/**
|
|
86
79
|
* 关闭浏览器
|
|
@@ -91,15 +84,6 @@ export class BrowserLauncher {
|
|
|
91
84
|
this.process = null;
|
|
92
85
|
}
|
|
93
86
|
}
|
|
94
|
-
/**
|
|
95
|
-
* 强制关闭浏览器
|
|
96
|
-
*/
|
|
97
|
-
forceClose() {
|
|
98
|
-
if (this.process && !this.process.killed) {
|
|
99
|
-
this.process.kill('SIGKILL');
|
|
100
|
-
this.process = null;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
87
|
/**
|
|
104
88
|
* 构建启动参数
|
|
105
89
|
*/
|
|
@@ -164,7 +148,7 @@ export class BrowserLauncher {
|
|
|
164
148
|
this.process.stderr?.on('data', (data) => {
|
|
165
149
|
stderr += data.toString();
|
|
166
150
|
// 解析 DevTools listening on ws://...
|
|
167
|
-
const match = stderr.match(/DevTools listening on (ws
|
|
151
|
+
const match = stderr.match(/DevTools listening on (ws:\/\/\S+)/);
|
|
168
152
|
if (match) {
|
|
169
153
|
clearTimeout(timer);
|
|
170
154
|
// 解析端口
|