diff --git a/packages/browser-pool/src/playwright/playwright-controller.ts b/packages/browser-pool/src/playwright/playwright-controller.ts index a04d007ca54c..06416aa5a075 100644 --- a/packages/browser-pool/src/playwright/playwright-controller.ts +++ b/packages/browser-pool/src/playwright/playwright-controller.ts @@ -27,7 +27,7 @@ export class PlaywrightController extends BrowserController< return { proxy: { - server: url.origin, + server: `${url.protocol}//${url.host}`, username, password, bypass: pageOptions?.proxy?.bypass, diff --git a/packages/browser-pool/src/puppeteer/puppeteer-controller.ts b/packages/browser-pool/src/puppeteer/puppeteer-controller.ts index 1e825f4e69f3..56aa038d90a8 100644 --- a/packages/browser-pool/src/puppeteer/puppeteer-controller.ts +++ b/packages/browser-pool/src/puppeteer/puppeteer-controller.ts @@ -31,7 +31,7 @@ export class PuppeteerController extends BrowserController< const password = decodeURIComponent(url.password); return { - proxyServer: url.origin, + proxyServer: `${url.protocol}//${url.host}`, proxyUsername: username, proxyPassword: password, proxyBypassList: pageOptions?.proxyBypassList, diff --git a/packages/stagehand-crawler/src/internals/stagehand-controller.ts b/packages/stagehand-crawler/src/internals/stagehand-controller.ts index a870bdc69474..6f344298be50 100644 --- a/packages/stagehand-crawler/src/internals/stagehand-controller.ts +++ b/packages/stagehand-crawler/src/internals/stagehand-controller.ts @@ -84,7 +84,7 @@ export class StagehandController extends BrowserController { runPluginTest(PuppeteerPlugin, PuppeteerController, puppeteer); + describe('normalizeProxyOptions', () => { + test.each([ + ['socks5://user:pass@proxy.example.com:1080', 'socks5://proxy.example.com:1080'], + ['http://user:pass@proxy.example.com:8080', 'http://proxy.example.com:8080'], + ])('PlaywrightController should handle %s', (proxyUrl, expectedServer) => { + const plugin = new PlaywrightPlugin(playwright.chromium); + const browserController = new PlaywrightController(plugin); + + const result = browserController.normalizeProxyOptions(proxyUrl, {}); + + expect(result).toMatchObject({ + proxy: { server: expectedServer, username: 'user', password: 'pass' }, + }); + }); + + test.each([ + ['socks5://user:pass@proxy.example.com:1080', 'socks5://proxy.example.com:1080'], + ['http://user:pass@proxy.example.com:8080', 'http://proxy.example.com:8080'], + ])('PuppeteerController should handle %s', (proxyUrl, expectedServer) => { + const plugin = new PuppeteerPlugin(puppeteer); + const browserController = new PuppeteerController(plugin); + + const result = browserController.normalizeProxyOptions(proxyUrl, {}); + + expect(result).toMatchObject({ + proxyServer: expectedServer, + proxyUsername: 'user', + proxyPassword: 'pass', + }); + }); + }); + describe('Playwright specifics', () => { let browser: playwright.Browser;