Một quy trình đăng ký tài khoản đầy đủ cho thấy ranh giới rất rõ: điền biểu mẫu, chọn ngày và đọc mã email có thể tự động hóa, nhưng xác minh selfie video khiến luồng dừng lại. Hiểu chi phí của từng lớp thực tế hơn nhiều so với cố đạt tự động hóa hoàn toàn.
Người làm tự động hóa trình duyệt thường bắt đầu với một giả định khá lạc quan: chỉ cần chia quy trình thành các bước đủ nhỏ thì gần như không có gì là không thể tự động hóa.
Nhưng khi chạy toàn bộ luồng từ đầu đến cuối, bức tranh sẽ khác. Các bước đầu có thể trơn tru đáng ngạc nhiên, rồi cuối cùng quy trình dừng lại trước một rào cản không thể vượt qua bằng script. Một thử nghiệm đăng ký tài khoản là ví dụ điển hình: điền biểu mẫu, chọn ngày, lấy mã xác minh và vượt qua kiểm tra bảo mật đều hoàn tất trong chưa tới một phút. Khoảng 85% quy trình được tự động hóa. Phần còn lại là xác minh selfie video, yêu cầu người thật đứng trước camera.
Nếu tách quy trình theo chi phí, ranh giới sẽ rõ hơn nhiều so với tưởng tượng ban đầu.

