@pyrokine/mcp-chrome 1.0.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 +236 -96
- 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 +10 -2
- package/dist/cdp/client.d.ts.map +1 -1
- package/dist/cdp/client.js +76 -61
- 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 +18 -24
- package/dist/cdp/launcher.js.map +1 -1
- package/dist/core/auto-wait.d.ts +8 -1
- package/dist/core/auto-wait.d.ts.map +1 -1
- package/dist/core/auto-wait.js +15 -5
- package/dist/core/auto-wait.js.map +1 -1
- package/dist/core/errors.d.ts +11 -13
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +50 -31
- package/dist/core/errors.js.map +1 -1
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/locator.d.ts +17 -6
- package/dist/core/locator.d.ts.map +1 -1
- package/dist/core/locator.js +137 -28
- 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 +71 -16
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +365 -124
- package/dist/core/session.js.map +1 -1
- package/dist/core/types.d.ts +15 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +11 -2
- package/dist/core/types.js.map +1 -1
- package/dist/core/unified-session.d.ts +418 -0
- package/dist/core/unified-session.d.ts.map +1 -0
- package/dist/core/unified-session.js +1044 -0
- package/dist/core/unified-session.js.map +1 -0
- package/dist/extension/bridge.d.ts +203 -0
- package/dist/extension/bridge.d.ts.map +1 -0
- package/dist/extension/bridge.js +375 -0
- package/dist/extension/bridge.js.map +1 -0
- package/dist/extension/http-server.d.ts +60 -0
- package/dist/extension/http-server.d.ts.map +1 -0
- package/dist/extension/http-server.js +319 -0
- package/dist/extension/http-server.js.map +1 -0
- package/dist/extension/index.d.ts +7 -0
- package/dist/extension/index.d.ts.map +1 -0
- package/dist/extension/index.js +6 -0
- package/dist/extension/index.js.map +1 -0
- package/dist/extension/native-host-installer.d.ts +21 -0
- package/dist/extension/native-host-installer.d.ts.map +1 -0
- package/dist/extension/native-host-installer.js +147 -0
- package/dist/extension/native-host-installer.js.map +1 -0
- package/dist/extension/socket-server.d.ts +32 -0
- package/dist/extension/socket-server.d.ts.map +1 -0
- package/dist/extension/socket-server.js +177 -0
- package/dist/extension/socket-server.js.map +1 -0
- package/dist/extension/ws-server.d.ts +40 -0
- package/dist/extension/ws-server.d.ts.map +1 -0
- package/dist/extension/ws-server.js +246 -0
- package/dist/extension/ws-server.js.map +1 -0
- package/dist/index.js +16 -67
- package/dist/index.js.map +1 -1
- package/dist/native-host/index.js +280 -0
- package/dist/native-host/mcp-chrome-host +2 -0
- package/dist/tools/browse.d.ts +3 -76
- package/dist/tools/browse.d.ts.map +1 -1
- package/dist/tools/browse.js +193 -237
- package/dist/tools/browse.js.map +1 -1
- package/dist/tools/cookies.d.ts +6 -66
- package/dist/tools/cookies.d.ts.map +1 -1
- package/dist/tools/cookies.js +129 -125
- package/dist/tools/cookies.js.map +1 -1
- package/dist/tools/evaluate.d.ts +3 -37
- package/dist/tools/evaluate.d.ts.map +1 -1
- package/dist/tools/evaluate.js +68 -55
- package/dist/tools/evaluate.js.map +1 -1
- package/dist/tools/extract.d.ts +3 -200
- package/dist/tools/extract.d.ts.map +1 -1
- package/dist/tools/extract.js +287 -238
- 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 -228
- package/dist/tools/input.d.ts.map +1 -1
- package/dist/tools/input.js +190 -129
- package/dist/tools/input.js.map +1 -1
- package/dist/tools/logs.d.ts +3 -47
- package/dist/tools/logs.d.ts.map +1 -1
- package/dist/tools/logs.js +100 -127
- package/dist/tools/logs.js.map +1 -1
- package/dist/tools/manage.d.ts +6 -51
- package/dist/tools/manage.d.ts.map +1 -1
- package/dist/tools/manage.js +284 -209
- package/dist/tools/manage.js.map +1 -1
- package/dist/tools/schema.d.ts +75 -168
- package/dist/tools/schema.d.ts.map +1 -1
- package/dist/tools/schema.js +276 -126
- package/dist/tools/schema.js.map +1 -1
- package/dist/tools/wait.d.ts +3 -191
- package/dist/tools/wait.d.ts.map +1 -1
- package/dist/tools/wait.js +298 -155
- package/dist/tools/wait.js.map +1 -1
- package/package.json +4 -5
- package/scripts/start-chrome-headless.sh +0 -37
- package/scripts/start-chrome.sh +0 -41
package/dist/cdp/client.js
CHANGED
|
@@ -7,28 +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
|
-
get endpoint() {
|
|
22
|
-
return this._endpoint;
|
|
23
|
-
}
|
|
21
|
+
activeEventWaiters = new Set();
|
|
24
22
|
get isConnected() {
|
|
25
23
|
return this.ws !== null && this.ws.readyState === WebSocket.OPEN;
|
|
26
24
|
}
|
|
27
25
|
/**
|
|
28
26
|
* 连接到 CDP 端点
|
|
29
27
|
*/
|
|
30
|
-
async connect(endpoint, timeout =
|
|
31
|
-
this._endpoint = endpoint;
|
|
28
|
+
async connect(endpoint, timeout = DEFAULT_TIMEOUT) {
|
|
32
29
|
return new Promise((resolve, reject) => {
|
|
33
30
|
const timer = setTimeout(() => {
|
|
34
31
|
reject(new TimeoutError(`连接超时: ${endpoint} (${timeout}ms)`));
|
|
@@ -102,7 +99,16 @@ export class CDPClient extends EventEmitter {
|
|
|
102
99
|
},
|
|
103
100
|
method,
|
|
104
101
|
});
|
|
105
|
-
|
|
102
|
+
try {
|
|
103
|
+
this.ws.send(JSON.stringify(message));
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
clearTimeout(timeoutId);
|
|
107
|
+
this.callbacks.delete(id);
|
|
108
|
+
reject(new CDPError(`Failed to send CDP command ${method}: ${err instanceof Error ?
|
|
109
|
+
err.message :
|
|
110
|
+
'Unknown error'}`));
|
|
111
|
+
}
|
|
106
112
|
});
|
|
107
113
|
}
|
|
108
114
|
/**
|
|
@@ -125,38 +131,49 @@ export class CDPClient extends EventEmitter {
|
|
|
125
131
|
}
|
|
126
132
|
/**
|
|
127
133
|
* 等待特定事件
|
|
134
|
+
*
|
|
135
|
+
* close()/handleClose() 会立即 reject 所有活跃的等待者,不必等 timer 超时。
|
|
128
136
|
*/
|
|
129
|
-
waitForEvent(event, predicate, timeout =
|
|
137
|
+
waitForEvent(event, predicate, timeout = DEFAULT_TIMEOUT) {
|
|
130
138
|
return new Promise((resolve, reject) => {
|
|
131
|
-
const timer = setTimeout(() => {
|
|
132
|
-
this.offEvent(event, listener);
|
|
133
|
-
reject(new TimeoutError(`等待事件超时: ${event} (${timeout}ms)`));
|
|
134
|
-
}, timeout);
|
|
135
139
|
const listener = (params) => {
|
|
136
140
|
if (!predicate || predicate(params)) {
|
|
137
|
-
|
|
138
|
-
this.offEvent(event, listener);
|
|
141
|
+
cleanup();
|
|
139
142
|
resolve(params);
|
|
140
143
|
}
|
|
141
144
|
};
|
|
145
|
+
const waiter = {
|
|
146
|
+
event,
|
|
147
|
+
listener,
|
|
148
|
+
timer: setTimeout(() => {
|
|
149
|
+
cleanup();
|
|
150
|
+
reject(new TimeoutError(`等待事件超时: ${event} (${timeout}ms)`));
|
|
151
|
+
}, timeout),
|
|
152
|
+
reject,
|
|
153
|
+
};
|
|
154
|
+
const cleanup = () => {
|
|
155
|
+
clearTimeout(waiter.timer);
|
|
156
|
+
this.offEvent(event, listener);
|
|
157
|
+
this.activeEventWaiters.delete(waiter);
|
|
158
|
+
};
|
|
159
|
+
this.activeEventWaiters.add(waiter);
|
|
142
160
|
this.onEvent(event, listener);
|
|
143
161
|
});
|
|
144
162
|
}
|
|
145
163
|
/**
|
|
146
164
|
* 关闭连接
|
|
165
|
+
*
|
|
166
|
+
* 立即 reject 所有 pending callbacks 和 waitForEvent,
|
|
167
|
+
* 然后发出 'disconnected' 信号供外部等待者(如 waitForAnyEvent)清理。
|
|
147
168
|
*/
|
|
148
169
|
close() {
|
|
149
|
-
|
|
150
|
-
for (const [id, callback] of this.callbacks) {
|
|
151
|
-
callback.reject(new CDPError('连接主动关闭'));
|
|
152
|
-
}
|
|
153
|
-
this.callbacks.clear();
|
|
170
|
+
this.rejectAllPending('连接主动关闭');
|
|
154
171
|
this.eventListeners.clear();
|
|
155
|
-
// 关闭 WebSocket
|
|
156
172
|
if (this.ws) {
|
|
157
173
|
this.ws.close();
|
|
158
174
|
this.ws = null;
|
|
159
175
|
}
|
|
176
|
+
this.emit('disconnected');
|
|
160
177
|
}
|
|
161
178
|
/**
|
|
162
179
|
* 处理收到的消息
|
|
@@ -201,40 +218,49 @@ export class CDPClient extends EventEmitter {
|
|
|
201
218
|
this.emit(message.method, message.params);
|
|
202
219
|
}
|
|
203
220
|
}
|
|
221
|
+
/**
|
|
222
|
+
* 立即 reject 所有 pending callbacks 和 waitForEvent 等待者
|
|
223
|
+
*/
|
|
224
|
+
rejectAllPending(reason) {
|
|
225
|
+
for (const [, callback] of this.callbacks) {
|
|
226
|
+
callback.reject(new CDPError(reason));
|
|
227
|
+
}
|
|
228
|
+
this.callbacks.clear();
|
|
229
|
+
for (const waiter of this.activeEventWaiters) {
|
|
230
|
+
clearTimeout(waiter.timer);
|
|
231
|
+
this.offEvent(waiter.event, waiter.listener);
|
|
232
|
+
waiter.reject(new CDPError(reason));
|
|
233
|
+
}
|
|
234
|
+
this.activeEventWaiters.clear();
|
|
235
|
+
}
|
|
204
236
|
/**
|
|
205
237
|
* 处理连接关闭
|
|
206
238
|
*/
|
|
207
239
|
handleClose() {
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
callback.reject(new CDPError('连接已关闭'));
|
|
211
|
-
this.callbacks.delete(id);
|
|
240
|
+
if (this.ws === null) {
|
|
241
|
+
return;
|
|
212
242
|
}
|
|
243
|
+
this.ws = null;
|
|
244
|
+
this.rejectAllPending('连接已关闭');
|
|
245
|
+
this.eventListeners.clear();
|
|
213
246
|
this.emit('disconnected');
|
|
214
247
|
}
|
|
215
248
|
}
|
|
216
249
|
/** 默认 HTTP 请求超时 */
|
|
217
250
|
const DEFAULT_HTTP_TIMEOUT = 10000;
|
|
218
251
|
/**
|
|
219
|
-
*
|
|
252
|
+
* 请求 CDP HTTP 接口(公共逻辑)
|
|
220
253
|
*/
|
|
221
|
-
|
|
222
|
-
|
|
254
|
+
async function cdpHttpFetch(host, port, path, timeout) {
|
|
255
|
+
// noinspection HttpUrlsUsage — CDP 调试协议只支持 HTTP
|
|
256
|
+
const url = `http://${host}:${port}${path}`;
|
|
223
257
|
const controller = new AbortController();
|
|
224
258
|
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
259
|
+
let response;
|
|
225
260
|
try {
|
|
226
|
-
|
|
227
|
-
if (!response.ok) {
|
|
228
|
-
throw new ConnectionRefusedError(host, port);
|
|
229
|
-
}
|
|
230
|
-
const data = (await response.json());
|
|
231
|
-
return data.webSocketDebuggerUrl;
|
|
261
|
+
response = await fetch(url, { signal: controller.signal });
|
|
232
262
|
}
|
|
233
263
|
catch (error) {
|
|
234
|
-
if (error instanceof ConnectionRefusedError) {
|
|
235
|
-
throw error;
|
|
236
|
-
}
|
|
237
|
-
// AbortError 表示超时
|
|
238
264
|
if (error instanceof Error && error.name === 'AbortError') {
|
|
239
265
|
throw new TimeoutError(`连接超时: ${host}:${port} (${timeout}ms)`);
|
|
240
266
|
}
|
|
@@ -243,33 +269,22 @@ export async function getBrowserWSEndpoint(host, port, timeout = DEFAULT_HTTP_TI
|
|
|
243
269
|
finally {
|
|
244
270
|
clearTimeout(timeoutId);
|
|
245
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;
|
|
246
283
|
}
|
|
247
284
|
/**
|
|
248
285
|
* 获取所有可用的 targets
|
|
249
286
|
*/
|
|
250
287
|
export async function getTargets(host, port, timeout = DEFAULT_HTTP_TIMEOUT) {
|
|
251
|
-
|
|
252
|
-
const controller = new AbortController();
|
|
253
|
-
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
254
|
-
try {
|
|
255
|
-
const response = await fetch(url, { signal: controller.signal });
|
|
256
|
-
if (!response.ok) {
|
|
257
|
-
throw new ConnectionRefusedError(host, port);
|
|
258
|
-
}
|
|
259
|
-
return (await response.json());
|
|
260
|
-
}
|
|
261
|
-
catch (error) {
|
|
262
|
-
if (error instanceof ConnectionRefusedError) {
|
|
263
|
-
throw error;
|
|
264
|
-
}
|
|
265
|
-
// AbortError 表示超时
|
|
266
|
-
if (error instanceof Error && error.name === 'AbortError') {
|
|
267
|
-
throw new TimeoutError(`连接超时: ${host}:${port} (${timeout}ms)`);
|
|
268
|
-
}
|
|
269
|
-
throw new ConnectionRefusedError(host, port);
|
|
270
|
-
}
|
|
271
|
-
finally {
|
|
272
|
-
clearTimeout(timeoutId);
|
|
273
|
-
}
|
|
288
|
+
return cdpHttpFetch(host, port, '/json/list', timeout);
|
|
274
289
|
}
|
|
275
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;
|
|
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
|
@@ -4,9 +4,15 @@
|
|
|
4
4
|
* 负责启动 Chrome 浏览器进程并获取 CDP 端点
|
|
5
5
|
*/
|
|
6
6
|
import { spawn } from 'child_process';
|
|
7
|
-
import { existsSync } from 'fs';
|
|
8
|
-
import { platform } from 'os';
|
|
7
|
+
import { existsSync, mkdirSync } from 'fs';
|
|
8
|
+
import { homedir, platform } from 'os';
|
|
9
|
+
import { join } from 'path';
|
|
9
10
|
import { BrowserNotFoundError, TimeoutError } from '../core/errors.js';
|
|
11
|
+
import { DEFAULT_TIMEOUT } from '../core/types.js';
|
|
12
|
+
/**
|
|
13
|
+
* 默认 profile 目录(固定路径,保留 cookies 和登录状态)
|
|
14
|
+
*/
|
|
15
|
+
const DEFAULT_PROFILE_DIR = join(homedir(), '.mcp-chrome', 'profile');
|
|
10
16
|
/**
|
|
11
17
|
* Chrome 可执行文件的常见路径
|
|
12
18
|
*/
|
|
@@ -49,18 +55,11 @@ export class BrowserLauncher {
|
|
|
49
55
|
get port() {
|
|
50
56
|
return this._port;
|
|
51
57
|
}
|
|
52
|
-
_endpoint = '';
|
|
53
|
-
get endpoint() {
|
|
54
|
-
return this._endpoint;
|
|
55
|
-
}
|
|
56
|
-
get isRunning() {
|
|
57
|
-
return this.process !== null && !this.process.killed;
|
|
58
|
-
}
|
|
59
58
|
/**
|
|
60
59
|
* 启动浏览器
|
|
61
60
|
*/
|
|
62
61
|
async launch(options = {}) {
|
|
63
|
-
const { executablePath, port = 0, incognito = false, headless = false, userDataDir, timeout =
|
|
62
|
+
const { executablePath, port = 0, incognito = false, headless = false, userDataDir, timeout = DEFAULT_TIMEOUT, } = options;
|
|
64
63
|
// 查找 Chrome
|
|
65
64
|
const chromePath = executablePath ?? findChrome();
|
|
66
65
|
if (!chromePath) {
|
|
@@ -74,8 +73,7 @@ export class BrowserLauncher {
|
|
|
74
73
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
75
74
|
});
|
|
76
75
|
// 等待 CDP 端点就绪
|
|
77
|
-
|
|
78
|
-
return this._endpoint;
|
|
76
|
+
return this.waitForEndpoint(timeout);
|
|
79
77
|
}
|
|
80
78
|
/**
|
|
81
79
|
* 关闭浏览器
|
|
@@ -86,15 +84,6 @@ export class BrowserLauncher {
|
|
|
86
84
|
this.process = null;
|
|
87
85
|
}
|
|
88
86
|
}
|
|
89
|
-
/**
|
|
90
|
-
* 强制关闭浏览器
|
|
91
|
-
*/
|
|
92
|
-
forceClose() {
|
|
93
|
-
if (this.process && !this.process.killed) {
|
|
94
|
-
this.process.kill('SIGKILL');
|
|
95
|
-
this.process = null;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
87
|
/**
|
|
99
88
|
* 构建启动参数
|
|
100
89
|
*/
|
|
@@ -131,9 +120,14 @@ export class BrowserLauncher {
|
|
|
131
120
|
if (options.headless) {
|
|
132
121
|
args.push('--headless=new');
|
|
133
122
|
}
|
|
134
|
-
|
|
135
|
-
|
|
123
|
+
// 必须指定 user-data-dir,否则会复用已运行的 Chrome 实例导致启动失败
|
|
124
|
+
// 默认使用固定目录 ~/.mcp-chrome/profile,保留 cookies 和登录状态
|
|
125
|
+
const userDataDir = options.userDataDir ?? DEFAULT_PROFILE_DIR;
|
|
126
|
+
// 确保目录存在
|
|
127
|
+
if (!existsSync(userDataDir)) {
|
|
128
|
+
mkdirSync(userDataDir, { recursive: true });
|
|
136
129
|
}
|
|
130
|
+
args.push(`--user-data-dir=${userDataDir}`);
|
|
137
131
|
// 打开一个空白页
|
|
138
132
|
args.push('about:blank');
|
|
139
133
|
return args;
|
|
@@ -154,7 +148,7 @@ export class BrowserLauncher {
|
|
|
154
148
|
this.process.stderr?.on('data', (data) => {
|
|
155
149
|
stderr += data.toString();
|
|
156
150
|
// 解析 DevTools listening on ws://...
|
|
157
|
-
const match = stderr.match(/DevTools listening on (ws
|
|
151
|
+
const match = stderr.match(/DevTools listening on (ws:\/\/\S+)/);
|
|
158
152
|
if (match) {
|
|
159
153
|
clearTimeout(timer);
|
|
160
154
|
// 解析端口
|
package/dist/cdp/launcher.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launcher.js","sourceRoot":"","sources":["../../src/cdp/launcher.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAe,KAAK,EAAC,MAAM,eAAe,CAAA;AACjD,OAAO,EAAC,UAAU,EAAC,MAAM,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"launcher.js","sourceRoot":"","sources":["../../src/cdp/launcher.ts"],"names":[],"mappings":"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"}
|
package/dist/core/auto-wait.d.ts
CHANGED
|
@@ -22,7 +22,8 @@ export interface AutoWaitOptions {
|
|
|
22
22
|
export declare class AutoWait {
|
|
23
23
|
private cdp;
|
|
24
24
|
private sessionId;
|
|
25
|
-
private timeout;
|
|
25
|
+
private readonly timeout;
|
|
26
|
+
private readonly deadline;
|
|
26
27
|
constructor(cdp: CDPClient, sessionId: string, options?: AutoWaitOptions);
|
|
27
28
|
/**
|
|
28
29
|
* 等待元素可用(非禁用状态)
|
|
@@ -65,7 +66,13 @@ export declare class AutoWait {
|
|
|
65
66
|
waitForInputReady(nodeId: number): Promise<void>;
|
|
66
67
|
/**
|
|
67
68
|
* 发送 CDP 命令
|
|
69
|
+
*
|
|
70
|
+
* 使用 deadline 剩余时间,确保单命令不超出整体预算。
|
|
68
71
|
*/
|
|
69
72
|
private send;
|
|
73
|
+
/**
|
|
74
|
+
* deadline 剩余时间(至少 1ms,防止 0 被当作无超时)
|
|
75
|
+
*/
|
|
76
|
+
private remaining;
|
|
70
77
|
}
|
|
71
78
|
//# sourceMappingURL=auto-wait.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-wait.d.ts","sourceRoot":"","sources":["../../src/core/auto-wait.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"auto-wait.d.ts","sourceRoot":"","sources":["../../src/core/auto-wait.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAA;AAI/C;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,QAAQ;IAKb,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,SAAS;IALrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;gBAGrB,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,MAAM,EACzB,OAAO,GAAE,eAAoB;IAMjC;;;;;OAKG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BnD;;;;;OAKG;IACG,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmC7D;;;;;OAKG;IACG,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BrD;;;;OAIG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BnD;;;;OAIG;IACG,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOrD;;;;OAIG;IACG,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtD;;;;OAIG;IACH,OAAO,CAAC,IAAI;IAIZ;;OAEG;IACH,OAAO,CAAC,SAAS;CAGpB"}
|
package/dist/core/auto-wait.js
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* 核心思想:操作前自动检查元素状态,失败则重试,而非立即报错。
|
|
10
10
|
*/
|
|
11
11
|
import { withRetry } from './retry.js';
|
|
12
|
-
|
|
12
|
+
import { DEFAULT_TIMEOUT } from './types.js';
|
|
13
13
|
/**
|
|
14
14
|
* 自动等待类
|
|
15
15
|
*/
|
|
@@ -17,10 +17,12 @@ export class AutoWait {
|
|
|
17
17
|
cdp;
|
|
18
18
|
sessionId;
|
|
19
19
|
timeout;
|
|
20
|
+
deadline;
|
|
20
21
|
constructor(cdp, sessionId, options = {}) {
|
|
21
22
|
this.cdp = cdp;
|
|
22
23
|
this.sessionId = sessionId;
|
|
23
24
|
this.timeout = options.timeout ?? DEFAULT_TIMEOUT;
|
|
25
|
+
this.deadline = Date.now() + this.timeout;
|
|
24
26
|
}
|
|
25
27
|
/**
|
|
26
28
|
* 等待元素可用(非禁用状态)
|
|
@@ -44,7 +46,7 @@ export class AutoWait {
|
|
|
44
46
|
if (!result.value) {
|
|
45
47
|
throw new Error('元素处于禁用状态');
|
|
46
48
|
}
|
|
47
|
-
}, { timeout: this.
|
|
49
|
+
}, { timeout: this.remaining() });
|
|
48
50
|
}
|
|
49
51
|
/**
|
|
50
52
|
* 等待元素位置稳定(两帧对比)
|
|
@@ -77,7 +79,7 @@ export class AutoWait {
|
|
|
77
79
|
if (!result.value) {
|
|
78
80
|
throw new Error('元素位置不稳定');
|
|
79
81
|
}
|
|
80
|
-
}, { timeout: this.
|
|
82
|
+
}, { timeout: this.remaining() });
|
|
81
83
|
}
|
|
82
84
|
/**
|
|
83
85
|
* 确保元素在视口内
|
|
@@ -132,7 +134,7 @@ export class AutoWait {
|
|
|
132
134
|
if (!result.value) {
|
|
133
135
|
throw new Error('元素不可见');
|
|
134
136
|
}
|
|
135
|
-
}, { timeout: this.
|
|
137
|
+
}, { timeout: this.remaining() });
|
|
136
138
|
}
|
|
137
139
|
/**
|
|
138
140
|
* 执行点击前的所有等待检查
|
|
@@ -157,9 +159,17 @@ export class AutoWait {
|
|
|
157
159
|
}
|
|
158
160
|
/**
|
|
159
161
|
* 发送 CDP 命令
|
|
162
|
+
*
|
|
163
|
+
* 使用 deadline 剩余时间,确保单命令不超出整体预算。
|
|
160
164
|
*/
|
|
161
165
|
send(method, params) {
|
|
162
|
-
return this.cdp.send(method, params, this.sessionId);
|
|
166
|
+
return this.cdp.send(method, params, this.sessionId, this.remaining());
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* deadline 剩余时间(至少 1ms,防止 0 被当作无超时)
|
|
170
|
+
*/
|
|
171
|
+
remaining() {
|
|
172
|
+
return Math.max(1, this.deadline - Date.now());
|
|
163
173
|
}
|
|
164
174
|
}
|
|
165
175
|
//# sourceMappingURL=auto-wait.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-wait.js","sourceRoot":"","sources":["../../src/core/auto-wait.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAC,SAAS,EAAC,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"auto-wait.js","sourceRoot":"","sources":["../../src/core/auto-wait.ts"],"names":[],"mappings":"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"}
|
package/dist/core/errors.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ export declare abstract class BrowserError extends Error {
|
|
|
21
21
|
abstract readonly code: string;
|
|
22
22
|
abstract readonly suggestion: string;
|
|
23
23
|
readonly context: ErrorContext;
|
|
24
|
-
constructor(message: string);
|
|
24
|
+
protected constructor(message: string);
|
|
25
25
|
/**
|
|
26
26
|
* 转换为 JSON 格式,用于 MCP 响应
|
|
27
27
|
*/
|
|
@@ -89,14 +89,6 @@ export declare class TimeoutError extends BrowserError {
|
|
|
89
89
|
readonly suggestion = "\u8BF7\u589E\u52A0\u8D85\u65F6\u65F6\u95F4\uFF0C\u6216\u68C0\u67E5\u64CD\u4F5C\u6761\u4EF6\u662F\u5426\u80FD\u6EE1\u8DB3";
|
|
90
90
|
constructor(message: string);
|
|
91
91
|
}
|
|
92
|
-
/**
|
|
93
|
-
* 无效参数错误
|
|
94
|
-
*/
|
|
95
|
-
export declare class InvalidArgumentError extends BrowserError {
|
|
96
|
-
readonly code = "INVALID_ARGUMENT";
|
|
97
|
-
readonly suggestion: string;
|
|
98
|
-
constructor(message: string, suggestion?: string);
|
|
99
|
-
}
|
|
100
92
|
/**
|
|
101
93
|
* CDP 协议错误
|
|
102
94
|
*/
|
|
@@ -105,13 +97,10 @@ export declare class CDPError extends BrowserError {
|
|
|
105
97
|
readonly suggestion = "\u8FD9\u662F\u4E00\u4E2A CDP \u534F\u8BAE\u9519\u8BEF\uFF0C\u8BF7\u68C0\u67E5\u64CD\u4F5C\u662F\u5426\u6B63\u786E";
|
|
106
98
|
constructor(message: string);
|
|
107
99
|
}
|
|
108
|
-
/**
|
|
109
|
-
* 格式化日志记录(参考 Playwright Waiter)
|
|
110
|
-
*/
|
|
111
|
-
export declare function formatLogRecording(logs: string[]): string;
|
|
112
100
|
/**
|
|
113
101
|
* 格式化错误为 MCP 工具响应
|
|
114
102
|
* 特别处理 ZodError,转换为结构化的 INVALID_ARGUMENT 错误
|
|
103
|
+
* 自动检测 visibility 相关错误并添加 hint
|
|
115
104
|
*/
|
|
116
105
|
export declare function formatErrorResponse(error: unknown): {
|
|
117
106
|
content: Array<{
|
|
@@ -120,4 +109,13 @@ export declare function formatErrorResponse(error: unknown): {
|
|
|
120
109
|
}>;
|
|
121
110
|
isError: boolean;
|
|
122
111
|
};
|
|
112
|
+
/**
|
|
113
|
+
* 格式化成功响应为 MCP 工具响应
|
|
114
|
+
*/
|
|
115
|
+
export declare function formatResponse(data: unknown): {
|
|
116
|
+
content: Array<{
|
|
117
|
+
type: 'text';
|
|
118
|
+
text: string;
|
|
119
|
+
}>;
|
|
120
|
+
};
|
|
123
121
|
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,YAAY,CAAA;AAEtC;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,8BAAsB,YAAa,SAAQ,KAAK;IAC5C,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IACpC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAK;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,YAAY,CAAA;AAEtC;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,8BAAsB,YAAa,SAAQ,KAAK;IAC5C,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IACpC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAK;IAEnC,SAAS,aAAa,OAAO,EAAE,MAAM;IAKrC;;OAEG;IAEH,MAAM,IAAI,MAAM;CAsBnB;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,YAAY;IACpD,QAAQ,CAAC,IAAI,wBAAuB;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,SAAkB,OAAO,EAAE,YAAY,CAAA;gBAE3B,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAQzC;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,YAAY;IAClD,QAAQ,CAAC,IAAI,uBAA4B;IACzC,QAAQ,CAAC,UAAU,6KACqC;;CAK3D;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,YAAY;IAClD,QAAQ,CAAC,IAAI,uBAA4B;IACzC,QAAQ,CAAC,UAAU,yHACyD;;CAK/E;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,YAAY;IACjD,QAAQ,CAAC,IAAI,sBAA2B;IACxC,QAAQ,CAAC,UAAU,qFAAqC;IACxD,SAAkB,OAAO,EAAE,YAAY,CAAA;gBAE3B,QAAQ,EAAE,MAAM;CAI/B;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,YAAY;IAClD,QAAQ,CAAC,IAAI,uBAAsB;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAA;IACvB,SAAkB,OAAO,EAAE,YAAY,CAAA;gBAE3B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,EAAE,GAAG,CAAC,EAAE,MAAM;IAUrE,MAAM,IAAI,MAAM;CAkB5B;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,YAAY;IACpD,QAAQ,CAAC,IAAI,wBAA6B;IAC1C,QAAQ,CAAC,UAAU,gGAAoB;IACvC,SAAkB,OAAO,EAAE,YAAY,CAAA;gBAE3B,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAI3C;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC1C,QAAQ,CAAC,IAAI,aAAkB;IAC/B,QAAQ,CAAC,UAAU,8HAAyB;gBAEhC,OAAO,EAAE,MAAM;CAG9B;AAED;;GAEG;AACH,qBAAa,QAAS,SAAQ,YAAY;IACtC,QAAQ,CAAC,IAAI,eAAoB;IACjC,QAAQ,CAAC,UAAU,uHAA4B;gBAEnC,OAAO,EAAE,MAAM;CAG9B;AA8CD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG;IACjD,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,EAAE,OAAO,CAAC;CACpB,CAsDA;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG;IAC3C,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD,CAIA"}
|