Nhập liệu giống người
Với humanize, SDK chạy thao tác di chuột, click, cuộn trang và gõ phím theo đường đi và nhịp độ giống người thật. showCursor vẽ con trỏ để bạn quan sát.
Nhập liệu giống người (humanize & showCursor)
Truyền humanize và mọi thao tác nhập liệu — di chuyển chuột, click, kéo, cuộn và gõ phím — đều chạy theo cùng một chuẩn mô phỏng người thật, ở cả cấp page (page.click / hover / type / fill / mouse.* / keyboard.type) lẫn cấp locator (locator.click / type / fill / pressSequentially / dragTo / …). Chuột di chuyển theo một đường cubic-bézier hơi cong, xuất phát từ vị trí con trỏ cuối cùng, và được đi theo mô hình min-jerk sum-of-sub-movements (một chuyển động chính dạng ballistic + một chuyển động hiệu chỉnh — vận tốc nhiều đỉnh như khi người thật với tay tới mục tiêu, chứ không phải một hình chuông đối xứng duy nhất), và mọi thứ được phát đi dưới dạng sự kiện thật, trusted (isTrusted === true, và navigator.webdriver vẫn là false). Trên Pro, các cú click theo tọa độ (mouse.click(x, y)) đi theo chuyển động được ghi lại từ người thật; mọi thao tác khác, cùng mọi cú click trên bản build mở và gói Miễn phí với GitHub, đều dùng quỹ đạo được sinh ra. Thêm showCursor để vẽ một chấm chạy theo chuyển động, giúp bạn quan sát.
Vì chuyển động dùng input native, một nút được nhấn bằng mouse.down() sẽ được giữ nguyên trong suốt quá trình di chuyển — nên down → move → up là một thao tác kéo có giữ nút thật sự (các control kéo để chọn vị trí như slider sẽ nhận được một thao tác kéo có nhấn giữ thật), và locator.dragTo cũng được humanize. Gõ phím diễn ra từng phím một, với khoảng cách giữa các phím ngẫu nhiên + các khoảng dừng ở ranh giới từ và thỉnh thoảng gõ nhầm rồi sửa lại; cuộn trang dùng quán tính ease-out và thỉnh thoảng dừng lại như đang đọc. fill focus vào trường nhập rồi gõ nội dung ra (giá trị dài hơn ~200 ký tự vẫn được điền một lần để việc điền dữ liệu lớn không bị chậm như rùa).
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()