cdp-tunnel 1.0.13 → 1.0.14

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.
Files changed (68) hide show
  1. package/extension-new/background.js +6 -1
  2. package/extension-new/cdp/handler/special.js +47 -27
  3. package/extension-new/core/state.js +64 -6
  4. package/extension-new/core/websocket.js +124 -19
  5. package/package.json +9 -2
  6. package/server/proxy-server.js +45 -34
  7. package/.github/workflows/publish.yml +0 -92
  8. package/.github/workflows/release-assets.yml +0 -50
  9. package/PUBLISH.md +0 -65
  10. package/console-test.js +0 -52
  11. package/docs/README_CN.md +0 -204
  12. package/docs/config-page-screenshot.png +0 -0
  13. package/final-console-test.js +0 -105
  14. package/simple-tab-group-test.js +0 -56
  15. package/test-cdp-connection.js +0 -85
  16. package/test-cdp-groups.js +0 -71
  17. package/test-check-newtab.js +0 -144
  18. package/test-chrome-native.js +0 -140
  19. package/test-client-connected.js +0 -99
  20. package/test-compare-formats.js +0 -88
  21. package/test-context-features.js +0 -113
  22. package/test-create-tab.js +0 -113
  23. package/test-debug-broadcast.js +0 -52
  24. package/test-debug-targets.js +0 -127
  25. package/test-expose-newtab.js +0 -164
  26. package/test-expose-shared.js +0 -189
  27. package/test-final-logs.js +0 -110
  28. package/test-fresh-chromium.js +0 -153
  29. package/test-init-script.js +0 -128
  30. package/test-keepalive.js +0 -89
  31. package/test-launch-chromium.js +0 -140
  32. package/test-launch-vs-connect.js +0 -149
  33. package/test-listen-events.js +0 -102
  34. package/test-monitor.js +0 -83
  35. package/test-multiple-cdp-groups.js +0 -78
  36. package/test-native.js +0 -96
  37. package/test-page-connection.js +0 -74
  38. package/test-playwright-connection.js +0 -45
  39. package/test-playwright-groups.js +0 -47
  40. package/test-playwright-pages.js +0 -47
  41. package/test-playwright-sequence.js +0 -81
  42. package/test-proper-context.js +0 -129
  43. package/test-real-final.js +0 -251
  44. package/test-real-scenario-v2.js +0 -166
  45. package/test-real-scenario-v3.js +0 -231
  46. package/test-real-scenario.js +0 -104
  47. package/test-server-logs.js +0 -98
  48. package/test-session-id.js +0 -91
  49. package/test-simple-cdp-groups.js +0 -44
  50. package/test-simple-context.js +0 -137
  51. package/test-tab-group-simple.js +0 -58
  52. package/test-tab-grouping.js +0 -48
  53. package/test-three-pages.js +0 -192
  54. package/test-wait-for-page.js +0 -95
  55. package/test-with-logs.js +0 -118
  56. package/test-ws-groups.js +0 -59
  57. package/tests/e2e-auto-test.js +0 -304
  58. package/tests/iframe-test-page.html +0 -89
  59. package/tests/playwright-demo.js +0 -45
  60. package/tests/playwright-interactive.js +0 -261
  61. package/tests/playwright-multi-demo.js +0 -60
  62. package/tests/playwright-multi.js +0 -85
  63. package/tests/playwright-single.js +0 -41
  64. package/tests/screenshot-config.js +0 -35
  65. package/tests/test-client.js +0 -89
  66. package/tests/test-douyin-iframe.js +0 -171
  67. package/tests/test-iframe-debug.js +0 -204
  68. package/tests/test-multi-client.js +0 -129
