Standard browser automation is easy to detect. The moment you run a raw Selenium, Playwright, or Puppeteer script against a platform with real bot detection, you expose dozens of signals: headless browser flags, missing browser APIs, automation-specific JavaScript properties, and fingerprint inconsistencies that detection systems score against you in milliseconds.

The solution is not to add a stealth plugin and hope for the best. It is to run your automation inside a real, isolated browser profile with a genuine browser fingerprint and a clean residential IP. That is exactly what MultiLogin makes possible, and why it has become the standard infrastructure layer for serious browser automation at scale.

This guide covers how MultiLogin works with Selenium, Playwright, and Puppeteer, how to choose the right framework for your use case, and the key principles behind building automation workflows that stay completely undetected.

Why Standard Automation Gets Detected

Before looking at the solution, it helps to understand the problem precisely. Platforms and anti-bot systems like Cloudflare, DataDome, and PerimeterX do not just block known bot IPs. They run JavaScript challenges that probe your browser environment for dozens of signals that distinguish automated traffic from real users.

A standard headless Chromium instance running Playwright or Puppeteer fails these checks in several ways:

  • navigator.webdriver is set to true in automated browsers, a flag every modern detection system checks immediately
  • Missing browser APIs that real browsers expose, like chrome.runtime, are absent in headless mode
  • Canvas and WebGL fingerprints are inconsistent with any known real-world device configuration
  • Font enumeration returns an empty or minimal list, unlike real user environments
  • Behavioral signals like mouse movement patterns, scroll physics, and click timing can all look robotic
  • Datacenter IPs used by most automation setups are flagged immediately by ASN databases

The stealth plugins available for each framework, like puppeteer-extra-plugin-stealth or playwright-stealth, patch some of these leaks. But they are reactive fixes against static checks. Modern detection systems evolve constantly and check dozens of additional signals those plugins do not cover.

The MultiLogin approach: Instead of patching a headless browser to look less like a bot, MultiLogin runs your automation scripts inside a real browser profile with a genuine, consistent fingerprint built into the browser engine itself. The result passes the same checks as a real human user because, at the fingerprint level, it is indistinguishable from one.

How MultiLogin Automation Works

MultiLogin exposes a REST API that lets you control browser profiles programmatically. The flow is straightforward: your script authenticates with the MultiLogin API, launches a specific browser profile, retrieves the WebSocket debugging port that profile is running on, and then connects your automation framework to that port using the standard remote WebDriver or CDP protocol.

From that point, your Selenium, Playwright, or Puppeteer code runs exactly as normal. The only difference is that instead of driving a default headless Chromium instance, it is driving a MultiLogin Mimic browser (Chrome-based) or Stealthfox browser (Firefox-based) with a real, stable fingerprint baked in at the engine level.

Important technical note: MultiLogin automation requires using the remote WebDriver, not a local one. Selenium, Puppeteer, and Playwright all connect to the running profile via its local port. Using a local WebDriver bypasses the MultiLogin browser entirely and will not work.

The Automation Flow Step by Step

1

Authenticate with the MultiLogin API. Your script sends a POST request to the MultiLogin sign-in endpoint with your account credentials and receives a JWT token used in all subsequent API calls.

2

Start a browser profile. Using your token, call the profile start endpoint with your Folder ID, Profile ID, and the automation type you want to use (Selenium, Playwright, or Puppeteer). MultiLogin launches the profile and returns the port it is listening on.

3

Connect your automation framework. Use the returned port to connect your Selenium RemoteWebDriver, Playwright browser connection, or Puppeteer connect call to localhost:[port]. From here, the profile is fully under programmatic control.

4

Run your automation logic. Navigate pages, fill forms, click elements, extract data, or perform any browser action. The fingerprint of the running profile remains stable throughout, and residential proxies handle the IP layer.

5

Stop the profile. When done, call the profile stop endpoint to cleanly close the session. Cookies and session data are saved to the profile, so the next run resumes from the same authenticated state.

Selenium with MultiLogin

Selenium is the oldest and most widely used browser automation framework, launched in 2004. It uses the WebDriver protocol and has official bindings for Java, Python, C#, Ruby, JavaScript, and more. For MultiLogin automation, Selenium connects via RemoteWebDriver pointed at the profile's local port.

Here is what the core connection looks like in Python:

Python — Selenium + MultiLogin
import requests
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# Step 1: Authenticate and get token
token = get_token("[email protected]", "your_password")

# Step 2: Start profile and get port
port = start_profile(token, FOLDER_ID, PROFILE_ID, "selenium")