Các thao tác xác định trên một trang thường rất ổn định với script
Những trường như tên, email, mật khẩu và ngày sinh là lớp ổn định nhất. Mô phỏng gõ bàn phím và để một khoảng nghỉ ngắn giữa các trường mất khoảng năm giây cho cả bước.
Điểm dễ vướng nhất là định vị phần tử. Nhiều frontend hiện đại tạo input không có thuộc tính name mang ngữ nghĩa, nên phải lấy theo chỉ số hoặc cấu trúc. Cách này không đẹp, nhưng trong tự động hóa đôi khi lại ổn định hơn.
Đây là loại tác vụ đầu tiên: cấu trúc trang cố định, hành động rõ ràng và kết quả có thể dự đoán. Với những thao tác trong phạm vi này, tỷ lệ thành công của script thường rất cao.
Gặp component tùy biến, chính cấu trúc trang trở thành một phần chi phí
Các lựa chọn dạng dropdown như ngày sinh hay giới tính mới là nơi thực sự tốn thời gian.
Một menu trông có vẻ thông thường có thể thực chất là component tùy biến dùng accessibility role. Các cách quen thuộc có thể lần lượt thất bại: phương thức select tiêu chuẩn không hoạt động, tìm theo nhãn trợ năng không được, và click trực tiếp phần tử mục tiêu cũng không hiệu quả. Cách ổn định thường là mô phỏng đầy đủ trình tự của người dùng: mở dropdown, chờ các tùy chọn render, tìm mục theo text rồi click.
Code có thể viết trong vài giây, nhưng debug có thể mất nhiều giờ. Giới hạn ở đây không chỉ nằm ở kỹ năng kỹ thuật mà còn ở việc cấu trúc trang có hợp tác hay không. Với component tùy biến, từ bỏ sớm cách truyền thống thường tiết kiệm thời gian nhất.
Duy trì trạng thái giữa nhiều website là lúc chi phí tăng rõ rệt
Khi mã xác minh được gửi qua email, logic rất đơn giản: mở hộp thư, tìm email mới nhất, trích xuất mã số rồi điền lại. Cả bước mất khoảng 20 giây.
Lỗi phổ biến cũng đơn giản: nếu script đọc nhầm email cũ, mã sẽ sai. Vì vậy phải lấy thư mới nhất theo thời gian.
Sau khi xác minh, nhiều nền tảng còn chuyển sang một trang kiểm tra bổ sung và gửi mã mới. Có thể tái sử dụng logic xử lý nhưng không được dùng lại giá trị mã trước đó.
Khó khăn thực sự là có hai website và hai phiên. Trạng thái đăng nhập email phải được duy trì, phiên của nền tảng phải tồn tại xuyên các bước, còn IP proxy, múi giờ và ngôn ngữ phải khớp với môi trường. Chi phí duy trì trạng thái liên website tích lũy dần theo cách này. Mỗi bước riêng lẻ đều không khó, nhưng khi nối chuỗi thì tỷ lệ lỗi tăng rõ rệt.
Ở đây script chỉ là bên thực thi; nó không tự quyết định website nhìn thấy nó với danh tính nào. Dấu vân tay thiết bị và mức độ khớp giữa IP với môi trường là những tín hiệu nền tảng có thể đánh giá. Vì vậy các nhóm vận hành nhiều tài khoản thường tách cô lập môi trường thành một lớp riêng: mỗi môi trường có fingerprint và IP độc lập. Các công cụ như PurpleMark cung cấp lớp môi trường này, còn script chỉ thực hiện hành động bên trong.
Công việc cần hiểu nội dung trang rất khó duy trì chỉ bằng script
Đi xa hơn, bản chất vấn đề bắt đầu thay đổi.
Khi nội dung hoặc cấu trúc trang thay đổi theo tài khoản, khu vực hay thử nghiệm theo giai đoạn, các selector hard-code sẽ lần lượt hỏng theo nhóm. Lúc này có hai hướng: nhồi mọi nhánh có thể vào code khiến việc bảo trì ngày càng khó, hoặc giao bước đó cho model có thể hiểu ngữ nghĩa của trang. Ý nghĩa của một thông báo hay nút bấm là điều hiển nhiên với con người nhưng chỉ là nhiễu đối với selector.
Khi nền tảng chủ động thay đổi, script thuần sẽ liên tục hỏng trở lại
Còn một loại chi phí dễ bị bỏ qua: phía đối diện cũng thay đổi.
Nền tảng không chỉ xem bạn có điền được biểu mẫu hay không. Họ có thể đánh giá fingerprint thiết bị có bình thường không, IP có khớp với môi trường thiết bị không, hành vi có giống người thật không và có dấu hiệu thao tác hàng loạt hay không. Chỉ một lần nâng cấp kiểm soát rủi ro cũng có thể khiến selector hoặc mẫu hành vi hôm qua còn hoạt động phải viết lại.
Điều đó có nghĩa giải pháp thuần script không bao giờ có trạng thái “hoàn tất” thật sự. Đây không phải dự án giao một lần mà là công việc bảo trì liên tục.
Xác minh khuôn mặt không chỉ là bài toán kỹ thuật
Cửa cuối của quy trình yêu cầu một người thật đứng trước camera, và tự động hóa dừng ở đó.
Script có thể điền form, click nút, đọc email và nhập mã, nhưng không thể thực hiện hợp lệ một hành động cần đặc điểm sinh trắc học của một người. Lý do không đơn giản là công nghệ chưa đủ tốt: mục đích của bước xác minh chính là kiểm tra xem có người thật trước màn hình hay không, điều này trực tiếp đối lập với mục tiêu tự động hóa. Các giải pháp tuyên bố có thể tự động vượt qua xác minh khuôn mặt thường liên quan đến thông tin sinh trắc học giả mạo và có thể tạo ra rủi ro tuân thủ hoặc pháp lý lớn hơn rất nhiều so với lợi ích.
Ngay cả khi một bước khả thi về kỹ thuật, điều khoản sử dụng của nền tảng vẫn phải được tôn trọng. Nhiều nền tảng giới hạn rõ ràng hành vi đăng ký tự động. Đây là ràng buộc về quy tắc, không phải giới hạn năng lực kỹ thuật.
Kết luận là chọn công cụ theo từng lớp, không phải theo đuổi tự động hóa hoàn toàn
Khi chia luồng thành từng lớp, cách lựa chọn sẽ rõ ràng hơn:
- Dùng script cho trang cố định và hành động xác định; đây thường là lựa chọn rẻ nhất và ổn định nhất.
- Khi cần duy trì đăng nhập và phiên giữa nhiều website, hãy quản lý môi trường trình duyệt như một lớp riêng thay vì trộn vấn đề môi trường với việc debug script.
- Khi cấu trúc thay đổi và hành động tiếp theo phụ thuộc vào hiểu ngữ nghĩa, dùng model có thể thực tế hơn việc chất thêm các nhánh vào code.
- Khi một bước cần người thật hoặc bị điều khoản sử dụng cấm rõ ràng, đừng cố ép tự động hóa từ đầu đến cuối.
Hãy đi thủ công toàn bộ quy trình trước để xác định có điểm chặn nào không thể vượt qua, rồi mới quyết định mức đầu tư phát triển. Tự động hóa có giá trị nhất ở các thao tác lặp lại, xác định và không cần phán đoán.


