cdp-mcp-server 5.0.1 → 5.0.2
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 +60 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/tools/form.js +150 -150
- package/dist/tools/interact.js +137 -137
- package/dist/tools/tabs.js +3 -3
- package/package.json +17 -13
package/README.md
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# CDP Browser MCP Server
|
|
2
|
+
|
|
3
|
+
Connects AI agents to your **real running Chrome** — your cookies, logins, and
|
|
4
|
+
extensions stay intact. 14 tools / 90+ actions over the Chrome DevTools
|
|
5
|
+
Protocol: navigation, accessibility snapshots, element interaction, smart form
|
|
6
|
+
filling, network interception, device emulation, cookies/storage, and a full
|
|
7
|
+
JS debugger.
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install -g cdp-mcp-server
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Or reference it directly in any MCP client (no global install needed):
|
|
16
|
+
|
|
17
|
+
```json
|
|
18
|
+
{
|
|
19
|
+
"mcpServers": {
|
|
20
|
+
"cdp-browser": {
|
|
21
|
+
"command": "npx",
|
|
22
|
+
"args": ["-y", "cdp-mcp-server@latest"]
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## One-time Chrome setup
|
|
29
|
+
|
|
30
|
+
Chrome must expose the DevTools protocol. Pick one:
|
|
31
|
+
|
|
32
|
+
1. Open `chrome://flags/#enable-remote-debugging`, set **Enabled**, relaunch
|
|
33
|
+
(persists across restarts — recommended)
|
|
34
|
+
2. Or launch Chrome with the flag:
|
|
35
|
+
`chrome.exe --remote-debugging-port=9222`
|
|
36
|
+
|
|
37
|
+
Verify it works: open `http://localhost:9222/json/version` — you should see
|
|
38
|
+
JSON output.
|
|
39
|
+
|
|
40
|
+
The server auto-connects to Chrome on your first tool call. Edge and Brave
|
|
41
|
+
work the same way (same protocol).
|
|
42
|
+
|
|
43
|
+
## Highlights
|
|
44
|
+
|
|
45
|
+
- Stable element refs that survive DOM changes
|
|
46
|
+
- Smart form filling (React/Greenhouse comboboxes, country codes, dates)
|
|
47
|
+
- Auto-waiting after every action (no "click and pray")
|
|
48
|
+
- Token-optimized accessibility snapshots (~15KB)
|
|
49
|
+
- Multi-agent safe: per-agent session isolation + exclusive tab locks
|
|
50
|
+
- Network mocking via request interception
|
|
51
|
+
- Playwright-compatible slim mode for small-context models
|
|
52
|
+
|
|
53
|
+
## Documentation
|
|
54
|
+
|
|
55
|
+
Full tool reference, environment variables, and guides:
|
|
56
|
+
https://github.com/Tushar49/cdp-browser-mcp#readme
|
|
57
|
+
|
|
58
|
+
## License
|
|
59
|
+
|
|
60
|
+
MIT
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
1
2
|
/**
|
|
2
3
|
* Entry point for the CDP Browser MCP Server v5.
|
|
3
4
|
*
|
|
@@ -49,7 +50,7 @@ import { registerDebugTools } from './tools/debug.js';
|
|
|
49
50
|
import { registerFormTools } from './tools/form.js';
|
|
50
51
|
import { getSlimTools, mapSlimToFull } from './tools/slim-mode.js';
|
|
51
52
|
// ─── Bootstrap ──────────────────────────────────────────────────────
|
|
52
|
-
const VERSION = '5.0.
|
|
53
|
+
const VERSION = '5.0.2';
|
|
53
54
|
const config = loadConfig();
|
|
54
55
|
const cdpClient = new CDPClient({ commandTimeout: config.globalTimeout });
|
|
55
56
|
// Lazy initialization: HealthMonitor is created but doesn't discover browsers
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/form.js
CHANGED
|
@@ -141,38 +141,38 @@ async function fillText(ctx, sess, uid, value, tabId) {
|
|
|
141
141
|
const axInfo = await getAXNodeInfo(ctx, sess, uid, tabId);
|
|
142
142
|
// Focus, clear, and set value using React-compatible approach
|
|
143
143
|
await ctx.sendCommand('Runtime.callFunctionOn', {
|
|
144
|
-
functionDeclaration: `function() {
|
|
145
|
-
this.scrollIntoView({ block: "center" });
|
|
146
|
-
this.focus();
|
|
147
|
-
// Clear existing value
|
|
148
|
-
if ('value' in this) {
|
|
149
|
-
const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
|
|
150
|
-
|| Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
|
|
151
|
-
if (nativeSetter) nativeSetter.call(this, '');
|
|
152
|
-
else this.value = '';
|
|
153
|
-
this.dispatchEvent(new Event('input', { bubbles: true }));
|
|
154
|
-
} else if (this.isContentEditable) {
|
|
155
|
-
this.textContent = '';
|
|
156
|
-
}
|
|
144
|
+
functionDeclaration: `function() {
|
|
145
|
+
this.scrollIntoView({ block: "center" });
|
|
146
|
+
this.focus();
|
|
147
|
+
// Clear existing value
|
|
148
|
+
if ('value' in this) {
|
|
149
|
+
const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
|
|
150
|
+
|| Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
|
|
151
|
+
if (nativeSetter) nativeSetter.call(this, '');
|
|
152
|
+
else this.value = '';
|
|
153
|
+
this.dispatchEvent(new Event('input', { bubbles: true }));
|
|
154
|
+
} else if (this.isContentEditable) {
|
|
155
|
+
this.textContent = '';
|
|
156
|
+
}
|
|
157
157
|
}`,
|
|
158
158
|
objectId,
|
|
159
159
|
returnByValue: true,
|
|
160
160
|
}, sess);
|
|
161
161
|
// Set the value using native setter for React/Angular compatibility
|
|
162
162
|
const result = await ctx.sendCommand('Runtime.callFunctionOn', {
|
|
163
|
-
functionDeclaration: `function() {
|
|
164
|
-
const val = ${JSON.stringify(value)};
|
|
165
|
-
if ('value' in this) {
|
|
166
|
-
const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
|
|
167
|
-
|| Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
|
|
168
|
-
if (nativeSetter) nativeSetter.call(this, val);
|
|
169
|
-
else this.value = val;
|
|
170
|
-
} else if (this.isContentEditable) {
|
|
171
|
-
this.textContent = val;
|
|
172
|
-
}
|
|
173
|
-
this.dispatchEvent(new Event('input', { bubbles: true }));
|
|
174
|
-
this.dispatchEvent(new Event('change', { bubbles: true }));
|
|
175
|
-
return { ok: true };
|
|
163
|
+
functionDeclaration: `function() {
|
|
164
|
+
const val = ${JSON.stringify(value)};
|
|
165
|
+
if ('value' in this) {
|
|
166
|
+
const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
|
|
167
|
+
|| Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
|
|
168
|
+
if (nativeSetter) nativeSetter.call(this, val);
|
|
169
|
+
else this.value = val;
|
|
170
|
+
} else if (this.isContentEditable) {
|
|
171
|
+
this.textContent = val;
|
|
172
|
+
}
|
|
173
|
+
this.dispatchEvent(new Event('input', { bubbles: true }));
|
|
174
|
+
this.dispatchEvent(new Event('change', { bubbles: true }));
|
|
175
|
+
return { ok: true };
|
|
176
176
|
}`,
|
|
177
177
|
objectId,
|
|
178
178
|
returnByValue: true,
|
|
@@ -200,16 +200,16 @@ async function fillCombobox(ctx, sess, uid, value, tabId) {
|
|
|
200
200
|
const axInfo = await getAXNodeInfo(ctx, sess, uid, tabId);
|
|
201
201
|
// 1. Focus and clear the combobox
|
|
202
202
|
await ctx.sendCommand('Runtime.callFunctionOn', {
|
|
203
|
-
functionDeclaration: `function() {
|
|
204
|
-
this.scrollIntoView({ block: "center" });
|
|
205
|
-
this.focus();
|
|
206
|
-
if ('value' in this) {
|
|
207
|
-
const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
|
|
208
|
-
|| Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
|
|
209
|
-
if (nativeSetter) nativeSetter.call(this, '');
|
|
210
|
-
else this.value = '';
|
|
211
|
-
this.dispatchEvent(new Event('input', { bubbles: true }));
|
|
212
|
-
}
|
|
203
|
+
functionDeclaration: `function() {
|
|
204
|
+
this.scrollIntoView({ block: "center" });
|
|
205
|
+
this.focus();
|
|
206
|
+
if ('value' in this) {
|
|
207
|
+
const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
|
|
208
|
+
|| Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
|
|
209
|
+
if (nativeSetter) nativeSetter.call(this, '');
|
|
210
|
+
else this.value = '';
|
|
211
|
+
this.dispatchEvent(new Event('input', { bubbles: true }));
|
|
212
|
+
}
|
|
213
213
|
}`,
|
|
214
214
|
objectId,
|
|
215
215
|
returnByValue: true,
|
|
@@ -228,8 +228,8 @@ async function fillCombobox(ctx, sess, uid, value, tabId) {
|
|
|
228
228
|
let controlledListboxId = null;
|
|
229
229
|
try {
|
|
230
230
|
const controlsResult = await ctx.sendCommand('Runtime.callFunctionOn', {
|
|
231
|
-
functionDeclaration: `function() {
|
|
232
|
-
return this.getAttribute('aria-controls') || this.getAttribute('aria-owns') || '';
|
|
231
|
+
functionDeclaration: `function() {
|
|
232
|
+
return this.getAttribute('aria-controls') || this.getAttribute('aria-owns') || '';
|
|
233
233
|
}`,
|
|
234
234
|
objectId,
|
|
235
235
|
returnByValue: true,
|
|
@@ -363,14 +363,14 @@ async function fillCombobox(ctx, sess, uid, value, tabId) {
|
|
|
363
363
|
const shortValue = value.substring(0, 3);
|
|
364
364
|
// Clear and retype with shorter prefix
|
|
365
365
|
await ctx.sendCommand('Runtime.callFunctionOn', {
|
|
366
|
-
functionDeclaration: `function() {
|
|
367
|
-
if ('value' in this) {
|
|
368
|
-
const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
|
|
369
|
-
|| Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
|
|
370
|
-
if (nativeSetter) nativeSetter.call(this, '');
|
|
371
|
-
else this.value = '';
|
|
372
|
-
this.dispatchEvent(new Event('input', { bubbles: true }));
|
|
373
|
-
}
|
|
366
|
+
functionDeclaration: `function() {
|
|
367
|
+
if ('value' in this) {
|
|
368
|
+
const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
|
|
369
|
+
|| Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
|
|
370
|
+
if (nativeSetter) nativeSetter.call(this, '');
|
|
371
|
+
else this.value = '';
|
|
372
|
+
this.dispatchEvent(new Event('input', { bubbles: true }));
|
|
373
|
+
}
|
|
374
374
|
}`,
|
|
375
375
|
objectId,
|
|
376
376
|
returnByValue: true,
|
|
@@ -413,9 +413,9 @@ async function fillCombobox(ctx, sess, uid, value, tabId) {
|
|
|
413
413
|
}, sess);
|
|
414
414
|
if (resolved?.object?.objectId) {
|
|
415
415
|
await ctx.sendCommand('Runtime.callFunctionOn', {
|
|
416
|
-
functionDeclaration: `function() {
|
|
417
|
-
this.scrollIntoView({ block: "center" });
|
|
418
|
-
this.click();
|
|
416
|
+
functionDeclaration: `function() {
|
|
417
|
+
this.scrollIntoView({ block: "center" });
|
|
418
|
+
this.click();
|
|
419
419
|
}`,
|
|
420
420
|
objectId: resolved.object.objectId,
|
|
421
421
|
returnByValue: true,
|
|
@@ -489,15 +489,15 @@ async function fillCheckbox(ctx, sess, uid, value, tabId) {
|
|
|
489
489
|
const axInfo = await getAXNodeInfo(ctx, sess, uid, tabId);
|
|
490
490
|
const desired = value === 'true' || value === '1' || value === 'yes';
|
|
491
491
|
const result = await ctx.sendCommand('Runtime.callFunctionOn', {
|
|
492
|
-
functionDeclaration: `function() {
|
|
493
|
-
this.scrollIntoView({ block: "center" });
|
|
494
|
-
const desired = ${desired};
|
|
495
|
-
const current = this.checked || this.getAttribute('aria-checked') === 'true';
|
|
496
|
-
if (current !== desired) {
|
|
497
|
-
this.click();
|
|
498
|
-
this.dispatchEvent(new Event('change', { bubbles: true }));
|
|
499
|
-
}
|
|
500
|
-
return { checked: desired };
|
|
492
|
+
functionDeclaration: `function() {
|
|
493
|
+
this.scrollIntoView({ block: "center" });
|
|
494
|
+
const desired = ${desired};
|
|
495
|
+
const current = this.checked || this.getAttribute('aria-checked') === 'true';
|
|
496
|
+
if (current !== desired) {
|
|
497
|
+
this.click();
|
|
498
|
+
this.dispatchEvent(new Event('change', { bubbles: true }));
|
|
499
|
+
}
|
|
500
|
+
return { checked: desired };
|
|
501
501
|
}`,
|
|
502
502
|
objectId,
|
|
503
503
|
returnByValue: true,
|
|
@@ -516,10 +516,10 @@ async function fillRadio(ctx, sess, uid, value, tabId) {
|
|
|
516
516
|
const { objectId } = await resolveUidToObjectId(ctx, sess, uid, tabId);
|
|
517
517
|
const axInfo = await getAXNodeInfo(ctx, sess, uid, tabId);
|
|
518
518
|
await ctx.sendCommand('Runtime.callFunctionOn', {
|
|
519
|
-
functionDeclaration: `function() {
|
|
520
|
-
this.scrollIntoView({ block: "center" });
|
|
521
|
-
this.click();
|
|
522
|
-
this.dispatchEvent(new Event('change', { bubbles: true }));
|
|
519
|
+
functionDeclaration: `function() {
|
|
520
|
+
this.scrollIntoView({ block: "center" });
|
|
521
|
+
this.click();
|
|
522
|
+
this.dispatchEvent(new Event('change', { bubbles: true }));
|
|
523
523
|
}`,
|
|
524
524
|
objectId,
|
|
525
525
|
returnByValue: true,
|
|
@@ -538,36 +538,36 @@ async function fillSelect(ctx, sess, uid, value, tabId) {
|
|
|
538
538
|
const { objectId } = await resolveUidToObjectId(ctx, sess, uid, tabId);
|
|
539
539
|
const axInfo = await getAXNodeInfo(ctx, sess, uid, tabId);
|
|
540
540
|
const result = await ctx.sendCommand('Runtime.callFunctionOn', {
|
|
541
|
-
functionDeclaration: `function() {
|
|
542
|
-
this.scrollIntoView({ block: "center" });
|
|
543
|
-
const val = ${JSON.stringify(value)};
|
|
544
|
-
|
|
545
|
-
if (this.tagName === 'SELECT') {
|
|
546
|
-
let opt = Array.from(this.options).find(o => o.value === val || o.textContent.trim() === val);
|
|
547
|
-
if (!opt) {
|
|
548
|
-
// Case-insensitive match
|
|
549
|
-
opt = Array.from(this.options).find(o =>
|
|
550
|
-
o.value.toLowerCase() === val.toLowerCase() ||
|
|
551
|
-
o.textContent.trim().toLowerCase() === val.toLowerCase()
|
|
552
|
-
);
|
|
553
|
-
}
|
|
554
|
-
if (!opt) {
|
|
555
|
-
const available = Array.from(this.options).map(o => o.textContent.trim()).filter(Boolean);
|
|
556
|
-
return { error: "Option not found: " + val, available };
|
|
557
|
-
}
|
|
558
|
-
|
|
559
|
-
const nativeSetter = Object.getOwnPropertyDescriptor(HTMLSelectElement.prototype, 'value')?.set;
|
|
560
|
-
if (nativeSetter) nativeSetter.call(this, opt.value);
|
|
561
|
-
else this.value = opt.value;
|
|
562
|
-
|
|
563
|
-
this.dispatchEvent(new Event('input', { bubbles: true }));
|
|
564
|
-
this.dispatchEvent(new Event('change', { bubbles: true }));
|
|
565
|
-
return { selected: opt.textContent.trim() };
|
|
566
|
-
}
|
|
567
|
-
|
|
568
|
-
// Custom dropdown — click to open, then look for matching option
|
|
569
|
-
this.click();
|
|
570
|
-
return { customDropdown: true };
|
|
541
|
+
functionDeclaration: `function() {
|
|
542
|
+
this.scrollIntoView({ block: "center" });
|
|
543
|
+
const val = ${JSON.stringify(value)};
|
|
544
|
+
|
|
545
|
+
if (this.tagName === 'SELECT') {
|
|
546
|
+
let opt = Array.from(this.options).find(o => o.value === val || o.textContent.trim() === val);
|
|
547
|
+
if (!opt) {
|
|
548
|
+
// Case-insensitive match
|
|
549
|
+
opt = Array.from(this.options).find(o =>
|
|
550
|
+
o.value.toLowerCase() === val.toLowerCase() ||
|
|
551
|
+
o.textContent.trim().toLowerCase() === val.toLowerCase()
|
|
552
|
+
);
|
|
553
|
+
}
|
|
554
|
+
if (!opt) {
|
|
555
|
+
const available = Array.from(this.options).map(o => o.textContent.trim()).filter(Boolean);
|
|
556
|
+
return { error: "Option not found: " + val, available };
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
const nativeSetter = Object.getOwnPropertyDescriptor(HTMLSelectElement.prototype, 'value')?.set;
|
|
560
|
+
if (nativeSetter) nativeSetter.call(this, opt.value);
|
|
561
|
+
else this.value = opt.value;
|
|
562
|
+
|
|
563
|
+
this.dispatchEvent(new Event('input', { bubbles: true }));
|
|
564
|
+
this.dispatchEvent(new Event('change', { bubbles: true }));
|
|
565
|
+
return { selected: opt.textContent.trim() };
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
// Custom dropdown — click to open, then look for matching option
|
|
569
|
+
this.click();
|
|
570
|
+
return { customDropdown: true };
|
|
571
571
|
}`,
|
|
572
572
|
objectId,
|
|
573
573
|
returnByValue: true,
|
|
@@ -586,21 +586,21 @@ async function fillSelect(ctx, sess, uid, value, tabId) {
|
|
|
586
586
|
// Wait for dropdown to open, then find and click the option
|
|
587
587
|
await sleep(300);
|
|
588
588
|
const clickResult = await ctx.sendCommand('Runtime.evaluate', {
|
|
589
|
-
expression: `(() => {
|
|
590
|
-
const val = ${JSON.stringify(value)};
|
|
591
|
-
const valLower = val.toLowerCase();
|
|
592
|
-
const options = document.querySelectorAll('[role="option"], [role="listitem"], li[data-value], .MuiMenuItem-root, .ant-select-item, [class*="option"]');
|
|
593
|
-
for (const opt of options) {
|
|
594
|
-
const text = opt.textContent.trim();
|
|
595
|
-
const optValue = opt.getAttribute("data-value") || opt.getAttribute("value") || "";
|
|
596
|
-
if (text === val || optValue === val || text.toLowerCase() === valLower) {
|
|
597
|
-
opt.scrollIntoView({ block: "center" });
|
|
598
|
-
opt.click();
|
|
599
|
-
return { selected: text };
|
|
600
|
-
}
|
|
601
|
-
}
|
|
602
|
-
const available = Array.from(options).slice(0, 10).map(o => o.textContent.trim());
|
|
603
|
-
return { error: "Option not found in custom dropdown", available };
|
|
589
|
+
expression: `(() => {
|
|
590
|
+
const val = ${JSON.stringify(value)};
|
|
591
|
+
const valLower = val.toLowerCase();
|
|
592
|
+
const options = document.querySelectorAll('[role="option"], [role="listitem"], li[data-value], .MuiMenuItem-root, .ant-select-item, [class*="option"]');
|
|
593
|
+
for (const opt of options) {
|
|
594
|
+
const text = opt.textContent.trim();
|
|
595
|
+
const optValue = opt.getAttribute("data-value") || opt.getAttribute("value") || "";
|
|
596
|
+
if (text === val || optValue === val || text.toLowerCase() === valLower) {
|
|
597
|
+
opt.scrollIntoView({ block: "center" });
|
|
598
|
+
opt.click();
|
|
599
|
+
return { selected: text };
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
const available = Array.from(options).slice(0, 10).map(o => o.textContent.trim());
|
|
603
|
+
return { error: "Option not found in custom dropdown", available };
|
|
604
604
|
})()`,
|
|
605
605
|
returnByValue: true,
|
|
606
606
|
}, sess);
|
|
@@ -620,19 +620,19 @@ async function fillDate(ctx, sess, uid, value, tabId) {
|
|
|
620
620
|
const { objectId } = await resolveUidToObjectId(ctx, sess, uid, tabId);
|
|
621
621
|
const axInfo = await getAXNodeInfo(ctx, sess, uid, tabId);
|
|
622
622
|
const result = await ctx.sendCommand('Runtime.callFunctionOn', {
|
|
623
|
-
functionDeclaration: `function() {
|
|
624
|
-
this.scrollIntoView({ block: "center" });
|
|
625
|
-
this.focus();
|
|
626
|
-
const val = ${JSON.stringify(value)};
|
|
627
|
-
|
|
628
|
-
// Native date input
|
|
629
|
-
const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set;
|
|
630
|
-
if (nativeSetter) nativeSetter.call(this, val);
|
|
631
|
-
else this.value = val;
|
|
632
|
-
|
|
633
|
-
this.dispatchEvent(new Event('input', { bubbles: true }));
|
|
634
|
-
this.dispatchEvent(new Event('change', { bubbles: true }));
|
|
635
|
-
return { ok: true };
|
|
623
|
+
functionDeclaration: `function() {
|
|
624
|
+
this.scrollIntoView({ block: "center" });
|
|
625
|
+
this.focus();
|
|
626
|
+
const val = ${JSON.stringify(value)};
|
|
627
|
+
|
|
628
|
+
// Native date input
|
|
629
|
+
const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set;
|
|
630
|
+
if (nativeSetter) nativeSetter.call(this, val);
|
|
631
|
+
else this.value = val;
|
|
632
|
+
|
|
633
|
+
this.dispatchEvent(new Event('input', { bubbles: true }));
|
|
634
|
+
this.dispatchEvent(new Event('change', { bubbles: true }));
|
|
635
|
+
return { ok: true };
|
|
636
636
|
}`,
|
|
637
637
|
objectId,
|
|
638
638
|
returnByValue: true,
|
|
@@ -705,16 +705,16 @@ async function fillLocation(ctx, sess, uid, value, tabId) {
|
|
|
705
705
|
const axInfo = await getAXNodeInfo(ctx, sess, uid, tabId);
|
|
706
706
|
// Focus and clear
|
|
707
707
|
await ctx.sendCommand('Runtime.callFunctionOn', {
|
|
708
|
-
functionDeclaration: `function() {
|
|
709
|
-
this.scrollIntoView({ block: "center" });
|
|
710
|
-
this.focus();
|
|
711
|
-
if ('value' in this) {
|
|
712
|
-
const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
|
|
713
|
-
|| Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
|
|
714
|
-
if (nativeSetter) nativeSetter.call(this, '');
|
|
715
|
-
else this.value = '';
|
|
716
|
-
this.dispatchEvent(new Event('input', { bubbles: true }));
|
|
717
|
-
}
|
|
708
|
+
functionDeclaration: `function() {
|
|
709
|
+
this.scrollIntoView({ block: "center" });
|
|
710
|
+
this.focus();
|
|
711
|
+
if ('value' in this) {
|
|
712
|
+
const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
|
|
713
|
+
|| Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
|
|
714
|
+
if (nativeSetter) nativeSetter.call(this, '');
|
|
715
|
+
else this.value = '';
|
|
716
|
+
this.dispatchEvent(new Event('input', { bubbles: true }));
|
|
717
|
+
}
|
|
718
718
|
}`,
|
|
719
719
|
objectId,
|
|
720
720
|
returnByValue: true,
|
|
@@ -753,9 +753,9 @@ async function fillLocation(ctx, sess, uid, value, tabId) {
|
|
|
753
753
|
}, sess);
|
|
754
754
|
if (resolved?.object?.objectId) {
|
|
755
755
|
await ctx.sendCommand('Runtime.callFunctionOn', {
|
|
756
|
-
functionDeclaration: `function() {
|
|
757
|
-
this.scrollIntoView({ block: "center" });
|
|
758
|
-
this.click();
|
|
756
|
+
functionDeclaration: `function() {
|
|
757
|
+
this.scrollIntoView({ block: "center" });
|
|
758
|
+
this.click();
|
|
759
759
|
}`,
|
|
760
760
|
objectId: resolved.object.objectId,
|
|
761
761
|
returnByValue: true,
|
|
@@ -849,11 +849,11 @@ async function clearFields(ctx, sess, fields, tabId) {
|
|
|
849
849
|
if (type === 'checkbox') {
|
|
850
850
|
// Uncheck if checked
|
|
851
851
|
await ctx.sendCommand('Runtime.callFunctionOn', {
|
|
852
|
-
functionDeclaration: `function() {
|
|
853
|
-
if (this.checked || this.getAttribute('aria-checked') === 'true') {
|
|
854
|
-
this.click();
|
|
855
|
-
this.dispatchEvent(new Event('change', { bubbles: true }));
|
|
856
|
-
}
|
|
852
|
+
functionDeclaration: `function() {
|
|
853
|
+
if (this.checked || this.getAttribute('aria-checked') === 'true') {
|
|
854
|
+
this.click();
|
|
855
|
+
this.dispatchEvent(new Event('change', { bubbles: true }));
|
|
856
|
+
}
|
|
857
857
|
}`,
|
|
858
858
|
objectId,
|
|
859
859
|
returnByValue: true,
|
|
@@ -863,18 +863,18 @@ async function clearFields(ctx, sess, fields, tabId) {
|
|
|
863
863
|
else {
|
|
864
864
|
// Clear text-like fields
|
|
865
865
|
await ctx.sendCommand('Runtime.callFunctionOn', {
|
|
866
|
-
functionDeclaration: `function() {
|
|
867
|
-
this.focus();
|
|
868
|
-
if ('value' in this) {
|
|
869
|
-
const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
|
|
870
|
-
|| Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
|
|
871
|
-
if (nativeSetter) nativeSetter.call(this, '');
|
|
872
|
-
else this.value = '';
|
|
873
|
-
} else if (this.isContentEditable) {
|
|
874
|
-
this.textContent = '';
|
|
875
|
-
}
|
|
876
|
-
this.dispatchEvent(new Event('input', { bubbles: true }));
|
|
877
|
-
this.dispatchEvent(new Event('change', { bubbles: true }));
|
|
866
|
+
functionDeclaration: `function() {
|
|
867
|
+
this.focus();
|
|
868
|
+
if ('value' in this) {
|
|
869
|
+
const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
|
|
870
|
+
|| Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
|
|
871
|
+
if (nativeSetter) nativeSetter.call(this, '');
|
|
872
|
+
else this.value = '';
|
|
873
|
+
} else if (this.isContentEditable) {
|
|
874
|
+
this.textContent = '';
|
|
875
|
+
}
|
|
876
|
+
this.dispatchEvent(new Event('input', { bubbles: true }));
|
|
877
|
+
this.dispatchEvent(new Event('change', { bubbles: true }));
|
|
878
878
|
}`,
|
|
879
879
|
objectId,
|
|
880
880
|
returnByValue: true,
|
package/dist/tools/interact.js
CHANGED
|
@@ -199,12 +199,12 @@ async function handleType(ctx, args) {
|
|
|
199
199
|
}, retryTimeout);
|
|
200
200
|
// Clear existing content if requested (default: true)
|
|
201
201
|
const clearCode = args.clear !== false
|
|
202
|
-
? `if ('value' in this) {
|
|
203
|
-
const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
|
|
204
|
-
|| Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
|
|
205
|
-
if (nativeSetter) nativeSetter.call(this, '');
|
|
206
|
-
else this.value = '';
|
|
207
|
-
this.dispatchEvent(new Event('input', {bubbles:true}));
|
|
202
|
+
? `if ('value' in this) {
|
|
203
|
+
const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
|
|
204
|
+
|| Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
|
|
205
|
+
if (nativeSetter) nativeSetter.call(this, '');
|
|
206
|
+
else this.value = '';
|
|
207
|
+
this.dispatchEvent(new Event('input', {bubbles:true}));
|
|
208
208
|
} else if (this.isContentEditable) { this.textContent = ''; }`
|
|
209
209
|
: '';
|
|
210
210
|
await ctx.sendCommand('Runtime.callFunctionOn', {
|
|
@@ -264,20 +264,20 @@ async function handleType(ctx, args) {
|
|
|
264
264
|
else {
|
|
265
265
|
// Instant fill using nativeInputValueSetter for React/Angular compatibility
|
|
266
266
|
await ctx.sendCommand('Runtime.evaluate', {
|
|
267
|
-
expression: `(() => {
|
|
268
|
-
const el = document.activeElement;
|
|
269
|
-
if (!el) return;
|
|
270
|
-
const val = ${JSON.stringify(args.text)};
|
|
271
|
-
if ('value' in el) {
|
|
272
|
-
const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
|
|
273
|
-
|| Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
|
|
274
|
-
if (nativeSetter) nativeSetter.call(el, val);
|
|
275
|
-
else el.value = val;
|
|
276
|
-
} else if (el.isContentEditable) {
|
|
277
|
-
document.execCommand('insertText', false, val);
|
|
278
|
-
}
|
|
279
|
-
el.dispatchEvent(new Event('input', {bubbles:true}));
|
|
280
|
-
el.dispatchEvent(new Event('change', {bubbles:true}));
|
|
267
|
+
expression: `(() => {
|
|
268
|
+
const el = document.activeElement;
|
|
269
|
+
if (!el) return;
|
|
270
|
+
const val = ${JSON.stringify(args.text)};
|
|
271
|
+
if ('value' in el) {
|
|
272
|
+
const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
|
|
273
|
+
|| Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
|
|
274
|
+
if (nativeSetter) nativeSetter.call(el, val);
|
|
275
|
+
else el.value = val;
|
|
276
|
+
} else if (el.isContentEditable) {
|
|
277
|
+
document.execCommand('insertText', false, val);
|
|
278
|
+
}
|
|
279
|
+
el.dispatchEvent(new Event('input', {bubbles:true}));
|
|
280
|
+
el.dispatchEvent(new Event('change', {bubbles:true}));
|
|
281
281
|
})()`,
|
|
282
282
|
}, sess);
|
|
283
283
|
}
|
|
@@ -308,38 +308,38 @@ async function handleFill(ctx, args) {
|
|
|
308
308
|
}, retryTimeout);
|
|
309
309
|
const fieldType = field.type || 'text';
|
|
310
310
|
const r = await ctx.sendCommand('Runtime.callFunctionOn', {
|
|
311
|
-
functionDeclaration: `function() {
|
|
312
|
-
this.scrollIntoView({ block: "center" });
|
|
313
|
-
const type = ${JSON.stringify(fieldType)};
|
|
314
|
-
const val = ${JSON.stringify(field.value)};
|
|
315
|
-
if (type === "checkbox") {
|
|
316
|
-
const wanted = val === "true" || val === "1";
|
|
317
|
-
if (this.checked !== wanted) this.click();
|
|
318
|
-
return { ok: true, value: String(this.checked) };
|
|
319
|
-
}
|
|
320
|
-
if (type === "radio") { this.click(); return { ok: true, value: val }; }
|
|
321
|
-
if (type === "select") {
|
|
322
|
-
let opt = Array.from(this.options).find(o => o.value === val || o.textContent.trim() === val);
|
|
323
|
-
if (!opt) return { error: "Option not found: " + val };
|
|
324
|
-
const nativeSetter = Object.getOwnPropertyDescriptor(HTMLSelectElement.prototype, 'value')?.set;
|
|
325
|
-
if (nativeSetter) nativeSetter.call(this, opt.value);
|
|
326
|
-
else this.value = opt.value;
|
|
327
|
-
this.dispatchEvent(new Event('input', {bubbles:true}));
|
|
328
|
-
this.dispatchEvent(new Event('change', {bubbles:true}));
|
|
329
|
-
return { ok: true, value: opt.textContent.trim() };
|
|
330
|
-
}
|
|
331
|
-
this.focus();
|
|
332
|
-
if ('value' in this) {
|
|
333
|
-
const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
|
|
334
|
-
|| Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
|
|
335
|
-
if (nativeSetter) nativeSetter.call(this, val);
|
|
336
|
-
else this.value = val;
|
|
337
|
-
} else if (this.isContentEditable) {
|
|
338
|
-
this.textContent = val;
|
|
339
|
-
}
|
|
340
|
-
this.dispatchEvent(new Event('input', {bubbles:true}));
|
|
341
|
-
this.dispatchEvent(new Event('change', {bubbles:true}));
|
|
342
|
-
return { ok: true, value: val.substring(0, 40) };
|
|
311
|
+
functionDeclaration: `function() {
|
|
312
|
+
this.scrollIntoView({ block: "center" });
|
|
313
|
+
const type = ${JSON.stringify(fieldType)};
|
|
314
|
+
const val = ${JSON.stringify(field.value)};
|
|
315
|
+
if (type === "checkbox") {
|
|
316
|
+
const wanted = val === "true" || val === "1";
|
|
317
|
+
if (this.checked !== wanted) this.click();
|
|
318
|
+
return { ok: true, value: String(this.checked) };
|
|
319
|
+
}
|
|
320
|
+
if (type === "radio") { this.click(); return { ok: true, value: val }; }
|
|
321
|
+
if (type === "select") {
|
|
322
|
+
let opt = Array.from(this.options).find(o => o.value === val || o.textContent.trim() === val);
|
|
323
|
+
if (!opt) return { error: "Option not found: " + val };
|
|
324
|
+
const nativeSetter = Object.getOwnPropertyDescriptor(HTMLSelectElement.prototype, 'value')?.set;
|
|
325
|
+
if (nativeSetter) nativeSetter.call(this, opt.value);
|
|
326
|
+
else this.value = opt.value;
|
|
327
|
+
this.dispatchEvent(new Event('input', {bubbles:true}));
|
|
328
|
+
this.dispatchEvent(new Event('change', {bubbles:true}));
|
|
329
|
+
return { ok: true, value: opt.textContent.trim() };
|
|
330
|
+
}
|
|
331
|
+
this.focus();
|
|
332
|
+
if ('value' in this) {
|
|
333
|
+
const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
|
|
334
|
+
|| Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
|
|
335
|
+
if (nativeSetter) nativeSetter.call(this, val);
|
|
336
|
+
else this.value = val;
|
|
337
|
+
} else if (this.isContentEditable) {
|
|
338
|
+
this.textContent = val;
|
|
339
|
+
}
|
|
340
|
+
this.dispatchEvent(new Event('input', {bubbles:true}));
|
|
341
|
+
this.dispatchEvent(new Event('change', {bubbles:true}));
|
|
342
|
+
return { ok: true, value: val.substring(0, 40) };
|
|
343
343
|
}`,
|
|
344
344
|
objectId,
|
|
345
345
|
returnByValue: true,
|
|
@@ -363,35 +363,35 @@ async function handleSelect(ctx, args) {
|
|
|
363
363
|
return resolveElementObjectId(ctx, sess, args.uid, args.selector, args.tabId);
|
|
364
364
|
}, retryTimeout);
|
|
365
365
|
const result = await ctx.sendCommand('Runtime.callFunctionOn', {
|
|
366
|
-
functionDeclaration: `function() {
|
|
367
|
-
const sel = this;
|
|
368
|
-
if (sel.tagName === "SELECT") {
|
|
369
|
-
const targetVal = ${JSON.stringify(args.value)};
|
|
370
|
-
let opt = Array.from(sel.options).find(o => o.value === targetVal);
|
|
371
|
-
if (!opt) opt = Array.from(sel.options).find(o => o.textContent.trim() === targetVal);
|
|
372
|
-
if (!opt) return { error: "Option not found: " + targetVal + ". Available: " + Array.from(sel.options).map(o => o.textContent.trim()).join(", ") };
|
|
373
|
-
|
|
374
|
-
const nativeSetter = Object.getOwnPropertyDescriptor(HTMLSelectElement.prototype, 'value')?.set;
|
|
375
|
-
if (nativeSetter) nativeSetter.call(sel, opt.value);
|
|
376
|
-
else sel.value = opt.value;
|
|
377
|
-
|
|
378
|
-
sel.dispatchEvent(new Event("input", { bubbles: true }));
|
|
379
|
-
sel.dispatchEvent(new Event("change", { bubbles: true }));
|
|
380
|
-
return { selected: opt.textContent.trim(), value: opt.value };
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
const role = sel.getAttribute("role");
|
|
384
|
-
const isCustomDropdown = role === "combobox" || role === "listbox" ||
|
|
385
|
-
sel.getAttribute("aria-haspopup") ||
|
|
386
|
-
sel.classList.toString().match(/MuiSelect|ant-select|react-select|Select/i);
|
|
387
|
-
|
|
388
|
-
if (isCustomDropdown) {
|
|
389
|
-
sel.scrollIntoView({ block: "center" });
|
|
390
|
-
sel.click();
|
|
391
|
-
return { customDropdown: true, message: "Custom dropdown opened — click the matching option" };
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
return { error: "Not a <select> element and not a recognized custom dropdown. Element: <" + sel.tagName.toLowerCase() + ">" };
|
|
366
|
+
functionDeclaration: `function() {
|
|
367
|
+
const sel = this;
|
|
368
|
+
if (sel.tagName === "SELECT") {
|
|
369
|
+
const targetVal = ${JSON.stringify(args.value)};
|
|
370
|
+
let opt = Array.from(sel.options).find(o => o.value === targetVal);
|
|
371
|
+
if (!opt) opt = Array.from(sel.options).find(o => o.textContent.trim() === targetVal);
|
|
372
|
+
if (!opt) return { error: "Option not found: " + targetVal + ". Available: " + Array.from(sel.options).map(o => o.textContent.trim()).join(", ") };
|
|
373
|
+
|
|
374
|
+
const nativeSetter = Object.getOwnPropertyDescriptor(HTMLSelectElement.prototype, 'value')?.set;
|
|
375
|
+
if (nativeSetter) nativeSetter.call(sel, opt.value);
|
|
376
|
+
else sel.value = opt.value;
|
|
377
|
+
|
|
378
|
+
sel.dispatchEvent(new Event("input", { bubbles: true }));
|
|
379
|
+
sel.dispatchEvent(new Event("change", { bubbles: true }));
|
|
380
|
+
return { selected: opt.textContent.trim(), value: opt.value };
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
const role = sel.getAttribute("role");
|
|
384
|
+
const isCustomDropdown = role === "combobox" || role === "listbox" ||
|
|
385
|
+
sel.getAttribute("aria-haspopup") ||
|
|
386
|
+
sel.classList.toString().match(/MuiSelect|ant-select|react-select|Select/i);
|
|
387
|
+
|
|
388
|
+
if (isCustomDropdown) {
|
|
389
|
+
sel.scrollIntoView({ block: "center" });
|
|
390
|
+
sel.click();
|
|
391
|
+
return { customDropdown: true, message: "Custom dropdown opened — click the matching option" };
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
return { error: "Not a <select> element and not a recognized custom dropdown. Element: <" + sel.tagName.toLowerCase() + ">" };
|
|
395
395
|
}`,
|
|
396
396
|
objectId,
|
|
397
397
|
returnByValue: true,
|
|
@@ -403,19 +403,19 @@ async function handleSelect(ctx, args) {
|
|
|
403
403
|
if (v?.customDropdown) {
|
|
404
404
|
await sleep(300);
|
|
405
405
|
const clickResult = await ctx.sendCommand('Runtime.evaluate', {
|
|
406
|
-
expression: `(() => {
|
|
407
|
-
const val = ${JSON.stringify(args.value)};
|
|
408
|
-
const options = document.querySelectorAll('[role="option"], [role="listitem"], li[data-value], .MuiMenuItem-root, .ant-select-item, [class*="option"]');
|
|
409
|
-
for (const opt of options) {
|
|
410
|
-
const text = opt.textContent.trim();
|
|
411
|
-
const value = opt.getAttribute("data-value") || opt.getAttribute("value") || "";
|
|
412
|
-
if (text === val || value === val || text.toLowerCase() === val.toLowerCase()) {
|
|
413
|
-
opt.scrollIntoView({ block: "center" });
|
|
414
|
-
opt.click();
|
|
415
|
-
return { selected: text, value: value || text };
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
return { error: "Option not found in custom dropdown: " + val + ". Visible options: " + Array.from(options).slice(0, 10).map(o => o.textContent.trim()).join(", ") };
|
|
406
|
+
expression: `(() => {
|
|
407
|
+
const val = ${JSON.stringify(args.value)};
|
|
408
|
+
const options = document.querySelectorAll('[role="option"], [role="listitem"], li[data-value], .MuiMenuItem-root, .ant-select-item, [class*="option"]');
|
|
409
|
+
for (const opt of options) {
|
|
410
|
+
const text = opt.textContent.trim();
|
|
411
|
+
const value = opt.getAttribute("data-value") || opt.getAttribute("value") || "";
|
|
412
|
+
if (text === val || value === val || text.toLowerCase() === val.toLowerCase()) {
|
|
413
|
+
opt.scrollIntoView({ block: "center" });
|
|
414
|
+
opt.click();
|
|
415
|
+
return { selected: text, value: value || text };
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
return { error: "Option not found in custom dropdown: " + val + ". Visible options: " + Array.from(options).slice(0, 10).map(o => o.textContent.trim()).join(", ") };
|
|
419
419
|
})()`,
|
|
420
420
|
returnByValue: true,
|
|
421
421
|
}, sess);
|
|
@@ -696,10 +696,10 @@ async function handleFocus(ctx, args) {
|
|
|
696
696
|
const retryTimeout = args.timeout || ctx.config.actionTimeout;
|
|
697
697
|
const { objectId, resolvedSession } = await withRetry(() => resolveElementObjectId(ctx, sess, args.uid, args.selector, args.tabId), retryTimeout);
|
|
698
698
|
const result = await ctx.sendCommand('Runtime.callFunctionOn', {
|
|
699
|
-
functionDeclaration: `function() {
|
|
700
|
-
this.scrollIntoView({ block: "center" });
|
|
701
|
-
this.focus();
|
|
702
|
-
return { tag: this.tagName.toLowerCase(), label: (this.getAttribute("aria-label") || this.textContent || "").trim().substring(0, 60) };
|
|
699
|
+
functionDeclaration: `function() {
|
|
700
|
+
this.scrollIntoView({ block: "center" });
|
|
701
|
+
this.focus();
|
|
702
|
+
return { tag: this.tagName.toLowerCase(), label: (this.getAttribute("aria-label") || this.textContent || "").trim().substring(0, 60) };
|
|
703
703
|
}`,
|
|
704
704
|
objectId,
|
|
705
705
|
returnByValue: true,
|
|
@@ -719,14 +719,14 @@ async function handleCheck(ctx, args) {
|
|
|
719
719
|
return resolveElementObjectId(ctx, sess, args.uid, args.selector, args.tabId);
|
|
720
720
|
}, retryTimeout);
|
|
721
721
|
await ctx.sendCommand('Runtime.callFunctionOn', {
|
|
722
|
-
functionDeclaration: `function() {
|
|
723
|
-
this.scrollIntoView({ block: "center" });
|
|
724
|
-
const desired = ${args.checked === true};
|
|
725
|
-
if (this.checked !== desired) {
|
|
726
|
-
this.click();
|
|
727
|
-
this.dispatchEvent(new Event('change', { bubbles: true }));
|
|
728
|
-
}
|
|
729
|
-
return { checked: this.checked };
|
|
722
|
+
functionDeclaration: `function() {
|
|
723
|
+
this.scrollIntoView({ block: "center" });
|
|
724
|
+
const desired = ${args.checked === true};
|
|
725
|
+
if (this.checked !== desired) {
|
|
726
|
+
this.click();
|
|
727
|
+
this.dispatchEvent(new Event('change', { bubbles: true }));
|
|
728
|
+
}
|
|
729
|
+
return { checked: this.checked };
|
|
730
730
|
}`,
|
|
731
731
|
objectId,
|
|
732
732
|
returnByValue: true,
|
|
@@ -785,14 +785,14 @@ async function resolveElement(ctx, sess, uid, selector, tabId) {
|
|
|
785
785
|
throw Errors.staleRef(uid);
|
|
786
786
|
// Get bounding rect and element info via JS
|
|
787
787
|
const info = await ctx.sendCommand('Runtime.callFunctionOn', {
|
|
788
|
-
functionDeclaration: `function() {
|
|
789
|
-
const r = this.getBoundingClientRect();
|
|
790
|
-
return {
|
|
791
|
-
x: r.x + r.width / 2, y: r.y + r.height / 2,
|
|
792
|
-
w: r.width, h: r.height,
|
|
793
|
-
tag: this.tagName.toLowerCase(),
|
|
794
|
-
label: (this.getAttribute('aria-label') || this.textContent || '').trim().substring(0, 60),
|
|
795
|
-
};
|
|
788
|
+
functionDeclaration: `function() {
|
|
789
|
+
const r = this.getBoundingClientRect();
|
|
790
|
+
return {
|
|
791
|
+
x: r.x + r.width / 2, y: r.y + r.height / 2,
|
|
792
|
+
w: r.width, h: r.height,
|
|
793
|
+
tag: this.tagName.toLowerCase(),
|
|
794
|
+
label: (this.getAttribute('aria-label') || this.textContent || '').trim().substring(0, 60),
|
|
795
|
+
};
|
|
796
796
|
}`,
|
|
797
797
|
objectId: object.objectId,
|
|
798
798
|
returnByValue: true,
|
|
@@ -804,16 +804,16 @@ async function resolveElement(ctx, sess, uid, selector, tabId) {
|
|
|
804
804
|
if (!selector)
|
|
805
805
|
throw new Error('Provide uid or selector to identify the element.');
|
|
806
806
|
const result = await ctx.sendCommand('Runtime.evaluate', {
|
|
807
|
-
expression: `(() => {
|
|
808
|
-
const el = document.querySelector(${JSON.stringify(selector)});
|
|
809
|
-
if (!el) return null;
|
|
810
|
-
const r = el.getBoundingClientRect();
|
|
811
|
-
return {
|
|
812
|
-
x: r.x + r.width / 2, y: r.y + r.height / 2,
|
|
813
|
-
w: r.width, h: r.height,
|
|
814
|
-
tag: el.tagName.toLowerCase(),
|
|
815
|
-
label: (el.getAttribute('aria-label') || el.textContent || '').trim().substring(0, 60),
|
|
816
|
-
};
|
|
807
|
+
expression: `(() => {
|
|
808
|
+
const el = document.querySelector(${JSON.stringify(selector)});
|
|
809
|
+
if (!el) return null;
|
|
810
|
+
const r = el.getBoundingClientRect();
|
|
811
|
+
return {
|
|
812
|
+
x: r.x + r.width / 2, y: r.y + r.height / 2,
|
|
813
|
+
w: r.width, h: r.height,
|
|
814
|
+
tag: el.tagName.toLowerCase(),
|
|
815
|
+
label: (el.getAttribute('aria-label') || el.textContent || '').trim().substring(0, 60),
|
|
816
|
+
};
|
|
817
817
|
})()`,
|
|
818
818
|
returnByValue: true,
|
|
819
819
|
}, sess);
|
|
@@ -969,16 +969,16 @@ function getAdjacentKey(char) {
|
|
|
969
969
|
async function findAndSetFileInput(ctx, sess, files) {
|
|
970
970
|
try {
|
|
971
971
|
const inputObj = await ctx.sendCommand('Runtime.evaluate', {
|
|
972
|
-
expression: `(() => {
|
|
973
|
-
function find(root) {
|
|
974
|
-
const el = root.querySelector('input[type="file"]');
|
|
975
|
-
if (el) return el;
|
|
976
|
-
for (const s of root.querySelectorAll('*')) {
|
|
977
|
-
if (s.shadowRoot) { const f = find(s.shadowRoot); if (f) return f; }
|
|
978
|
-
}
|
|
979
|
-
return null;
|
|
980
|
-
}
|
|
981
|
-
return find(document);
|
|
972
|
+
expression: `(() => {
|
|
973
|
+
function find(root) {
|
|
974
|
+
const el = root.querySelector('input[type="file"]');
|
|
975
|
+
if (el) return el;
|
|
976
|
+
for (const s of root.querySelectorAll('*')) {
|
|
977
|
+
if (s.shadowRoot) { const f = find(s.shadowRoot); if (f) return f; }
|
|
978
|
+
}
|
|
979
|
+
return null;
|
|
980
|
+
}
|
|
981
|
+
return find(document);
|
|
982
982
|
})()`,
|
|
983
983
|
returnByValue: false,
|
|
984
984
|
}, sess);
|
|
@@ -992,9 +992,9 @@ async function findAndSetFileInput(ctx, sess, files) {
|
|
|
992
992
|
}, sess);
|
|
993
993
|
// Dispatch change+input events
|
|
994
994
|
await ctx.sendCommand('Runtime.callFunctionOn', {
|
|
995
|
-
functionDeclaration: `function() {
|
|
996
|
-
this.dispatchEvent(new Event('change', { bubbles: true }));
|
|
997
|
-
this.dispatchEvent(new Event('input', { bubbles: true }));
|
|
995
|
+
functionDeclaration: `function() {
|
|
996
|
+
this.dispatchEvent(new Event('change', { bubbles: true }));
|
|
997
|
+
this.dispatchEvent(new Event('input', { bubbles: true }));
|
|
998
998
|
}`,
|
|
999
999
|
objectId: inputObj.result.objectId,
|
|
1000
1000
|
}, sess).catch(() => { });
|
package/dist/tools/tabs.js
CHANGED
|
@@ -253,9 +253,9 @@ export async function handleNew(ctx, args) {
|
|
|
253
253
|
// Phase 5: Wait for load
|
|
254
254
|
try {
|
|
255
255
|
await ctx.sendCommand('Runtime.evaluate', {
|
|
256
|
-
expression: `new Promise(resolve => {
|
|
257
|
-
if (document.readyState === 'complete') return resolve(true);
|
|
258
|
-
window.addEventListener('load', () => resolve(true), { once: true });
|
|
256
|
+
expression: `new Promise(resolve => {
|
|
257
|
+
if (document.readyState === 'complete') return resolve(true);
|
|
258
|
+
window.addEventListener('load', () => resolve(true), { once: true });
|
|
259
259
|
})`,
|
|
260
260
|
awaitPromise: true,
|
|
261
261
|
returnByValue: true,
|
package/package.json
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cdp-mcp-server",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.2",
|
|
4
4
|
"description": "The power user's browser MCP — connects to your real Chrome/Edge/Brave with full DevTools capabilities",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"cdp-mcp-server": "dist/index.js"
|
|
10
|
+
},
|
|
8
11
|
"author": "Tushar Agarwal",
|
|
9
12
|
"license": "MIT",
|
|
10
13
|
"repository": {
|
|
@@ -25,18 +28,9 @@
|
|
|
25
28
|
"browser-mcp"
|
|
26
29
|
],
|
|
27
30
|
"engines": {
|
|
28
|
-
"node": ">=
|
|
29
|
-
},
|
|
30
|
-
"dependencies": {
|
|
31
|
-
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
32
|
-
"ws": "^8.0.0"
|
|
33
|
-
},
|
|
34
|
-
"devDependencies": {
|
|
35
|
-
"@types/node": "^20.19.39",
|
|
36
|
-
"@types/ws": "^8.18.1",
|
|
37
|
-
"typescript": "^5.9.3",
|
|
38
|
-
"vitest": "^2.1.9"
|
|
31
|
+
"node": ">=20"
|
|
39
32
|
},
|
|
33
|
+
"packageManager": "pnpm@12.6.0",
|
|
40
34
|
"scripts": {
|
|
41
35
|
"build": "tsc",
|
|
42
36
|
"start": "node dist/index.js",
|
|
@@ -48,5 +42,15 @@
|
|
|
48
42
|
"lint": "tsc --noEmit",
|
|
49
43
|
"typecheck": "tsc --noEmit",
|
|
50
44
|
"clean": "node -e \"const fs=require('fs');fs.rmSync('dist',{recursive:true,force:true})\""
|
|
45
|
+
},
|
|
46
|
+
"dependencies": {
|
|
47
|
+
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
48
|
+
"ws": "^8.0.0"
|
|
49
|
+
},
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"@types/node": "^20.19.39",
|
|
52
|
+
"@types/ws": "^8.18.1",
|
|
53
|
+
"typescript": "^5.9.3",
|
|
54
|
+
"vitest": "^2.1.9"
|
|
51
55
|
}
|
|
52
|
-
}
|
|
56
|
+
}
|