# Step 3: Connect Selenium to running profile
options = Options()
options.add_experimental_option("debuggerAddress", f"localhost:{port}")
driver = webdriver.Chrome(options=options)

# Step 4: Automate as normal
driver.get("https://example.com")
print(driver.title)

Selenium works with both Mimic (Chrome-based) and Stealthfox (Firefox-based) MultiLogin profiles. It is the best choice if your team already has Selenium expertise, your codebase is in Java or Python, or you need to integrate with existing test infrastructure like Selenium Grid.

Playwright with MultiLogin

Playwright was created by Microsoft in 2020 and has grown rapidly, now boasting over 61,000 GitHub stars and 4 million+ weekly NPM downloads. It connects via the Chrome DevTools Protocol (CDP) and offers native async support, automatic waiting, and multi-browser support including Chrome, Firefox, and WebKit (Safari).

For MultiLogin, Playwright connects to the running Mimic profile using chromium.connectOverCDP():

JavaScript — Playwright + MultiLogin
const { chromium } = require('playwright');

// Step 1: Start profile via MultiLogin API (returns port)
const port = await startProfile(token, folderId, profileId, 'playwright');

// Step 2: Connect Playwright to running profile
const browser = await chromium.connectOverCDP(`http://localhost:${port}`);
const context = browser.contexts()[0];
const page = context.pages()[0];

// Step 3: Automate as normal
await page.goto('https://example.com');
console.log(await page.title());

Note that Playwright only supports Mimic (Chrome-based) profiles in MultiLogin. Stealthfox (Firefox) is not currently compatible with Playwright. Playwright is ideal for teams that want clean, modern async code, need automatic waiting without explicit waits, or are working on complex multi-page flows.

Puppeteer with MultiLogin

Puppeteer is a Node.js library developed by Google that controls Chromium via the Chrome DevTools Protocol. Like Playwright, it connects to the running MultiLogin Mimic profile via CDP using puppeteer.connect():

JavaScript — Puppeteer + MultiLogin
const puppeteer = require('puppeteer');

// Step 1: Start profile via MultiLogin API (returns port)
const port = await startProfile(token, folderId, profileId, 'puppeteer');

// Step 2: Connect Puppeteer to running profile
const browser = await puppeteer.connect({
    browserWSEndpoint: `ws://localhost:${port}`
});
const page = (await browser.pages())[0];

// Step 3: Automate as normal
await page.goto('https://example.com');
console.log(await page.title());

Puppeteer also only works with Mimic (Chrome-based) profiles. It is a strong choice for scraping tasks where you need lightweight execution and are already working in a Node.js environment. For scraping specifically, Puppeteer's resource blocking capability makes it fast and efficient on bandwidth.

Selenium vs Playwright vs Puppeteer: Which to Choose?

All three frameworks work with MultiLogin and all three produce undetectable automation when running inside a real MultiLogin profile. The choice depends on your language preference, existing infrastructure, and what you are actually automating.

Factor Selenium Playwright Puppeteer
Created by ThoughtWorks (2004) Microsoft (2020) Google (2018)
Language support Widest Java, Python, C#, Ruby, JS, Kotlin Wide JS, Python, Java, C# JS / TS only
Browser support Chrome, Firefox, Safari, Edge, Opera Chrome, Firefox, WebKit (Safari) Chromium only
MultiLogin profile Mimic + Stealthfox Mimic only Mimic only
Auto-waiting Manual waits required Built-in Mostly manual
Speed Slower (WebDriver protocol) Fastest (native async) Fast (CDP)
Best for Enterprise teams, legacy systems, multi-language orgs Complex flows, modern async workflows, cross-browser Lightweight scraping, Node.js-native teams
Learning curve Medium, verbose setup Low, clean modern API Low, Chrome-focused

If you are starting fresh in 2025, Playwright is the recommended choice for most MultiLogin automation work. Its automatic waiting removes a major source of flaky automation, the async-first design handles concurrent multi-profile execution cleanly, and its syntax is the most readable of the three. Selenium remains the right call for teams with deep existing infrastructure or a need for Java-based scripting. Puppeteer is ideal for lightweight, fast scraping tasks in Node.js.

Headless Mode: Running Automation Without a Visible Browser

MultiLogin supports headless mode for all three frameworks, which runs the browser without a visible UI. This reduces system resource usage significantly and speeds up execution, especially when running many parallel profiles on a single machine or a VPS.

The critical difference between standard headless Chromium and MultiLogin in headless mode is that MultiLogin's headless browser still carries the full real browser fingerprint. Standard headless Chromium exposes itself through missing APIs and unusual fingerprint signals. MultiLogin in headless mode masks all of these, making the session completely indistinguishable from a real browser at the fingerprint level.

