Advanced Privacy & Anti-Detection

Hyperbrowser Anti-Bot Detection

Sometimes you need your automated browser sessions to fly under the radar. With Hyperbrowser’s privacy and anti-detection features, you can tweak things like browser fingerprints, pick the right proxies, and decide exactly how requests get routed. This helps your automated visits look and feel more like regular browsing—something that’s especially handy if you’re dealing with strict anti-bot measures or running sensitive operations.

Whether you need to appear as if you’re browsing from a specific region, or you want to vary details like your device type and OS, it’s all possible. You can set things up so your workflows feel less like scripted tasks and more like genuine user behavior. Add in built-in captcha-solving capabilities, and you’ve got a setup that keeps you moving forward, even if the sites you’re visiting throw a few hurdles your way.

Stealth Mode

Stealth mode helps you avoid detection by anti-bot systems. It randomizes browser fingerprints and can be configured when creating a new session via the API. Options include:

  • Devices - Specify mobile or desktop device profiles

  • Locales - Set browser locale (e.g. en-US, fr-FR)

  • Operating Systems - Simulate different OSes like Android, iOS, Windows, macOS, Linux

  • Screen Size - Specify viewport dimensions to emulate different devices

  • User Agents - Rotate user agent strings

To enable stealth mode and other stealth configurations, you can set the desired options in the session creation params when creating a session.

import { connect } from "puppeteer-core";
import { Hyperbrowser } from "@hyperbrowser/sdk";
import { config } from "dotenv";

config();

const client = new Hyperbrowser({
  apiKey: process.env.HYPERBROWSER_API_KEY,
});

const main = async () => {
  const session = await client.sessions.create({
    useStealth: true,
    operatingSystems: ["macos"],
    device: ["desktop"],
    locales: ["en"],
    screen: {
      width: 1920,
      height: 1080,
    },
  });
  const browser = await connect({
    browserWSEndpoint: session.wsEndpoint,
  });

  const [page] = await browser.pages();

  // Navigate to a website
  console.log("Navigating to Hacker News...");
  await page.goto("https://news.ycombinator.com/");
  const pageTitle = await page.title();
  console.log("Page 1:", pageTitle);
  await page.evaluate(() => {
    console.log("Page 1:", document.title);
  });

  // Clean up
  await page.close();
  await browser.close();
  await client.sessions.stop(session.id);
};

main();

To see all the available options, check out the Create Session API Reference

Proxies

Route browser traffic through proxies to change IP addresses. You can:

  • Use Hyperbrowser's proxy pool

  • Bring your own proxies

To enable these proxy configurations, you can set them in the session creation params.

import { connect } from "puppeteer-core";
import { Hyperbrowser } from "@hyperbrowser/sdk";
import { config } from "dotenv";

config();

const client = new Hyperbrowser({
  apiKey: process.env.HYPERBROWSER_API_KEY,
});

const main = async () => {
  const session = await client.sessions.create({
    useProxy: true,
    proxyCountry: "US",
    // use own proxy
    proxyServer: "...",
    proxyServerUsername: "...",
    proxyServerPassword: "...",
  });
  const browser = await connect({
    browserWSEndpoint: session.wsEndpoint,
  });

  const [page] = await browser.pages();

  // Navigate to a website
  console.log("Navigating to Hacker News...");
  await page.goto("https://news.ycombinator.com/");
  const pageTitle = await page.title();
  console.log("Page 1:", pageTitle);
  await page.evaluate(() => {
    console.log("Page 1:", document.title);
  });

  // Clean up
  await page.close();
  await browser.close();
  await client.sessions.stop(session.id);
};

main();

Using proxies can introduce latency to any page navigations, so make sure to properly await these navigations with timeouts.

Proxy usage is only available on the PAID plans.

CAPTCHA Solving

Hyperbrowser automatically solves CAPTCHAs when the solveCaptchas parameter is set to true for session creation.

import { connect } from "puppeteer-core";
import { Hyperbrowser } from "@hyperbrowser/sdk";
import { config } from "dotenv";

config();

const client = new Hyperbrowser({
  apiKey: process.env.HYPERBROWSER_API_KEY,
});

const main = async () => {
  const session = await client.sessions.create({
    solveCaptchas: true,
  });
  const browser = await connect({
    browserWSEndpoint: session.wsEndpoint,
  });

  const [page] = await browser.pages();

  // Navigate to a website
  console.log("Navigating to Hacker News...");
  await page.goto("https://news.ycombinator.com/");
  const pageTitle = await page.title();
  console.log("Page 1:", pageTitle);
  await page.evaluate(() => {
    console.log("Page 1:", document.title);
  });

  // Clean up
  await page.close();
  await browser.close();
  await client.sessions.stop(session.id);
};

main();

Captcha solving can take a bit of time, so make sure to implement proper waiting strategies when navigating to pages that might contain CAPTCHAs:

await page.goto("https://news.ycombinator.com/",
    { waitUntil: "networkidle0" }
);

// OR

await page.waitForNetworkIdle();
await page.waitForTimeout(5000);

CAPTCHA solving is only available on PAID plans.

Ad Blocking

Hyperbrowser's browser instances can automatically block ads and trackers. This improves page load times and further reduces detection risk. In addition to ads, Hyperbrowser allows you to block trackers and other annoyances including cookie notices.

To enable ad blocking, set the proper configurations in the session create parameters.

import { connect } from "puppeteer-core";
import { Hyperbrowser } from "@hyperbrowser/sdk";
import { config } from "dotenv";

config();

const client = new Hyperbrowser({
  apiKey: process.env.HYPERBROWSER_API_KEY,
});

const main = async () => {
  const session = await client.sessions.create({
    adblock: true,
    trackers: true,
    annoyances: true,
    // You must have trackers set to true to enable blocking annoyances and
    // adblock set to true to enable blocking trackers.
  });
  const browser = await connect({
    browserWSEndpoint: session.wsEndpoint,
  });

  const [page] = await browser.pages();

  // Navigate to a website
  console.log("Navigating to Hacker News...");
  await page.goto("https://news.ycombinator.com/");
  const pageTitle = await page.title();
  console.log("Page 1:", pageTitle);
  await page.evaluate(() => {
    console.log("Page 1:", document.title);
  });

  // Clean up
  await page.close();
  await browser.close();
  await client.sessions.stop(session.id);
};

main();

Last updated

Logo

© 2025 S2 Labs, Inc. All rights reserved.