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 residential IPs have higher trust scores and more granular country targeting. Browserless handles the browser, KnoxProxy handles the network layer.
Yes. For self-hosted Docker instances, pass --proxy-server as a Chrome launch argument in your Docker configuration or Puppeteer connect options.
Yes. Playwright supports proxy configuration natively. Pass the proxy object in browser.connect() options with KnoxProxy details.
KnoxProxy residential IPs reduce CAPTCHA frequency. For remaining CAPTCHAs, use Browserless stealth mode combined with sticky sessions.
Free trial on rotating residential -- 5 minutes setup, no credit card.