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. On Pro, coordinate clicks follow 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 (e.g. a slider): the press stays held across the move
x0, y0, x1 = 100, 300, 400               # the handle's start, and where to release it
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 rather than being dispatched from page script, and navigator.webdriver stays false.

Typing with rhythm

Keys go one at a time with randomised 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 humanize interpolate between them: hand-rolled per-step easing produces motion statistics that stock input never produces.

Every build generates the motion paths: the SDK plans moves, drags, scrolls and typing, and coordinate clicks (mouse.click) take the engine's own path. On Pro, those clicks follow motion derived from recorded human movement, and on the licensed build (free with GitHub or Pro) pointer reporting is higher-fidelity. Nothing in your code changes between them.

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.

The diff

38,921 lines between stock Chromium and Clearcote Pro.

That is how far the Pro build is from the Chromium Google ships. Every value a site can read is set where Chromium computes it, so the page, its workers and its iframes all describe the same device.

  • Canvas
  • WebGL
  • WebGPU
  • Audio
  • Fonts
  • Screen and window
  • WebRTC
  • TLS
  • Client hints
  • Input timing
  • Voices and codecs
Read the open build's patches on GitHub

Pro build, counted from its r57 patch stack (Chromium 156.0.8078.47). The free open build is a smaller, public patch set.

Chromium 156.0.8078.47 → Clearcote Pro r57

345 files changed, 35915 insertions(+), 3006 deletions(-)

240 patches

Files changed, by area

  • Rendering engine (Blink)118
  • Browser (chrome/)52
  • Content layer42
  • Components39
  • Network stack22
  • UI and windows14
  • TLS (BoringSSL)11
  • V8 and URL17
  • Everything else30

Which plan includes it

Humanized mouse, typing and scrolling are in every tier: one launch option in Python, Node and .NET, with explicit calls in .NET as well. On the licensed build (free with GitHub), pointer reporting is higher-fidelity, and on Pro, coordinate clicks follow recorded human movement.

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; nothing is synthesized from page script. (showCursor adds a visible overlay to the page, so keep it for demos.)

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?

Yes. Since SDK 0.58.0 the Humanize = true launch option humanizes every page and popup of a launch, as humanize does in Python and Node. There are explicit calls too: HumanClickAsync, HumanTypeAsync, HumanPressAsync, HumanScrollAsync, HumanDragToAsync and HumanSelectOptionAsync on a page or locator.

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

Better not. Layering another library's easing on top of humanize'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

A drop-in for Playwright & Puppeteer, coherent down to the TLS handshake, with an open-source build to start from.

Free for one browser: GitHub, a card check or a company Google account. Never charged.