Skip to content
Input · mouse · keyboard · scroll

Mouse and keyboard input that moves like a person

Stock automation teleports the pointer and types at machine speed. With humanize on, every click, hover, fill, drag and scroll in Playwright goes through one humanized path: a curved, eased cursor, key-by-key typing with natural timing and inertial scrolling, all dispatched as trusted native events.

In every tier. The licensed build, free with GitHub, drives it with recorded human motion.

Turn it on, keep your script

from clearcote import launch

browser = launch(fingerprint="seed-123", humanize=True, show_cursor=True)
page = browser.new_page()
page.goto("https://example.com")

page.click("text=Sign in")               # eased curve, then a trusted click
page.fill("#email", "you@example.com")   # focus, then key-by-key typing
page.locator("#password").type("s3cr3t") # locators are humanized too

# a held-button drag: the press stays held across the move
page.mouse.move(x0, y0); page.mouse.down()
page.mouse.move(x1, y0); page.mouse.up()
browser.close()

Highlights

Curved, corrective paths

Moves follow a slightly bowed Bézier path from the last cursor position, walked as a fast primary movement plus a correction: the multi-peak velocity of real reaching.

Trusted events

Input is native, so events arrive with isTrusted set, there's no script-injection tell, and navigator.webdriver stays false.

Typing with rhythm

Keys go one at a time with gaussian gaps, pauses at word boundaries and the occasional corrected typo. Values over about 200 characters stay atomic so bulk fills don't crawl.

Real drags

A button pressed with mouse.down() stays held across the move, so down, move, up is a genuine held-button drag, and locator.dragTo is humanized too.

Scrolling with inertia

Wheel scrolling eases out the way a real wheel or trackpad does, with the occasional pause to read.

Safe clicks, visible motion

Each trusted click is checked first (visible, enabled, stable, not covered) and falls back to the native click otherwise. showCursor draws the pointer so you can watch.

How it fits into your script

humanize works at the page level (click, hover, type, fill, mouse.*, keyboard.type) and at the locator level (click, type, fill, pressSequentially, dragTo), so existing scripts pick it up without edits.

Don't layer your own easing on top. Set waypoints and let the engine interpolate between them: hand-rolled per-step easing produces motion statistics that stock input never produces.

The open build generates its motion paths. The licensed build, free with a GitHub account, drives the same API with motion derived from recorded human movement and adds higher-fidelity pointer reporting. Nothing in your code changes between the two.

What people use it for

Pages that watch behaviour

Flows that look at how the pointer and keyboard move, not only where they land.

Drag interactions

Held-button drags work, so sliders and drag-and-drop behave as they do by hand.

Form-heavy workflows

Sign-ups, checkouts and settings pages typed out rather than pasted in one event.

Demos and recordings

showCursor makes automated walkthroughs readable on video.

Clearcote is built for privacy, testing, research and lawful automation. You're responsible for how you use it and for following the terms of the sites you visit.

Which plan includes it

Humanized mouse, typing and scrolling are in every tier, in the Python and Node SDKs. The licensed build (free with GitHub) upgrades the motion to recorded human movement and adds higher-fidelity pointer reporting.

Compare plans

FAQ

How do I make Playwright mouse movement look human?

Launch through the Clearcote SDK with humanize: true (Python: humanize=True). Your existing page.click, fill and mouse calls then move and type the humanized way, with no other change.

Are the events trusted?

Yes. They're dispatched as native input, so event.isTrusted is true, and there's no injected script to find.

Does it slow scripts down?

A little, the way a person is slower than a teleport. Long values (over about 200 characters) are filled in one go, so bulk data entry stays fast.

Is it available in the .NET SDK?

Not yet. Humanized input is in the Python and Node SDKs; the .NET SDK covers launch, persistent contexts, serve, verified download and licensing.

Can I use my own mouse-movement library with it?

Better not. Layering another library's easing on top of the engine's produces motion that neither a person nor stock input produces. Give Playwright the targets and let humanize do the path.

Go deeper in the docs

Related features

Try Clearcote

Open source, a drop-in for Playwright & Puppeteer, and coherent down to the TLS handshake.

Free for one browser with GitHub. No card.