If you're automating browser tasks like scraping, testing, or monitoring, tools like Puppeteer and Playwright are some of the most powerful options available. But if you don't rotate proxies, you risk IP bans, rate-limiting, or incorrect results.
This guide walks you through how to set up proxy rotation in both Puppeteer (Node.js) and Playwright (Node.js and Python).
Websites often detect and block repeated requests from the same IP address. Rotating your proxies helps:
npm install puppeteer
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
args: ['--proxy-server=http://proxy_ip:port']
});
const page = await browser.newPage();
await page.goto('https://api.ipify.org');
console.log(await page.content());
await browser.close();
})();
const proxyList = [
'http://proxy1:port',
'http://proxy2:port',
'http://proxy3:port'
];
const getRandomProxy = () => proxyList[Math.floor(Math.random() * proxyList.length)];
(async () => {
const proxy = getRandomProxy();
const browser = await puppeteer.launch({
args: [`--proxy-server=${proxy}`]
});
const page = await browser.newPage();
await page.goto('https://httpbin.org/ip');
const body = await page.content();
console.log(body);
await browser.close();
})();
npm install @playwright/test
const { chromium } = require('playwright');
const proxyList = [
'http://proxy1:port',
'http://proxy2:port',
'http://proxy3:port'
];
const getRandomProxy = () => proxyList[Math.floor(Math.random() * proxyList.length)];
(async () => {
const proxy = getRandomProxy();
const browser = await chromium.launch({
proxy: {
server: proxy
}
});
const context = await browser.newContext();
const page = await context.newPage();
await page.goto('https://api.ipify.org');
console.log(await page.textContent('body'));
await browser.close();
})();
pip install playwright
playwright install
import random
from playwright.sync_api import sync_playwright
proxy_list = [
'http://proxy1:port',
'http://proxy2:port',
'http://proxy3:port'
]
proxy = random.choice(proxy_list)
with sync_playwright() as p:
browser = p.chromium.launch(proxy={"server": proxy})
context = browser.new_context()
page = context.new_page()
page.goto("https://api.ipify.org")
print(page.text_content("body"))
browser.close()
Rotating proxies in Puppeteer and Playwright is straightforward but powerful. With the right setup, you can scale browser automation tasks while staying under the radar.
Always ensure your IP is whitelisted in your ProxiesThatWork dashboard before you begin. And if you run into issues, check out our troubleshooting guide or reach out to support for assistance.
ProxiesThatWork Team