Humanizer

WebSkrap's humanizer is the human_click session helper. It waits for a visible target, scrolls it into view, moves the mouse along a curved eased path, and then clicks near the target center instead of calling Playwright's direct page.click.

async with WebSkrapClient() as client:
    session = await client.session("default")
    page = await session.context.new_page()
    await page.goto("https://example.com", wait_until="domcontentloaded")
    await session.human_click(page, "button[type='submit']")

Use it when a normal page interaction should look closer to a manual browser click. It is useful for flows with hover-sensitive controls, scroll-dependent layouts, or simple behavioral checks that treat instant coordinate jumps as synthetic.

Direct click fallback

Pass human=False to keep the same call shape while delegating to Playwright's click implementation.

await session.human_click(page, "button[type='submit']", human=False, timeout=5_000)

Click options

human_click accepts normal Playwright click options including button, click_count, delay, modifiers, position, strict, timeout, and trial.

await session.human_click(
    page,
    "button[type='submit']",
    strict=True,
    timeout=10_000,
    modifiers=["Shift"],
)

Boundaries

Humanized clicks do not solve CAPTCHAs, bypass login walls, evade access controls, or grant permission to scrape restricted targets. Use them only on sites and workflows you are allowed to access.