yiyan-browser-agent 1.0.26 → 1.0.28
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/package.json +1 -1
- package/src/browser-manager.js +40 -27
package/package.json
CHANGED
package/src/browser-manager.js
CHANGED
|
@@ -20,37 +20,50 @@ class BrowserManager {
|
|
|
20
20
|
// Ensure directories exist
|
|
21
21
|
fs.mkdirSync(SESSION_DIR, { recursive: true });
|
|
22
22
|
|
|
23
|
-
// Try connect existing browser
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
23
|
+
// Try connect existing browser (with retries for concurrent launches)
|
|
24
|
+
for (let retry = 0; retry < 3; retry++) {
|
|
25
|
+
try {
|
|
26
|
+
if (fs.existsSync(CDP_PORT_FILE)) {
|
|
27
|
+
const endpointInfo = JSON.parse(fs.readFileSync(CDP_PORT_FILE, 'utf8'));
|
|
28
|
+
const wsEndpoint = endpointInfo.wsEndpoint;
|
|
29
|
+
|
|
30
|
+
if (!wsEndpoint) {
|
|
31
|
+
throw new Error('No wsEndpoint in file');
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
logger.info('Connecting to existing browser...');
|
|
35
|
+
const browser = await chromium.connect({ wsEndpoint, timeout: 10000 });
|
|
36
|
+
|
|
37
|
+
// Show current browser info
|
|
38
|
+
const existingContexts = browser.contexts();
|
|
39
|
+
const existingPages = existingContexts.reduce((sum, ctx) => sum + ctx.pages().length, 0);
|
|
40
|
+
logger.dim(`Browser has ${existingContexts.length} contexts, ${existingPages} existing tabs`);
|
|
41
|
+
|
|
42
|
+
// Create NEW context and page (tab) for this task
|
|
43
|
+
const context = await browser.newContext({
|
|
44
|
+
viewport: { width: 1280, height: 900 },
|
|
45
|
+
userAgent: 'Mozilla/5.0 AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36',
|
|
46
|
+
});
|
|
47
|
+
const page = await context.newPage();
|
|
48
|
+
await page.goto(config.YIYAN_URL, { waitUntil: 'networkidle', timeout: 20000 });
|
|
49
|
+
await page.waitForTimeout(1500);
|
|
50
|
+
|
|
51
|
+
logger.success('Connected! New tab opened.');
|
|
52
|
+
return { browser, context, page, isNew: false };
|
|
53
|
+
}
|
|
54
|
+
} catch (err) {
|
|
55
|
+
// If connection failed, wait and retry (another process might be starting)
|
|
56
|
+
if (retry < 2) {
|
|
57
|
+
logger.warn(`Connection attempt ${retry + 1} failed, waiting 3 seconds...`);
|
|
58
|
+
await new Promise(r => setTimeout(r, 3000));
|
|
59
|
+
} else {
|
|
60
|
+
logger.warn('Connection failed after retries, launching new browser...');
|
|
61
|
+
try { fs.unlinkSync(CDP_PORT_FILE); } catch {}
|
|
31
62
|
}
|
|
32
|
-
|
|
33
|
-
logger.info('Connecting to existing browser...');
|
|
34
|
-
const browser = await chromium.connect({ wsEndpoint, timeout: 5000 });
|
|
35
|
-
|
|
36
|
-
// Create NEW context and page (tab) for this task
|
|
37
|
-
const context = await browser.newContext({
|
|
38
|
-
viewport: { width: 1280, height: 900 },
|
|
39
|
-
userAgent: 'Mozilla/5.0 AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36',
|
|
40
|
-
});
|
|
41
|
-
const page = await context.newPage();
|
|
42
|
-
await page.goto(config.YIYAN_URL, { waitUntil: 'networkidle', timeout: 20000 });
|
|
43
|
-
await page.waitForTimeout(1500); // Extra wait for UI to render
|
|
44
|
-
|
|
45
|
-
logger.success('Connected! New tab opened.');
|
|
46
|
-
return { browser, context, page, isNew: false };
|
|
47
63
|
}
|
|
48
|
-
} catch (err) {
|
|
49
|
-
logger.warn('Connection failed, launching new browser...');
|
|
50
|
-
try { fs.unlinkSync(CDP_PORT_FILE); } catch {}
|
|
51
64
|
}
|
|
52
65
|
|
|
53
|
-
// Launch new browser
|
|
66
|
+
// Launch new browser
|
|
54
67
|
return await this._launchNew();
|
|
55
68
|
}
|
|
56
69
|
|