Saltar al contenido

Entrada humanizada

Con humanize, el SDK mueve el mouse, hace clic, hace scroll y escribe con trayectorias y tiempos similares a los humanos. showCursor dibuja el puntero para que puedas verlo.

Entrada humanizada (humanize & showCursor)

Pasa humanize y toda la entrada —mover, hacer clic, arrastrar, hacer scroll y escribir— sigue un mismo estándar humanizado, tanto a nivel de página (page.click / hover / type / fill / mouse.* / keyboard.type) como a nivel de locator (locator.click / type / fill / pressSequentially / dragTo / …). Los movimientos siguen una trayectoria bézier cúbica ligeramente curvada que parte de la última posición del cursor y se recorre como una suma de submovimientos de jerk mínimo (un movimiento balístico principal + uno correctivo: la velocidad con varios picos de un gesto real de alcance, no una única campana simétrica), y todo se despacha como eventos reales y confiables (isTrusted === true, y navigator.webdriver sigue en false). En Pro, los clics por coordenadas (mouse.click(x, y)) siguen movimientos grabados de personas reales; todo lo demás, y cada clic en el build abierto y en Gratis con GitHub, usa trayectorias generadas. Agrega showCursor para dibujar un punto que sigue el movimiento y así poder verlo.

Como los movimientos usan entrada nativa, un botón presionado con mouse.down() se mantiene presionado durante el movimiento, así que down → move → up es un arrastre real con el botón presionado (los controles de arrastrar hasta una posición, como los sliders, reciben un arrastre realmente presionado), y locator.dragTo también está humanizado. La escritura va tecla por tecla, con tiempos entre teclas aleatorios + pausas entre palabras y alguna que otra corrección de dedazo; el scroll usa inercia ease-out con alguna pausa ocasional de lectura. fill enfoca el campo y escribe el valor (los valores de más de ~200 caracteres se mantienen atómicos para que los rellenados masivos no se eternicen).

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()