Automate a real Android browser.
Undetected.
Damru is the first open-source framework that automates a real Android browser — Redroid + Playwright + CDP with OS-level fingerprint spoofing. Built for web scraping, automation testing, and anti-bot research. An undetected-chromedriver alternative for mobile.
★ 173 GitHub stars# automate a real Android device, spoofed at the OS level
from damru import AsyncDamru
async with AsyncDamru(device="random") as browser:
page = await browser.new_page()
await page.goto("https://creepjs.com")
# fingerprint → real Android device Why Android-native
Desktop stealth got caught.
Real mobile didn't.
undetected-chromedriver, playwright-stealth and SeleniumBase patch a desktop browser with JavaScript — a surface detectors now read well. Damru runs a genuine Android device and changes the fingerprint beneath the browser. A category no other open-source framework addresses.
Features
What's under the hood
Zero JS injection
Spoofing happens at the OS, binary and CDP layers — nothing in the DOM for detectors to read.
155 real device profiles
Genuine Samsung, Pixel, Xiaomi, OPPO and Realme fingerprints — real hardware, not desktop values faking mobile.
GPU binary patching
Patches Vulkan / GLES .so files so the GPU fingerprint matches the spoofed device.
TLS / JA3 randomization
~184 unique network fingerprints from one binary.
Real Android, in Docker
Android 14 via Redroid, driven through the Chrome DevTools Protocol with Playwright.
Pools that scale
Orchestrate many Redroid workers in parallel for scraping and automation at scale.
Pipeline
Redroid → CDP → Playwright
Real Android runs in Docker; native hooks rewrite device identity at the system level; Chrome is driven over CDP via ADB; you script it with a Playwright-style Python API. See the architecture →
Get started
Running in three steps
Install
One command from PyPI.
# from PyPI
pip install damruSet up
Pull the Android image, check your env.
python -m damru setup python -m damru install-image python -m damru check-env
Automate
Drive a real Android browser.
async with AsyncDamru(
device="random") as b:
page = await b.new_page()Architecture
The pipeline
Spoofing is applied at the OS, binary, and network layers before the page loads. See the full architecture →
Automate a real Android browser
Open source, Python, and undetectable by design. Install in one command and run your first stealth session in minutes.