In headless mode, you can also skip loading unnecessary resources like images, CSS, and third-party scripts to reduce bandwidth usage and speed up execution, particularly useful when scraping at scale across hundreds of profiles simultaneously.

Practical Use Cases for MultiLogin Automation

Multi-Account Management

Selenium / Playwright / Puppeteer

Automate logins, posting, following, engagement, and profile updates across hundreds of isolated accounts. Each profile maintains its own session, so accounts never interfere with each other.

Web Scraping Protected Sites

Playwright / Puppeteer

Extract data from Google, Amazon, LinkedIn, and sites using Cloudflare or DataDome. Real fingerprints and residential proxies keep requests passing bot checks that block standard scrapers.

Account Registration at Scale

Selenium / Playwright

Automate account creation workflows where each new account needs to appear as a completely independent user with unique device, IP, and browser identity.

Ad Verification

Playwright / Selenium

Programmatically check how ads render in different countries and on different devices by running automated sessions through profiles with geo-targeted residential proxies.

E-Commerce Price Monitoring

Puppeteer / Playwright

Monitor competitor pricing across Amazon, eBay, and retail sites using rotating residential IPs to avoid rate limits and geo-specific pricing showing different results per region.

Form Filling and Task Automation

Selenium / Playwright

Automate repetitive browser-based tasks like form submissions, application flows, and login sequences across multiple accounts from a single script.

Key Best Practices for Undetectable Automation

Even with MultiLogin handling the fingerprint and IP layer, your automation behavior matters. Here are the principles that separate undetectable automation from scripts that eventually get flagged:

  • Simulate human-like timing. Add random delays between actions rather than firing requests as fast as the framework allows. Real users do not click elements at perfectly consistent 50ms intervals. Vary delays between 500ms and 3 seconds for most interactions.
  • Warm up profiles before heavy tasks. New profiles that immediately perform high-volume actions look suspicious. Script a warm-up phase that browses a few pages organically before performing the target task.
  • Use session persistence. MultiLogin saves cookies and session state per profile. Design your scripts to resume from saved sessions rather than logging in fresh every run. Persistent sessions look more like returning users.
  • One profile per account, strictly. Never run two accounts from the same profile in the same session. The whole anti-detection benefit of MultiLogin depends on each profile maintaining a single, consistent identity.
  • Match proxy location to profile fingerprint. MultiLogin does this automatically when using its built-in proxies. If you bring your own proxies, verify that the timezone, language, and WebRTC settings in the profile match the proxy's geographic location.
  • Handle CAPTCHAs gracefully. Even with great fingerprints and proxies, some workflows encounter CAPTCHAs. Build retry logic and human-in-the-loop handling for these cases rather than forcing automated CAPTCHA solving, which itself can be a detection signal.
Pro tip: MultiLogin's Script Runner and CookieRobot features let you automate cookie farming and profile warm-up tasks without writing custom scripts. For teams not ready to write full Selenium or Playwright code, these built-in tools handle common automation tasks directly from the MultiLogin dashboard.

Getting Started with MultiLogin Automation

MultiLogin's automation API is available on all subscription plans. The official documentation provides ready-to-run example scripts for Selenium (Python), Playwright (JavaScript), and Puppeteer (JavaScript) that you can plug your credentials and Profile IDs into and run immediately.

The setup process for each framework is:

  1. Install the relevant framework: pip install selenium for Python, or npm install playwright / npm install puppeteer for Node.js
  2. Get your MultiLogin account credentials, Folder ID, and Profile ID from the dashboard
  3. Copy the relevant MultiLogin example script from the official docs
  4. Insert your credentials and IDs, run the script, and verify the profile launches and your automation connects
  5. Build your custom automation logic on top of the working connection

For teams running Docker or VPS environments, MultiLogin also supports Docker-based deployments, which makes it straightforward to scale automation across multiple machines with consistent profile management.

Final Thoughts

The combination of MultiLogin with Selenium, Playwright, or Puppeteer is the production-grade setup for browser automation that needs to survive real detection systems. Standard automation frameworks are powerful tools. But without a real browser fingerprint and clean residential proxies behind them, they are always one detection update away from being blocked.

MultiLogin solves this at the infrastructure level. Your automation code runs unchanged. The fingerprint, IP alignment, and session isolation are handled by the platform. The result is automation that looks, at every detectable layer, like a real human user on a real device.

Use our MultiLogin coupon codes to get started at up to 50% off. Code MEGA50 gives 50% off the full antidetect browser platform including full automation API access. Also see our guide on what an antidetect browser is and how it works if you want the full foundation before diving into automation.