Bots playground: information for bot developpers
This page enables bot developpers to easily get information about their bot:
- HTTP headers
- IP address and autonomous system
- Geolocation
- Browser fingerprint
If you develop crawlers, you frequently need to check information about their fingerprint. Indeed, many websites use information related to HTTP headers, IP address and browser fingerprinting to block bots. Thus, you want to ensure your bot won't be detected because you've forgotten to remove navigator.webdriver = true from its fingerprint. To check this information you could run a server locally and collect a fingerprint, but you can't always do it.
On this page, you can access information about your bot fingerprint in 2 forms:
- Visually: Fingerprinting information is displayed so that you can take a screenshot with your bot;
- Programmatically: the fingerprint is stored in window.fingerprint.
Accessing your fingerprint programmatically
In each example, the fingerprint is stored in the variable called fingerprint.
Puppeteer and Headless Chromeconst puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.goto('https://device-info.fr/bots_playground');
await page.waitFor(() => {
return typeof window.fingerprint !== 'undefined';
});
const fingerprint = await page.evaluate(() => {
return window.fingerprint;
})
console.log(fingerprint);
await browser.close()
})()
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.goto('https://device-info.fr/bots_playground');
await page.waitFor(() => {
return typeof window.fingerprint !== 'undefined';
});
const fingerprint = await page.evaluate(() => {
return window.fingerprint;
})
console.log(fingerprint);
await browser.close()
})()
Playwright and Headless Chrome, Headless Firefox, Headless WebKitconst playwright = require('playwright');
(async () => {
// Replace by 'firefox' or 'webkit'
const browser = await playwright['chromium'].launch();
const context = await browser.newContext();
const page = await context.newPage();
await page.goto('https://device-info.fr/bots_playground');
await page.waitForFunction(() => {
return typeof window.fingerprint !== 'undefined';
});
const fingerprint = await page.evaluate(() => {
return window.fingerprint;
})
console.log(fingerprint);
await browser.close();
})();
const playwright = require('playwright');
(async () => {
// Replace by 'firefox' or 'webkit'
const browser = await playwright['chromium'].launch();
const context = await browser.newContext();
const page = await context.newPage();
await page.goto('https://device-info.fr/bots_playground');
await page.waitForFunction(() => {
return typeof window.fingerprint !== 'undefined';
});
const fingerprint = await page.evaluate(() => {
return window.fingerprint;
})
console.log(fingerprint);
await browser.close();
})();
Selenium and Chrome, Firefox, Safarirequire('chromedriver');const webdriver = require('selenium-webdriver');
(async () => {
const driver = new webdriver.Builder()
.forBrowser('chrome')
.build();
await driver.get('https://device-info.fr/bots_playground');
await driver.wait(async() => {
return driver.executeScript(() => {
return typeof window.fingerprint !== 'undefined';
})
});
const fingerprint = await driver.executeScript(async () => {
return window.fingerprint;
});
console.log(fingerprint);
await driver.close();
})();
require('chromedriver');const webdriver = require('selenium-webdriver');
(async () => {
const driver = new webdriver.Builder()
.forBrowser('chrome')
.build();
await driver.get('https://device-info.fr/bots_playground');
await driver.wait(async() => {
return driver.executeScript(() => {
return typeof window.fingerprint !== 'undefined';
})
});
const fingerprint = await driver.executeScript(async () => {
return window.fingerprint;
});
console.log(fingerprint);
await driver.close();
})();
IP address
Your IP address is 3.145.61.142 Autonomous system/ISP: Amazon.com, Inc. Country: United States
HTTP headers
List of your HTTP headers. For better accuracy, we display the raw headers, i.e. the headers as received by the server. They may differ from the ones shown in your developper tools or on other websites. The reason they may differ is that the devtools may apply transformation on the name of the headers (upper/lower case). The same thing can occur when a website is behind a load balancer or a CDN like Cloudflare, Akamai. The headers are displayed in the order received and with their case.
Header | Value |
---|---|
Connection | upgrade |
Host | deviceandbrowserinfo.com |
X-Forwarded-For | 3.145.61.142 |
accept | */* |
user-agent | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com) |
cookie | care_did=2c59a105-5d60-4b32-84ee-f4789e58e4de |
accept-encoding | gzip, br, zstd, deflate |
Device information
Attribute | Value | Description |
---|