FPScanner Bot Detection Tests
This page documents the bot detection checks returned under fastBotDetectionDetails.
Each entry includes a name, severity, and description.
Severity indicates how strongly a test is associated with automation or bot activity.
fastBotDetectionDetails
21 detection tests[
{
"name": "headlessChromeScreenResolution",
"severity": "high",
"description": "Detects default headless screen resolution (800x600)."
},
{
"name": "hasWebdriver",
"severity": "high",
"description": "Checks whether `navigator.webdriver` is set to `true`."
},
{
"name": "hasWebdriverWritable",
"severity": "high",
"description": "Checks whether the `navigator.webdriver` property is writable."
},
{
"name": "hasSeleniumProperty",
"severity": "high",
"description": "Detects known Selenium side effects, such as global variables or DOM artifacts."
},
{
"name": "hasCDP",
"severity": "high",
"description": "Detects side effects associated with automation via the Chrome DevTools Protocol (CDP)."
},
{
"name": "hasPlaywright",
"severity": "high",
"description": "Detects Playwright-specific globals, hooks, or runtime artifacts."
},
{
"name": "hasImpossibleDeviceMemory",
"severity": "high",
"description": "Flags `navigator.deviceMemory` values that fall outside the range typically returned by real browsers.."
},
{
"name": "hasHighCPUCount",
"severity": "high",
"description": "Flags unusually high logical CPU counts, often observed in servers or virtual machines."
},
{
"name": "hasMissingChromeObject",
"severity": "high",
"description": "Checks for missing or inconsistent `window.chrome` properties in Chromium-based environments."
},
{
"name": "hasWebdriverIframe",
"severity": "high",
"description": "Checks whether `navigator.webdriver` is `true` inside an iframe context."
},
{
"name": "hasWebdriverWorker",
"severity": "high",
"description": "Checks if navigator.webdriver = true inside web worker context."
},
{
"name": "hasMismatchWebGLInWorker",
"severity": "high",
"description": "Detects mismatched WebGL renderer values between execution contexts."
},
{
"name": "hasMismatchPlatformIframe",
"severity": "high",
"description": "Detects platform mismatches between the main page and iframe context."
},
{
"name": "hasMismatchPlatformWorker",
"severity": "high",
"description": "Detects platform mismatch between main page and worker context."
},
{
"name": "hasSwiftshaderRenderer",
"severity": "low",
"description": "Detects the SwiftShader software renderer, commonly seen in headless or server environments."
},
{
"name": "hasUTCTimezone",
"severity": "medium",
"description": "Flags use of the UTC timezone as a weak automation signal."
},
{
"name": "hasMismatchLanguages",
"severity": "low",
"description": "Detects inconsistencies between language-related browser properties (e.g., `navigator.language` and `navigator.languages`)."
},
{
"name": "hasInconsistentEtsl",
"severity": "high",
"description": "Checks whether `eval.toString().length` matches the value expected for the browser claimed in the user agent."
},
{
"name": "hasBotUserAgent",
"severity": "high",
"description": "Matches known bot or automation user-agent patterns."
},
{
"name": "hasGPUMismatch",
"severity": "high",
"description": "Detects mismatched GPU vendor or renderer signals across collection contexts."
},
{
"name": "hasPlatformMismatch",
"severity": "high",
"description": "Detects platform inconsistencies between the user agent and runtime-exposed properties."
}
]