FingerprintSwitcher automation.

It is possible to use most popular automation frameworks with FingerprintSwitcher. List of supported frameworks: selenium, puppeteer, playwright and others. You can also use any other browser automation library which can work over CDP.

Consider following case: you have a project implemented with certain framework. It is fully functional and does what is intended to do. Now you want to change fingerprint for each browser instance that you running.

That is where new functionality described on this page comes in handy. All you need to do is require corresponding plugin for your favorite framework.

No need to rewrite your project, you just need to change a way how browser is started. All automation routine can remain the same. After these cosmetic changes will be made, your project will start using different fingerprints.

Here is how it look like for a project written in puppeteer framework:

Note that BrowserAutomationStudio is still most preferable way to automate your browser. It also allows to change browser fingerprints and many more features: convenient and easy multithreading, compiling standalone application, visual programming and many many more. It you are starting a new project, we strongly recommend to use BAS.

How to start?

First of all you need to select plugin for automation framework you are using. Here are the list of available plugins:

  • Puppeteer. Plugin for puppeteer framework(puppeteer-with-fingerprints) is available here.
  • Selenium. Plugin for selenium framework(selenium-with-fingerprints) is available here.
  • Playwright. Plugin for playwright framework(playwright-with-fingerprints) is available here.

Each of these plugins are adapted to specific framework. If you want to use framework which is not in the list, you can check more general plugin, browser-with-fingerprints. It allows to start browser, change its fingerprint and listen to any incoming CDP connections. Therefore, it can be used with any automation library which supports connection over CDP.

  • Universal plugin. Plugin which allows connection from any framework(browser-with-fingerprints). It is available here.

It is important to understand, that this page has only very short overview. In order to get more information and actually use plugins, you need to check documentation on one of the links above.


Consider you have the following project using puppeteer:

//No fingerprints

const puppeteer = require('puppeteer');

(async () => {

  const browser = await puppeteer.launch();

  const page = await browser.newPage();
  await page.goto('', { waitUntil: 'networkidle0' });

  console.log('Canvas fingerprint:', await page.$eval('#crc', (el) => el.innerText));

  await browser.close();

It checks canvas signature by visiting url and parsing corresponding value. No matter how many times you will run that test on same machine, results will be the same. It happens because this test depends on hardware that you are using, if hardware remains the same, results will also be the same. But if we change fingerprint, results will be different. Lets modify that project and add fingerprints support. Updated code will look like this:

//With fingerprints

// Require `puppeteer-with-fingerprints` instead of `puppeteer`
// const puppeteer = require('puppeteer');
const { plugin } = require('puppeteer-with-fingerprints');

(async () => {

  //Obtain fingerprint from server. fingerprint variable contains string.
  //This string can be saved to use later.
  const fingerprint = await plugin.fetch('', {
      tags: ['Microsoft Windows', 'Chrome'],

  //Apply fingerprint.
  //After calling useFingerprint method, browser will be launched with fingerprint.

  // Replace `puppeteer.launch` method call with `plugin.launch`
  // const browser = await puppeteer.launch();
  const browser = await plugin.launch();

  //The rest of the code is the same as for a standard `puppeteer` library
  const page = await browser.newPage();
  await page.goto('', { waitUntil: 'networkidle0' });

  console.log('Canvas fingerprint:', await page.$eval('#crc', (el) => el.innerText));

  await browser.close();

After running updated code, new fingerprint will be applied each time, and therefore scores will differ for each start.

This is just a simple example, check documentation for corresponding plugin for more info.


Plugins described on this page relies on FingerprintSwitcher service. It has free and premium version. Plugins supports free version as well with all limitations inherent to demo of FingerprintSwitcher. In order to use free version, leave the key empty. Version comparison can be found here.