v1.8.91-d84675c
← Back to Hex Proxies

Proxies for Playwright

Last updated: April 2026

By Hex Proxies Engineering Team

Learn how to integrate proxy infrastructure into Playwright for geo-targeted testing, authenticated scraping, and distributed browser automation.

intermediate15 minutesdeveloper-qa

Prerequisites

  • Node.js 18+ or Python 3.10+
  • Playwright installed
  • Hex Proxies account

Steps

1

Install Playwright

Set up Playwright with browser binaries and configure your project for TypeScript or Python.

2

Configure proxy settings

Pass Hex Proxies credentials to the browser launch configuration for automatic proxy routing.

3

Implement geo-targeted tests

Create test functions that launch browsers through country-specific proxy configurations.

4

Add sticky sessions for flows

Use session-tagged proxy usernames for multi-page tests that require consistent IP identity.

5

Integrate with test runner

Wire proxy-based tests into the Playwright test runner for parallel geo-testing execution.

Proxies for Playwright

Playwright is the leading browser automation framework for E2E testing and web scraping. Its built-in proxy support makes it straightforward to route all browser traffic through Hex Proxies — enabling geo-targeted testing, distributed scraping, and realistic multi-location QA.

Basic Proxy Configuration (TypeScript)

const browser = await chromium.launch({ proxy: { server: 'http://gate.hexproxies.com:8080', username: 'YOUR_USERNAME', password: 'YOUR_PASSWORD', }, });

const page = await browser.newPage(); await page.goto('https://httpbin.org/ip'); const content = await page.textContent('body'); console.log('Proxy IP:', content); await browser.close(); ```

Geo-Targeted Testing

async function testFromCountry(url: string, country: string): Promise<{ country: string; title: string; status: number; }> { const browser = await chromium.launch({ proxy: { server: 'http://gate.hexproxies.com:8080', username: `YOUR_USERNAME-country-${country.toLowerCase()}`, password: 'YOUR_PASSWORD', }, });

const page = await browser.newPage(); const response = await page.goto(url, { waitUntil: 'domcontentloaded' }); const title = await page.title(); await browser.close();

return { country, title, status: response?.status() ?? 0 }; }

// Test from multiple countries const countries = ['US', 'GB', 'DE', 'JP', 'BR']; const results = await Promise.all( countries.map(c => testFromCountry('https://yoursite.com', c)) ); console.table(results); ```

Python Playwright with Proxy

def scrape_with_proxy(url: str, username: str, password: str) -> str: with sync_playwright() as p: browser = p.chromium.launch(proxy={ "server": "http://gate.hexproxies.com:8080", "username": username, "password": password, }) page = browser.new_page() page.goto(url, wait_until="domcontentloaded") content = page.content() browser.close() return content ```

Sticky Sessions for Multi-Page Flows

When testing login flows or multi-step processes that need the same IP:

const browser = await chromium.launch({
  proxy: {
    server: 'http://gate.hexproxies.com:8080',
    username: 'YOUR_USERNAME-session-checkout-test-1',
    password: 'YOUR_PASSWORD',
  },

const context = await browser.newContext(); const page = await context.newPage();

// Multi-step checkout test with consistent IP await page.goto('https://shop.example.com/cart'); await page.click('[data-testid="checkout"]'); await page.fill('#email', 'test@example.com'); await page.click('[data-testid="continue"]'); // Same IP throughout the flow ```

Parallel Geo-Testing in Playwright Test Runner

const countries = ['US', 'GB', 'DE', 'JP'];

for (const country of countries) { test(`pricing page shows correct content for ${country}`, async () => { const browser = await chromium.launch({ proxy: { server: 'http://gate.hexproxies.com:8080', username: `YOUR_USERNAME-country-${country.toLowerCase()}`, password: 'YOUR_PASSWORD', }, }); const page = await browser.newPage(); await page.goto('https://yoursite.com/pricing'); // Assert country-specific content const content = await page.textContent('body'); expect(content).toBeTruthy(); await browser.close(); }); } ```

Performance Notes

Playwright adds browser rendering overhead on top of network latency. With Hex Proxies ISP proxies adding only 10-30ms to each request, the proxy layer is negligible compared to page render time. For scraping-focused use cases, consider using Playwright's request interception to skip unnecessary assets and reduce page load time.

Tips

  • *Use headless mode for CI/CD and headed mode for local debugging of proxy-related issues.
  • *Playwright natively supports proxy auth — no need for browser extensions or manual header injection.
  • *Use sticky sessions for any test that spans multiple page navigations.
  • *Block unnecessary assets (images, fonts, analytics) with route interception to speed up proxied scraping.
  • *ISP proxies add minimal latency — prefer them for speed-sensitive E2E test suites.

Ready to Get Started?

Put this guide into practice with Hex Proxies.

Cookie Preferences

We use cookies to ensure the best experience. You can customize your preferences below. Learn more