Skip to main content
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 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 and 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.

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.

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 and fingerprint. Request headers and IP reputation can be assessed before the page loads, so changing input timing will not address that failure.