Pular para o conteúdo

Entrada humanizada

Com humanize, o SDK executa movimentos do mouse, cliques, rolagem e digitação com trajetórias e ritmo de uma pessoa. O showCursor desenha o ponteiro para você acompanhar.

Entrada humanizada (humanize & showCursor)

Passe humanize e toda a entrada — mover, clicar, arrastar, rolar e digitar — segue um único padrão humanizado, tanto no nível da página (page.click / hover / type / fill / mouse.* / keyboard.type) quanto no nível do locator (locator.click / type / fill / pressSequentially / dragTo / …). Os movimentos seguem uma trajetória bézier cúbica levemente arqueada, construída a partir da última posição do cursor e percorrida como uma soma de submovimentos min-jerk (um movimento balístico primário + um corretivo — a velocidade com vários picos de um alcance real, e não um único sino simétrico), e tudo é disparado como eventos reais e confiáveis (isTrusted === true, e navigator.webdriver continua false). No Pro, cliques por coordenada (mouse.click(x, y)) seguem movimentos gravados de pessoas reais; todo o resto, e todo clique no build aberto e no Grátis com GitHub, usa trajetórias geradas. Adicione showCursor para desenhar um ponto que acompanha o movimento, para você ver o que acontece.

Como os movimentos usam entrada nativa, um botão pressionado com mouse.down() continua pressionado durante o movimento — então down → move → up é um arraste real com o botão pressionado (controles de arrastar até uma posição, como sliders, recebem um arraste de fato pressionado), e locator.dragTo também é humanizado. A digitação é feita tecla por tecla, com intervalos aleatórios entre teclas + pausas entre palavras e, de vez em quando, a correção de um erro de digitação; a rolagem usa inércia ease-out, com uma pausa de leitura ocasional. O fill foca o campo e digita o valor (valores com mais de ~200 caracteres continuam atômicos, para que preenchimentos grandes não se arrastem).

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