Humanized input
With humanize, the SDK runs mouse movement, clicks, scrolling and typing along human-like paths and timing. showCursor draws the pointer so you can watch it.
Humanized input (humanize & showCursor)
Pass humanize and all input — moving, clicking, dragging, scrolling, and typing — runs through one humanized standard, at both the page level (page.click / hover / type / fill / mouse.* / keyboard.type) and the locator level (locator.click / type / fill / pressSequentially / dragTo / …). Moves follow a slightly bowed cubic-bézier path built from the last cursor position, walked as a min-jerk sum-of-sub-movements (a ballistic primary + corrective move — the multi-peak velocity of real reaching, not one symmetric bell), and everything is dispatched as real, trusted events (isTrusted === true, and navigator.webdriver stays false). On Pro, coordinate clicks (mouse.click(x, y)) follow motion recorded from real people; everything else, and every click on the open build and Free with GitHub, uses generated paths. Add showCursor to draw a dot that follows the motion so you can watch it.
Because moves use native input, a button pressed with mouse.down() stays held across the move — so down → move → up is a real held-button drag (drag-to-position controls such as sliders get a genuinely pressed drag), and locator.dragTo is humanized too. Typing goes key-by-key with randomised inter-key timing + word-boundary pauses and the occasional fat-finger correction; scrolling uses ease-out inertia with the occasional reading pause. fill focuses the field and types it out (values over ~200 chars stay atomic so bulk fills don't crawl).
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 + key-by-key human typing
page.locator("#password").type("s3cr3t") # locators are humanized too
# 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()