For the complete documentation index, see llms.txt. This page is also available as Markdown.

Playwright

Playwright has first-class proxy support — pass credentials directly to launch() or new_context(), no extension hacks required.

Python

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(proxy={
        "server":   "http://gate.helodata.io:7777",
        "username": "helo_s1a2b3c4d5e-type-res-region-us",
        "password": "PASSWORD",
    })
    page = browser.new_page()
    page.goto("https://ipv4.icanhazip.com")
    print(page.content())
    browser.close()

For SOCKS5 use "server": "socks5://gate.helodata.io:7777" (DNS is resolved by the proxy automatically).

Node.js

import { chromium } from "playwright";

const browser = await chromium.launch({
  proxy: {
    server:   "http://gate.helodata.io:7777",
    username: "helo_s1a2b3c4d5e-type-res-region-us",
    password: "PASSWORD",
  },
});
const page = await browser.newPage();
await page.goto("https://ipv4.icanhazip.com");
console.log(await page.content());
await browser.close();

Per-context proxy

Use a different proxy per browser context — handy for parallel sessions:

The browser process is shared; contexts are isolated like separate browser profiles.

ISP

Rotating sessions in Playwright

Mint a new sub-user string per context, with a unique session-XXX:

Verify

Common pitfalls

  • No headless flag needed for proxy auth — Playwright handles it natively in both head and headless modes.

  • WebRTC leak — by default Playwright doesn't expose the local IP via WebRTC, but verify with browserleaks.com/webrtc if your target sniffs for it.

  • Bypass list — use proxy.bypass = "localhost,127.0.0.1" to avoid proxying internal targets.

Last updated

Was this helpful?