Màn hình xác minh email quản trị tích hợp sẵn của WordPress—xuất hiện vài tháng một lần kể từ phiên bản 5.3—làm gián đoạn quá trình tự động hóa bằng Playwright khi cập nhật plugin trên các trang web không có quyền truy cập SSH. Bước bổ sung này buộc các script phải chờ đợi một nút bấm không bao giờ xuất hiện, dẫn đến tình trạng quá hạn thời gian (timeout) và đình trệ quá trình triển khai.
Điều gì gây ra sự đình trệ
Khi một script Playwright đăng nhập vào wp-admin, nó mong đợi bảng điều khiển (dashboard) sẽ tải ngay lập tức. Thay vào đó, WordPress đôi khi chuyển hướng đến một trang có URL chứa adminhash=. Trang này sẽ hỏi: “Is this still your address?” với hai nút: Yes, this is my address và I’ll wait. Một người dùng thật sẽ nhấp vào “I’ll wait” và tiếp tục sau đó; nhưng một script chạy tự động sẽ liên tục tìm kiếm các thành phần của dashboard, không bao giờ tìm thấy chúng, và cuối cùng dẫn đến lỗi timeout.
Tại sao thông báo này tồn tại
WordPress đã thêm thông báo này để xác nhận rằng địa chỉ email quản trị vẫn có thể liên lạc được. Nó xuất hiện khoảng vài tháng một lần, bất kể hoạt động của trang web, và được thiết kế như một bước kiểm tra bảo mật cho các chủ sở hữu trang web có thể đã mất quyền truy cập vào địa chỉ đó.
Những ai bị ảnh hưởng
- Các nhà phát triển dựa vào Playwright để đẩy các bản cập nhật plugin, chạy các bài kiểm tra UI hoặc thực hiện các tác vụ quản trị hàng loạt.
- Các nhà cung cấp hosting hạn chế SSH, buộc người dùng phải tự động hóa thông qua trình duyệt.
- Chủ sở hữu trang web gặp tình trạng cập nhật bị chậm trễ vì quá trình tự động hóa không bao giờ tiếp cận được màn hình cập nhật.
Cái giá phải trả không chỉ là vài giây lãng phí; những thất bại lặp đi lặp lại có thể làm gián đoạn các khung thời gian bảo trì đã lên lịch và buộc phải can thiệp thủ công.
Cách phát hiện màn hình không mong muốn
Sự hiện diện của adminhash= trong URL hiện tại là một dấu hiệu đáng tin cậy. Chuỗi ký tự này chỉ xuất hiện trên trang xác minh email, không xuất hiện trên dashboard thông thường hay bất kỳ màn hình quản trị nào khác.
Một cách bỏ qua đơn giản
Chèn một bước kiểm tra ngay sau bước đăng nhập. Nếu URL có chứa adminhash=, hãy nhấp vào nút “I’ll wait” và đợi trang ổn định trước khi tiếp tục.
def ensure_past_email_check(page):
if "adminhash=" in page.url:
page.click("text=I'll wait")
page.wait_for_load_state("networkidle")
Gọi ensure_past_email_check(page) ngay sau mỗi lần đăng nhập thành công. Hàm này sẽ không thực hiện gì nếu màn hình xác minh không xuất hiện, giúp script chạy nhanh và có tính xác định (deterministic).
Khi nào nên sử dụng cách bỏ qua này
Đối với các quy trình làm việc tự động phải chạy mà không có sự giám sát của con người—chẳng hạn như cập nhật plugin hàng đêm hoặc các bài kiểm tra UI tích hợp liên tục (continuous-integration)—việc bỏ qua này rất thực tế. Nó coi bước xác minh như một sự chuyển hướng có thể dự đoán được thay vì một lỗi ngẫu nhiên.
Quan điểm ngược lại
Một số quản trị viên lập luận rằng việc tự động bỏ qua thông báo có thể che giấu một vấn đề thực sự về việc gửi email. Nếu email quản trị thực sự không thể liên lạc được, trang web có thể bỏ lỡ các thông báo quan trọng. Trong những trường hợp như vậy, một cách tiếp cận tinh tế hơn—như ghi lại sự kiện, gửi cảnh báo hoặc tạm dừng quá trình tự động hóa—có thể sẽ tốt hơn.
Những điều cần lưu ý tiếp theo
- WordPress có thể thay đổi cấu trúc URL hoặc thêm các bước xác minh bổ sung, điều này sẽ làm hỏng việc kiểm tra
adminhash=. Hãy theo dõi các ghi chú phát hành (release notes) của WordPress core. - Công cụ selector của Playwright luôn phát triển; hãy đảm bảo selector văn bản
"text=I'll wait"vẫn khớp với nút bấm sau bất kỳ thay đổi thiết kế UI nào. - Nếu bạn quản lý nhiều trang web, hãy cân nhắc việc tập trung hóa logic bỏ qua trong một thư viện dùng chung để tránh lặp lại mã nguồn.
Bằng cách xử lý rõ ràng trang xác nhận email quản trị, các nhà phát triển có thể biến một lỗi timeout thỉnh thoảng xảy ra thành một phần định kỳ trong các script Playwright của họ, giúp việc tự động hóa WordPress luôn đáng tin cậy ngay cả khi nền tảng đưa ra một thông báo bảo mật bất ngờ.
