Skip to content

Commit ba3b027

Browse files
committed
Updates to launch a new browser if remote debugging browser is not running
1 parent ef6f0a2 commit ba3b027

File tree

1 file changed

+30
-24
lines changed

1 file changed

+30
-24
lines changed

src/services/browser/BrowserSession.ts

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,23 @@ export class BrowserSession {
2020
this.context = context
2121
}
2222

23+
private async puppeteerLaunch() {
24+
return launch({
25+
args: [
26+
"--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
27+
],
28+
defaultViewport: {
29+
width: 1440,
30+
height: 900
31+
},
32+
headless: false, // Always use non-headless mode
33+
})
34+
}
35+
2336
async launchBrowser(interactive: boolean = false, port?: string) {
2437
console.log("launch browser called")
2538
this.isInteractive = interactive
26-
this.browserPort = port ?? this.browserPort
27-
28-
// Set browserPort if provided, otherwise use default
29-
if (port) {
30-
this.browserPort = port
31-
}
39+
this.browserPort = port ?? this.browserPort
3240

3341
if (this.browser) {
3442
await this.closeBrowser() // this may happen when the model launches a browser again after having used it already before
@@ -41,28 +49,24 @@ export class BrowserSession {
4149
const browserWSEndpoint = response.data.webSocketDebuggerUrl
4250

4351
if (!browserWSEndpoint) {
44-
throw new Error(`BrowserSession.ts :: launchBrowser :: Could not get webSocketDebuggerUrl from Chrome debugging API, port: ${this.browserPort}`)
52+
console.log("BrowserSession.ts :: launchBrowser :: No webSocketDebuggerUrl found, falling back to regular launch mode")
53+
this.isInteractive = false
54+
} else {
55+
this.browser = await connect({
56+
browserWSEndpoint,
57+
})
4558
}
46-
47-
this.browser = await connect({
48-
browserWSEndpoint,
49-
})
5059
} catch (error) {
51-
console.error(`BrowserSession.ts :: launchBrowser :: Failed to connect to browser, make sure you have a running browser with --remote-debugging-port=${this.browserPort}`, error)
52-
throw new Error(`BrowserSession.ts :: launchBrowser :: Failed to connect to browser: ${error.message}, make sure you have a running browser with --remote-debugging-port=${this.browserPort}`)
60+
console.log(`BrowserSession.ts :: launchBrowser :: Failed to connect to browser, falling back to regular launch mode. Error: ${error.message}`)
61+
this.isInteractive = false
5362
}
54-
} else {
55-
this.browser = await launch({
56-
args: [
57-
"--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
58-
],
59-
defaultViewport: {
60-
width: 1440,
61-
height: 900
62-
},
63-
headless: false, // Always use non-headless mode
64-
})
6563

64+
// If interactive mode failed, fall back to regular launch mode
65+
if (!this.browser) {
66+
this.browser = await this.puppeteerLaunch()
67+
}
68+
} else {
69+
this.browser = await this.puppeteerLaunch()
6670
}
6771

6872
this.page = await this.browser?.newPage()
@@ -281,3 +285,5 @@ export class BrowserSession {
281285
})
282286
}
283287
}
288+
289+

0 commit comments

Comments
 (0)