Headless Chrome as a service for browser automation and scraping. Launch Browserless sessions with KnoxProxy as the upstream proxy for residential IP rotation and geo-targeted browser rendering.
Install a browser automation library to connect to Browserless.
npm install puppeteer-core # Puppeteer
npm install playwright # PlaywrightLaunch a Browserless browser with KnoxProxy as the upstream proxy via launch args.
const browser = await puppeteer.connect({
browserWSEndpoint: `wss://chrome.browserless.io?token=YOUR_TOKEN&--proxy-server=http://gw.knoxproxy.com:7000`
});Set proxy credentials on the page before navigating.
const page = await browser.newPage();
await page.authenticate({
username: "your_username-country-us",
password: "your_password"
});For Browserless REST API calls, pass proxy settings in the launch configuration.
curl -X POST "https://chrome.browserless.io/content?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"gotoOptions": {"waitUntil": "networkidle0"},
"launch": {"args": ["--proxy-server=http://gw.knoxproxy.com:7000"]}
}'For multi-page browser sessions, use sticky sessions to keep the same IP.
await page.authenticate({
username: "your_username-country-us-session-browser123",
password: "your_password"
});Navigate to an IP-checking site to confirm requests are routed through KnoxProxy with the expected geo-location.
const puppeteer = require("puppeteer-core");
async function scrapeWithKnoxProxy(url, country = "us") {
const browser = await puppeteer.connect({
browserWSEndpoint:
"wss://chrome.browserless.io?token=YOUR_TOKEN" +
"&--proxy-server=http://gw.knoxproxy.com:7000",
});
const page = await browser.newPage();
// Authenticate with KnoxProxy
await page.authenticate({
username: `your_username-country-${country}-session-br${Date.now()}`,
password: "your_password",
});
await page.goto(url, { waitUntil: "networkidle0", timeout: 60000 });
const content = await page.content();
await browser.close();
return content;
}
scrapeWithKnoxProxy("https://example.com/products", "de")
.then((html) => console.log(`Fetched ${html.length} bytes`))
.catch(console.error);KnoxProxy rotates IPs per connection. For Browserless sessions, use sticky sessions via -session-{id} to keep the same IP across all page navigations within a browser session.
| Problem | Fix |
|---|---|
| ERR_PROXY_AUTH_REQUIRED | Call page.authenticate() with KnoxProxy credentials before any page.goto() call. |
| Browserless WebSocket timeout | Increase the Browserless connection timeout. Use a proxy country geographically close to the Browserless server. |
| Page renders without proxy | Verify the --proxy-server flag is in the WebSocket URL query string. Navigate to httpbin.org/ip to confirm the proxy IP. |
USER-country-de-city-berlin-session-profile07Order matters -- geo flags before the session flag. The session name is free text; use the profile ID so the mapping is self-documenting. Password stays as issued; no flags belong there. HTTP on :7000, SOCKS5 on :7001, same credentials.
KnoxProxy's residential IPs carry higher trust scores than Browserless's built-in proxy options, plus more granular country targeting through the -country-{cc} username suffix. Browserless still handles launching and controlling the headless Chrome browser, while KnoxProxy handles only the network layer, routing every page.goto() request through a geo-targeted residential IP.
Yes. For self-hosted Docker instances, pass --proxy-server=http://gw.knoxproxy.com:7000 as a Chrome launch argument in your Docker configuration or Puppeteer connect options, the same way you would for the hosted Browserless service. Then call page.authenticate() with your KnoxProxy username and password before navigating to any target page.
Yes. Playwright supports proxy configuration natively, so you can pass a proxy object with KnoxProxy's server, username, and password directly in browser.connect() options, without needing the separate page.authenticate() call that Puppeteer requires. Everything else, including sticky sessions and country targeting, works the same way.
KnoxProxy's residential IPs reduce CAPTCHA frequency compared with datacenter proxies, since target sites trust them more by default. For CAPTCHAs that still appear, combine Browserless stealth mode with sticky sessions using -session-{id}, so the same trusted IP persists across the whole browsing session instead of rotating mid-task.
Rotating residential proxies -- 5 minutes setup, instant activation, 14-day money-back guarantee.