@@ -1,102 +0,0 @@
1
- const { chromium } = require('playwright');
2
- const fs = require('fs');
3
- const path = require('path');
4
- const http = require('http');
5
-
6
- let serverPort = 10000;
7
-
8
- async function test() {
9
- serverPort++;
10
- const currentPort = serverPort;
11
-
12
- const htmlContent1 = `
13
- <!DOCTYPE html>
14
- <html>
15
- <head><title>Page 1</title></head>
16
- <body>
17
- <h1>Page 1</h1>
18
- <a href="page2.html" target="_blank" id="link1">Open New Tab</a>
19
- </body>
20
- </html>
21
- `;
22
-
23
- const htmlContent2 = `
24
- <!DOCTYPE html>
25
- <html>
26
- <head><title>Page 2</title></head>
27
- <body>
28
- <h1>Page 2 - New Tab</h1>
29
- </body>
30
- </html>
31
- `;
32
-
33
- const serverDir = '/tmp/test-listen';
34
- if (!fs.existsSync(serverDir)) fs.mkdirSync(serverDir, { recursive: true });
35
- fs.writeFileSync(path.join(serverDir, 'page1.html'), htmlContent1);
36
- fs.writeFileSync(path.join(serverDir, 'page2.html'), htmlContent2);
37
-
38
- const server = http.createServer((req, res) => {
39
- let filePath = path.join(serverDir, req.url === '/' ? 'page1.html' : req.url);
40
- if (fs.existsSync(filePath)) {
41
- res.writeHead(200, { 'Content-Type': 'text/html' });
42
- res.end(fs.readFileSync(filePath));
43
- } else {
44
- res.writeHead(404);
45
- res.end('Not found');
46
- }
47
- });
48
-
49
- await new Promise(resolve => server.listen(currentPort, resolve));
50
- console.log(`Server: http://localhost:${currentPort}`);
51
-
52
- console.log('\n[TEST] Connecting...');
53
- const browser = await chromium.connectOverCDP('http://localhost:9221');
54
- console.log('[TEST] Connected!');
55
-
56
- // 监听 Target.targetCreated 事件
57
- console.log('[TEST] Setting up Target.targetCreated listener...');
58
- const session = await browser.newBrowserCDPSession();
59
-
60
- let targetCreatedReceived = false;
61
- let targetCreatedCount = 0;
62
-
63
- session.on('Target.targetCreated', (params) => {
64
- targetCreatedReceived = true;
65
- targetCreatedCount++;
66
- console.log('[EVENT] Target.targetCreated:', {
67
- targetId: params.targetInfo?.targetId?.substring(0, 8),
68
- type: params.targetInfo?.type,
69
- url: params.targetInfo?.url?.substring(0, 50)
70
- });
71
- });
72
-
73
- // 启用 Target 域
74
- await session.send('Target.setDiscoverTargets', { discover: true });
75
- console.log('[TEST] Target.setDiscoverTargets sent');
76
-
77
- console.log('[TEST] Creating context...');
78
- const context = await browser.newContext();
79
-
80
- console.log('[TEST] Creating page...');
81
- const page1 = await context.newPage();
82
- await page1.goto(`http://localhost:${currentPort}/page1.html`, { waitUntil: 'domcontentloaded' });
83
- console.log('[TEST] Page loaded');
84
-
85
- console.log('[TEST] Clicking link...');
86
- await page1.click('#link1');
87
-
88
- console.log('[TEST] Waiting 5 seconds...');
89
- await new Promise(r => setTimeout(r, 5000));
90
-
91
- console.log('\n[TEST] Results:');
92
- console.log(` Target.targetCreated received: ${targetCreatedReceived}`);
93
- console.log(` Target.targetCreated count: ${targetCreatedCount}`);
94
-
95
- const allPages = context.pages();
96
- console.log(` Pages in context: ${allPages.length}`);
97
-
98
- server.close();
99
- await browser.close();
100
- }
101
-
102
- test().then(() => process.exit(0));
package/test-monitor.js DELETED
@@ -1,83 +0,0 @@
1
- const { chromium } = require('playwright');
2
- const fs = require('fs');
3
- const path = require('path');
4
- const http = require('http');
5
-
6
- let serverPort = 9800;
7
-
8
- async function test() {
9
- serverPort++;
10
- const currentPort = serverPort;
11
-
12
- const htmlContent1 = `
13
- <!DOCTYPE html>
14
- <html>
15
- <head><title>Page 1</title></head>
16
- <body>
17
- <h1>Page 1</h1>
18
- <a href="page2.html" target="_blank" id="link1">Open New Tab</a>
19
- </body>
20
- </html>
21
- `;
22
-
23
- const htmlContent2 = `
24
- <!DOCTYPE html>
25
- <html>
26
- <head><title>Page 2</title></head>
27
- <body>
28
- <h1>Page 2 - New Tab</h1>
29
- </body>
30
- </html>
31
- `;
32
-
33
- const serverDir = '/tmp/test-monitor';
34
- if (!fs.existsSync(serverDir)) fs.mkdirSync(serverDir, { recursive: true });
35
- fs.writeFileSync(path.join(serverDir, 'page1.html'), htmlContent1);
36
- fs.writeFileSync(path.join(serverDir, 'page2.html'), htmlContent2);
37
-
38
- const server = http.createServer((req, res) => {
39
- let filePath = path.join(serverDir, req.url === '/' ? 'page1.html' : req.url);
40
- if (fs.existsSync(filePath)) {
41
- res.writeHead(200, { 'Content-Type': 'text/html' });
42
- res.end(fs.readFileSync(filePath));
43
- } else {
44
- res.writeHead(404);
45
- res.end('Not found');
46
- }
47
- });
48
-
49
- await new Promise(resolve => server.listen(currentPort, resolve));
50
- console.log(`Server: http://localhost:${currentPort}`);
51
-
52
- console.log('\n[TEST] Connecting to CDP Tunnel...');
53
- const browser = await chromium.connectOverCDP('http://localhost:9221');
54
- console.log('[TEST] Connected!');
55
-
56
- console.log('[TEST] Creating context...');
57
- const context = await browser.newContext();
58
-
59
- console.log('[TEST] Creating page...');
60
- const page1 = await context.newPage();
61
- await page1.goto(`http://localhost:${currentPort}/page1.html`, { waitUntil: 'domcontentloaded' });
62
- console.log('[TEST] Page loaded');
63
-
64
- console.log('[TEST] Waiting 3 seconds...');
65
- await new Promise(r => setTimeout(r, 3000));
66
-
67
- console.log('[TEST] Clicking link to open new tab...');
68
- await page1.click('#link1');
69
-
70
- console.log('[TEST] Waiting 5 seconds...');
71
- await new Promise(r => setTimeout(r, 5000));
72
-
73
- console.log('[TEST] Checking pages...');
74
- const allPages = context.pages();
75
- console.log(`[TEST] Total pages: ${allPages.length}`);
76
-
77
- server.close();
78
- await browser.close();
79
-
80
- console.log('[TEST] Done!');
81
- }
82
-
83
- test().then(() => process.exit(0));
@@ -1,78 +0,0 @@
1
- const { chromium } = require('playwright');
2
-
3
- async function testMultipleCDPGroups() {
4
- console.log('=== 测试多个CDP连接的标签分组功能 ===\n');
5
-
6
- try {
7
- // 第一个CDP连接
8
- console.log('创建第一个CDP连接...');
9
- const browser1 = await chromium.connectOverCDP('http://localhost:9221');
10
- console.log('第一个CDP连接成功');
11
-
12
- // 创建第一个连接的标签页
13
- console.log('第一个连接:创建第一个标签页...');
14
- const page1_1 = await browser1.newPage();
15
- await page1_1.goto('https://www.baidu.com/');
16
- await page1_1.waitForTimeout(3000);
17
- console.log('第一个连接:第一个标签页创建完成');
18
-
19
- // 创建第二个标签页
20
- console.log('第一个连接:创建第二个标签页...');
21
- const page1_2 = await browser1.newPage();
22
- await page1_2.goto('https://www.google.com/');
23
- await page1_2.waitForTimeout(3000);
24
- console.log('第一个连接:第二个标签页创建完成');
25
-
26
- // 等待一段时间,确保标签页被添加到组中
27
- console.log('等待5秒,确保标签页被添加到组中...');
28
- await new Promise(resolve => setTimeout(resolve, 5000));
29
-
30
- // 关闭第一个连接
31
- console.log('关闭第一个CDP连接...');
32
- await browser1.close();
33
- console.log('第一个CDP连接已关闭');
34
-
35
- // 等待一段时间
36
- console.log('等待3秒...');
37
- await new Promise(resolve => setTimeout(resolve, 3000));
38
-
39
- // 第二个CDP连接
40
- console.log('\n创建第二个CDP连接...');
41
- const browser2 = await chromium.connectOverCDP('http://localhost:9221');
42
- console.log('第二个CDP连接成功');
43
-
44
- // 创建第二个连接的标签页
45
- console.log('第二个连接:创建第一个标签页...');
46
- const page2_1 = await browser2.newPage();
47
- await page2_1.goto('https://www.github.com/');
48
- await page2_1.waitForTimeout(3000);
49
- console.log('第二个连接:第一个标签页创建完成');
50
-
51
- // 创建第二个标签页
52
- console.log('第二个连接:创建第二个标签页...');
53
- const page2_2 = await browser2.newPage();
54
- await page2_2.goto('https://www.stackoverflow.com/');
55
- await page2_2.waitForTimeout(3000);
56
- console.log('第二个连接:第二个标签页创建完成');
57
-
58
- // 等待一段时间,确保标签页被添加到组中
59
- console.log('等待5秒,确保标签页被添加到组中...');
60
- await new Promise(resolve => setTimeout(resolve, 5000));
61
-
62
- // 关闭第二个连接
63
- console.log('关闭第二个CDP连接...');
64
- await browser2.close();
65
- console.log('第二个CDP连接已关闭');
66
-
67
- console.log('\n=== 测试完成 ===');
68
- console.log('请检查Chrome浏览器中的标签组:');
69
- console.log('1. 第一个CDP连接应该创建了一个标签组,包含百度和Google两个标签页');
70
- console.log('2. 第二个CDP连接应该创建了另一个标签组,包含GitHub和Stack Overflow两个标签页');
71
- console.log('3. 两个标签组应该有不同的名称和颜色');
72
-
73
- } catch (error) {
74
- console.error('测试过程中出现错误:', error);
75
- }
76
- }
77
-
78
- testMultipleCDPGroups();
package/test-native.js DELETED
@@ -1,96 +0,0 @@
1
- const { chromium } = require('playwright');
2
- const fs = require('fs');
3
- const path = require('path');
4
- const http = require('http');
5
-
6
- let serverPort = 10100;
7
-
8
- async function test() {
9
- serverPort++;
10
- const currentPort = serverPort;
11
-
12
- const htmlContent1 = `
13
- <!DOCTYPE html>
14
- <html>
15
- <head><title>Page 1</title></head>
16
- <body>
17
- <h1>Page 1</h1>
18
- <a href="page2.html" target="_blank" id="link1">Open New Tab</a>
19
- </body>
20
- </html>
21
- `;
22
-
23
- const htmlContent2 = `
24
- <!DOCTYPE html>
25
- <html>
26
- <head><title>Page 2</title></head>
27
- <body>
28
- <h1>Page 2 - New Tab</h1>
29
- </body>
30
- </html>
31
- `;
32
-
33
- const serverDir = '/tmp/test-wait';
34
- if (!fs.existsSync(serverDir)) fs.mkdirSync(serverDir, { recursive: true });
35
- fs.writeFileSync(path.join(serverDir, 'page1.html'), htmlContent1);
36
- fs.writeFileSync(path.join(serverDir, 'page2.html'), htmlContent2);
37
-
38
- const server = http.createServer((req, res) => {
39
- let filePath = path.join(serverDir, req.url === '/' ? 'page1.html' : req.url);
40
- if (fs.existsSync(filePath)) {
41
- res.writeHead(200, { 'Content-Type': 'text/html' });
42
- res.end(fs.readFileSync(filePath));
43
- } else {
44
- res.writeHead(404);
45
- res.end('Not found');
46
- }
47
- });
48
-
49
- await new Promise(resolve => server.listen(currentPort, resolve));
50
- console.log(`Server: http://localhost:${currentPort}`);
51
-
52
- console.log('\n[TEST] Connecting to CDP Tunnel (port 9221)...');
53
- const browser = await chromium.connectOverCDP('http://localhost:9221');
54
- console.log('[TEST] Connected!');
55
-
56
- console.log('[TEST] Creating context...');
57
- const context = await browser.newContext();
58
-
59
- console.log('[TEST] Creating page...');
60
- const page1 = await context.newPage();
61
- await page1.goto(`http://localhost:${currentPort}/page1.html`, { waitUntil: 'domcontentloaded' });
62
- console.log('[TEST] Page loaded');
63
-
64
- console.log('[TEST] Setting up page event listener...');
65
- let newPageReceived = false;
66
- context.on('page', (page) => {
67
- newPageReceived = true;
68
- console.log('[EVENT] New page created:', page.url());
69
- });
70
-
71
- console.log('[TEST] Clicking link and waiting for new page...');
72
- try {
73
- const [newPage] = await Promise.all([
74
- context.waitForEvent('page', { timeout: 10000 }),
75
- page1.click('#link1')
76
- ]);
77
- console.log('[TEST] New page captured:', newPage.url());
78
- } catch (e) {
79
- console.log('[TEST] Timeout waiting for new page:', e.message);
80
- }
81
-
82
- console.log('\n[TEST] Checking pages...');
83
- const allPages = context.pages();
84
- console.log(`[TEST] Total pages: ${allPages.length}`);
85
- allPages.forEach((p, i) => {
86
- console.log(` Page ${i}: ${p.url()}`);
87
- });
88
-
89
- console.log(`\n[TEST] New page event received: ${newPageReceived}`);
90
- console.log(`[TEST] RESULT: ${allPages.length >= 2 ? 'PASS' : 'FAIL'}`);
91
-
92
- server.close();
93
- await browser.close();
94
- }
95
-
96
- test().then(() => process.exit(0));
@@ -1,74 +0,0 @@
1
- const WebSocket = require('ws');
2
-
3
- const TARGET_ID = '4724AF3A60A419ECDEC2002A153733A2'; // 百度首页
4
-
5
- console.log('[Page Test] Connecting to specific page...');
6
-
7
- const ws = new WebSocket(`ws://localhost:9221/devtools/page/${TARGET_ID}`);
8
-
9
- ws.on('open', () => {
10
- console.log('[Page Test] Connected to page!');
11
-
12
- ws.send(JSON.stringify({
13
- id: 1,
14
- method: 'Page.enable',
15
- params: {}
16
- }));
17
-
18
- console.log('[Page Test] Enabled Page domain');
19
-
20
- setTimeout(() => {
21
- ws.send(JSON.stringify({
22
- id: 2,
23
- method: 'Runtime.evaluate',
24
- params: {
25
- expression: 'document.title'
26
- }
27
- }));
28
- console.log('[Page Test] Getting page title...');
29
- }, 500);
30
-
31
- setTimeout(() => {
32
- ws.send(JSON.stringify({
33
- id: 3,
34
- method: 'Page.captureScreenshot',
35
- params: {}
36
- }));
37
- console.log('[Page Test] Taking screenshot...');
38
- }, 1000);
39
- });
40
-
41
- ws.on('message', (data) => {
42
- try {
43
- const msg = JSON.parse(data.toString());
44
-
45
- if (msg.id) {
46
- console.log('[Page Test] Response #' + msg.id + ':', {
47
- success: !!msg.result,
48
- error: msg.error,
49
- result: msg.result?.result?.value ||
50
- (msg.result?.data ? `screenshot (${msg.result.data.length} chars)` : undefined)
51
- });
52
- } else if (msg.method) {
53
- console.log('[Page Test] Event:', msg.method);
54
- } else {
55
- console.log('[Page Test] Other message:', msg);
56
- }
57
- } catch (e) {
58
- console.log('[Page Test] Raw message:', data.toString().substring(0, 100));
59
- }
60
- });
61
-
62
- ws.on('close', (code, reason) => {
63
- console.log('[Page Test] Connection closed:', code, reason.toString());
64
- });
65
-
66
- ws.on('error', (err) => {
67
- console.error('[Page Test] Error:', err.message);
68
- });
69
-
70
- setTimeout(() => {
71
- console.log('\n[Page Test] Test completed, closing connection...');
72
- ws.close();
73
- process.exit(0);
74
- }, 3000);
@@ -1,45 +0,0 @@
1
- const { chromium } = require('playwright');
2
-
3
- async function testPlaywright() {
4
- console.log('[Playwright Test] Connecting to CDP proxy...');
5
-
6
- try {
7
- const browser = await chromium.connectOverCDP('http://localhost:9221');
8
- console.log('[Playwright Test] Connected successfully!');
9
-
10
- const contexts = browser.contexts();
11
- console.log(`[Playwright Test] Found ${contexts.length} context(s)`);
12
-
13
- if (contexts.length > 0) {
14
- const context = contexts[0];
15
- const pages = context.pages();
16
- console.log(`[Playwright Test] Found ${pages.length} page(s) in first context`);
17
-
18
- if (pages.length > 0) {
19
- const page = pages[0];
20
- console.log(`[Playwright Test] First page URL: ${page.url()}`);
21
-
22
- console.log('[Playwright Test] Trying to navigate to a new page...');
23
- const newPage = await context.newPage();
24
- await newPage.goto('https://www.example.com');
25
- console.log(`[Playwright Test] New page URL: ${newPage.url()}`);
26
-
27
- await newPage.waitForTimeout(2000);
28
-
29
- console.log('[Playwright Test] Taking screenshot...');
30
- await newPage.screenshot({ path: 'test-screenshot.png' });
31
- console.log('[Playwright Test] Screenshot saved to test-screenshot.png');
32
-
33
- await newPage.close();
34
- }
35
- }
36
-
37
- console.log('[Playwright Test] Test completed successfully!');
38
- await browser.close();
39
- } catch (error) {
40
- console.error('[Playwright Test] Error:', error.message);
41
- console.error('[Playwright Test] Stack:', error.stack);
42
- }
43
- }
44
-
45
- testPlaywright();
@@ -1,47 +0,0 @@
1
- const { chromium } = require('playwright');
2
-
3
- async function testCDPGroups() {
4
- console.log('=== 测试CDP连接的标签分组功能 ===\n');
5
-
6
- try {
7
- // 连接到CDP服务器
8
- console.log('连接到CDP服务器...');
9
- const browser = await chromium.connectOverCDP('http://localhost:9221');
10
- console.log('CDP连接成功');
11
-
12
- // 创建第一个标签页
13
- console.log('创建第一个标签页...');
14
- const page1 = await browser.newPage();
15
- console.log('第一个标签页创建完成');
16
-
17
- // 等待5秒
18
- console.log('等待5秒...');
19
- await new Promise(resolve => setTimeout(resolve, 5000));
20
-
21
- // 创建第二个标签页
22
- console.log('创建第二个标签页...');
23
- const page2 = await browser.newPage();
24
- console.log('第二个标签页创建完成');
25
-
26
- // 等待5秒
27
- console.log('等待5秒...');
28
- await new Promise(resolve => setTimeout(resolve, 5000));
29
-
30
- console.log('\n=== 测试完成 ===');
31
- console.log('请检查Chrome浏览器中的标签组:');
32
- console.log('1. 应该创建了两个新的标签页');
33
- console.log('2. 这两个标签页应该被添加到一个名为"CDP-{客户端ID}"的标签组中');
34
-
35
- // 不关闭浏览器,让用户手动检查
36
- console.log('\n测试脚本完成,浏览器连接保持打开状态,请手动检查标签组。');
37
- console.log('按Ctrl+C退出脚本...');
38
-
39
- // 保持脚本运行
40
- await new Promise(() => {});
41
-
42
- } catch (error) {
43
- console.error('测试过程中出现错误:', error);
44
- }
45
- }
46
-
47
- testCDPGroups();
@@ -1,47 +0,0 @@
1
- const { chromium } = require('playwright');
2
-
3
- async function testPlaywrightPages() {
4
- console.log('[Playwright Pages Test] Connecting to CDP proxy...');
5
-
6
- try {
7
- const browser = await chromium.connectOverCDP('http://localhost:9221');
8
- console.log('[Playwright Pages Test] Connected successfully!');
9
-
10
- const contexts = browser.contexts();
11
- console.log(`[Playwright Pages Test] Found ${contexts.length} context(s)`);
12
-
13
- for (let i = 0; i < contexts.length; i++) {
14
- const context = contexts[i];
15
- console.log(`\n[Playwright Pages Test] Context ${i}:`);
16
-
17
- const pages = context.pages();
18
- console.log(` Pages: ${pages.length}`);
19
-
20
- for (let j = 0; j < pages.length; j++) {
21
- const page = pages[j];
22
- console.log(` Page ${j}: ${page.url()}`);
23
- }
24
- }
25
-
26
- console.log('\n[Playwright Pages Test] Trying to get all pages via CDP...');
27
- const client = await browser.newBrowserCDPSession();
28
-
29
- const result = await client.send('Target.getTargets');
30
- console.log(`[Playwright Pages Test] Found ${result.targetInfos.length} targets via CDP`);
31
-
32
- const pageTargets = result.targetInfos.filter(t => t.type === 'page');
33
- console.log(`[Playwright Pages Test] Found ${pageTargets.length} page targets`);
34
-
35
- pageTargets.slice(0, 5).forEach((t, i) => {
36
- console.log(` ${i + 1}. ${t.url}`);
37
- });
38
-
39
- console.log('[Playwright Pages Test] Test completed!');
40
- await browser.close();
41
- } catch (error) {
42
- console.error('[Playwright Pages Test] Error:', error.message);
43
- console.error('[Playwright Pages Test] Stack:', error.stack);
44
- }
45
- }
46
-
47
- testPlaywrightPages();
@@ -1,81 +0,0 @@
1
- const WebSocket = require('ws');
2
-
3
- async function testPlaywrightConnectionSequence() {
4
- console.log('[Sequence Test] Simulating Playwright connection sequence...\n');
5
-
6
- const ws = new WebSocket('ws://localhost:9221/client');
7
-
8
- let requestId = 1;
9
-
10
- const sendRequest = (method, params = {}) => {
11
- const id = requestId++;
12
- const msg = { id, method, params };
13
- console.log(`[SEND] #${id}: ${method}`, params);
14
- ws.send(JSON.stringify(msg));
15
- return id;
16
- };
17
-
18
- ws.on('open', async () => {
19
- console.log('[Sequence Test] Connected!\n');
20
-
21
- console.log('Step 1: Enable Target domain');
22
- sendRequest('Target.setDiscoverTargets', { discover: true });
23
-
24
- await sleep(500);
25
-
26
- console.log('\nStep 2: Get all targets');
27
- sendRequest('Target.getTargets');
28
-
29
- await sleep(1000);
30
-
31
- console.log('\nStep 3: Attach to first page target');
32
- sendRequest('Target.attachToTarget', {
33
- targetId: '4724AF3A60A419ECDEC2002A153733A2', // 百度首页
34
- flatten: true
35
- });
36
-
37
- await sleep(1000);
38
-
39
- console.log('\nStep 4: Enable Page domain on attached target');
40
- sendRequest('Page.enable');
41
-
42
- await sleep(500);
43
-
44
- console.log('\nStep 5: Navigate the page');
45
- sendRequest('Page.navigate', { url: 'https://www.example.com' });
46
-
47
- await sleep(2000);
48
-
49
- console.log('\n[Sequence Test] Test completed');
50
- ws.close();
51
- process.exit(0);
52
- });
53
-
54
- ws.on('message', (data) => {
55
- try {
56
- const msg = JSON.parse(data.toString());
57
-
58
- if (msg.id) {
59
- console.log(`[RECV] #${msg.id}:`, JSON.stringify(msg, null, 2).substring(0, 300));
60
- } else if (msg.method) {
61
- console.log(`[EVENT] ${msg.method}:`, {
62
- targetId: msg.params?.targetInfo?.targetId?.substring(0, 8),
63
- sessionId: msg.params?.sessionId?.substring(0, 8),
64
- url: msg.params?.targetInfo?.url?.substring(0, 50)
65
- });
66
- }
67
- } catch (e) {
68
- console.log('[RECV] Raw:', data.toString().substring(0, 100));
69
- }
70
- });
71
-
72
- ws.on('error', (err) => {
73
- console.error('[ERROR]', err.message);
74
- });
75
- }
76
-
77
- function sleep(ms) {
78
- return new Promise(resolve => setTimeout(resolve, ms));
79
- }
80
-
81
- testPlaywrightConnectionSequence();