> ## Documentation Index
> Fetch the complete documentation index at: https://docs.surfsky.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Human behavior

> Choose input methods, sequence page actions, and set timing for realistic browser interactions.

Sites can evaluate interaction patterns alongside network and browser properties. Surfsky manages the browser fingerprint and proxy connection, and provides Human commands for mouse, keyboard, and scroll input. Your script controls the sequence of actions and the time between them.

## Use Human commands for all input

Use [Human commands](/human_emulation) for clicks, typing, and scrolling instead of the default Playwright and Puppeteer input methods. Methods such as `page.click`, `page.type`, and `page.mouse.move` do not simulate human movement and timing by default. The [Python](/sdk/python) and [TypeScript](/sdk/typescript) SDK input methods, including `browser.click()` and `browser.type()`, already use the Human command layer.

Use Human commands consistently within a session. Surfsky tracks the cursor position between commands; moving it through Playwright or Puppeteer can leave that state out of sync. Avoid `element.click()` inside `evaluate` as well, since it dispatches an untrusted event.

<span id="do-what-a-person-does-on-the-page" />

## Follow the page layout

Wait for the content to load, then use `Human.scroll` to reach the section you need. Use `Human.moveTo` for controls that require hovering. `Human.click` scrolls its target into view automatically, but allow time before the click if the page requires reading or choosing an option.

Fill forms one field at a time, in the order shown on the page. Click each field before typing.

Check that each selector matches the control you intend to use. Some pages include hidden fields or links as bot traps, known as honeypots. Avoid filling every input or clicking the first match from a broad selector. `Human.click` checks that an element has a visible box; it does not check whether the element belongs to the actual form or navigation.

<span id="pace-it" />

## Timing

`Human.click` includes a short pause before pressing the button. If you call it immediately after `waitForSelector` returns, that pause is the only delay before the click. Keep the default `preDelay` and `postDelay` values, and allow extra time for reading or making a selection where the page requires it.

Avoid adding random mouse movements or delays to every command. Scroll to read content and hover to open controls where needed; additional movement does not necessarily make a session more realistic.

Repeated sessions can follow a recognizable sequence even when their timing varies. Where the task allows, vary the entry page, optional steps, or scroll distance.

## Where it matters

Pay particular attention to timing and navigation on login, registration, and checkout pages. Use the site's menus or links to reach the form, and allow time to read each step before submitting it.

If the first request is blocked before JavaScript runs, start by checking the [proxy](/proxies) and [fingerprint](/fingerprints). Request headers and IP reputation can be assessed before the page loads, so changing input timing will not address that failure.
