Puppeteer Integration

Puppeteer Proxy SetupChrome DevTools Protocol with mobile IPs

Puppeteer controls Chrome/Chromium through DevTools Protocol. Configure SOCKS5 proxies with authentication for headless browser automation.

Puppeteer Features

  • Chrome/Chromium native support
  • Command-line proxy arguments
  • Page-level authentication
  • Puppeteer-extra stealth plugins

Configuration Examples

1. Basic SOCKS5 Proxy

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({
    headless: true,
    args: [
      '--proxy-server=socks5://proxy.proxies.sx:10001'
    ]
  });

  const page = await browser.newPage();

  // Authenticate with proxy
  await page.authenticate({
    username: 'your_username',
    password: 'your_password'
  });

  await page.goto('https://httpbin.org/ip');
  const content = await page.content();
  console.log(content);

  await browser.close();
})();

2. HTTP Proxy with Auth

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({
    headless: 'new',
    args: [
      '--proxy-server=http://proxy.proxies.sx:10001',
      '--disable-web-security',
      '--disable-features=IsolateOrigins,site-per-process'
    ]
  });

  const page = await browser.newPage();

  // Must authenticate before navigation
  await page.authenticate({
    username: 'your_username',
    password: 'your_password'
  });

  // Set viewport and user agent
  await page.setViewport({ width: 1920, height: 1080 });
  await page.setUserAgent(
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
  );

  await page.goto('https://example.com', { waitUntil: 'networkidle2' });
  await page.screenshot({ path: 'screenshot.png' });

  await browser.close();
})();

3. Puppeteer Extra with Stealth

const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');

// Add stealth plugin
puppeteer.use(StealthPlugin());

(async () => {
  const browser = await puppeteer.launch({
    headless: true,
    args: [
      '--proxy-server=socks5://proxy.proxies.sx:10001',
      '--disable-blink-features=AutomationControlled',
      '--no-sandbox',
      '--disable-setuid-sandbox'
    ]
  });

  const page = await browser.newPage();

  await page.authenticate({
    username: 'your_username',
    password: 'your_password'
  });

  // Additional stealth measures
  await page.evaluateOnNewDocument(() => {
    Object.defineProperty(navigator, 'webdriver', {
      get: () => undefined,
    });
  });

  await page.goto('https://bot.sannysoft.com');
  await page.screenshot({ path: 'stealth-test.png', fullPage: true });

  await browser.close();
})();

4. Proxy Rotation Class

const puppeteer = require('puppeteer');

class ProxyRotator {
  constructor(ports, username, password) {
    this.ports = ports;
    this.username = username;
    this.password = password;
    this.currentIndex = 0;
  }

  getNextProxy() {
    const port = this.ports[this.currentIndex];
    this.currentIndex = (this.currentIndex + 1) % this.ports.length;
    return `socks5://proxy.proxies.sx:${port}`;
  }

  async createPage() {
    const proxy = this.getNextProxy();

    const browser = await puppeteer.launch({
      headless: true,
      args: [`--proxy-server=${proxy}`]
    });

    const page = await browser.newPage();
    await page.authenticate({
      username: this.username,
      password: this.password
    });

    return { browser, page };
  }
}

// Usage
const rotator = new ProxyRotator(
  [10001, 10002, 10003, 10004, 10005],
  'your_username',
  'your_password'
);

(async () => {
  for (let i = 0; i < 5; i++) {
    const { browser, page } = await rotator.createPage();
    await page.goto('https://httpbin.org/ip');
    const ip = await page.$eval('body', el => el.textContent);
    console.log(`Request ${i + 1}: ${ip}`);
    await browser.close();
  }
})();

5. TypeScript Setup

import puppeteer, { Browser, Page } from 'puppeteer';

interface ProxyConfig {
  server: string;
  username: string;
  password: string;
}

async function createProxiedBrowser(proxy: ProxyConfig): Promise<Browser> {
  return await puppeteer.launch({
    headless: true,
    args: [`--proxy-server=${proxy.server}`]
  });
}

async function createAuthenticatedPage(
  browser: Browser,
  proxy: ProxyConfig
): Promise<Page> {
  const page = await browser.newPage();
  await page.authenticate({
    username: proxy.username,
    password: proxy.password
  });
  return page;
}

// Usage
const proxyConfig: ProxyConfig = {
  server: 'socks5://proxy.proxies.sx:10001',
  username: 'your_username',
  password: 'your_password'
};

(async () => {
  const browser = await createProxiedBrowser(proxyConfig);
  const page = await createAuthenticatedPage(browser, proxyConfig);

  await page.goto('https://example.com');
  console.log(await page.title());

  await browser.close();
})();
Important: Call page.authenticate() before navigating to any page. Authentication must be set up first for proxy credentials to work.

Puppeteer Proxy Best Practices

Use Puppeteer Extra

The stealth plugin patches many detection vectors. Essential for sites with advanced bot protection.

Authenticate First

Always call page.authenticate() before page.goto(). Proxy auth must be set before the first network request.

Use New Headless Mode

Set headless: 'new' for the newer headless implementation with better compatibility and fewer detection issues.

Close Browsers

Always call browser.close() to clean up resources. Use try/finally or wrapper functions to ensure cleanup.

Start Automating with Puppeteer

Get mobile proxies for reliable Chrome automation.