หน้าจอการยืนยันอีเมลผู้ดูแลระบบ (admin-email verification) ที่มาพร้อมกับ WordPress—ซึ่งจะปรากฏขึ้นทุกๆ ไม่กี่เดือนตั้งแต่เวอร์ชัน 5.3—ทำให้ระบบอัตโนมัติของ Playwright ที่ทำหน้าที่อัปเดตปลั๊กอินบนเว็บไซต์ที่ไม่มีสิทธิ์เข้าถึง SSH เกิดการขัดข้อง ขั้นตอนที่เพิ่มขึ้นมานี้ทำให้สคริปต์ต้องรอปุ่มที่ไม่เคยปรากฏขึ้น ส่งผลให้เกิดการหมดเวลา (timeout) และการติดตั้ง (deployment) หยุดชะงัก

สิ่งที่ทำให้เกิดการหยุดชะงัก

เมื่อสคริปต์ Playwright เข้าสู่ระบบ wp-admin มันจะคาดหวังให้หน้าแดชบอร์ดโหลดขึ้นมาทันที แต่ในบางครั้ง WordPress จะเปลี่ยนเส้นทาง (redirect) ไปยังหน้าที่ URL มีคำว่า adminhash= หน้าจอนี้จะถามว่า “Is this still your address?” พร้อมปุ่มสองปุ่มคือ Yes, this is my address และ I’ll wait หากเป็นมนุษย์จะคลิก “I’ll wait” และดำเนินการต่อในภายหลัง แต่สำหรับสคริปต์ที่ทำงานโดยไม่มีคนควบคุม มันจะยังคงมองหาองค์ประกอบของแดชบอร์ดต่อไปโดยไม่พบ และในที่สุดก็จะเกิดการหมดเวลา (timeout)

ทำไมจึงต้องมีข้อความแจ้งเตือนนี้

WordPress เพิ่มข้อความแจ้งเตือนนี้เพื่อยืนยันว่าที่อยู่อีเมลผู้ดูแลระบบยังสามารถติดต่อได้จริง โดยจะปรากฏขึ้นประมาณทุกๆ ไม่กี่เดือน ไม่ว่าเว็บไซต์จะมีกิจกรรมหรือไม่ก็ตาม และมีจุดประสงค์เพื่อเป็นขั้นตอนการตรวจสอบความปลอดภัยสำหรับเจ้าของเว็บไซต์ที่อาจสูญเสียการเข้าถึงอีเมลดังกล่าว

ใครที่ได้รับผลกระทบ

  • นักพัฒนา (Developers) ที่ต้องพึ่งพา Playwright ในการผลักดันการอัปเดตปลั๊กอิน, รันการทดสอบ UI หรือทำงานในส่วนของผู้ดูแลระบบจำนวนมาก
  • ผู้ให้บริการโฮสติ้ง (Hosting providers) ที่จำกัดการเข้าถึง SSH ทำให้ผู้ใช้ต้องทำระบบอัตโนมัติผ่านเบราว์เซอร์เท่านั้น
  • เจ้าของเว็บไซต์ (Site owners) ที่พบว่าการอัปเดตล่าช้าเนื่องจากระบบอัตโนมัติไปไม่ถึงหน้าจอการอัปเดต

ความเสียหายไม่ได้มีเพียงแค่เวลาไม่กี่วินาทีที่เสียไป แต่ความล้มเหลวที่เกิดขึ้นซ้ำๆ อาจทำให้ช่วงเวลาการบำรุงรักษาตามกำหนดการต้องหยุดชะงัก และบีบให้ต้องเข้ามาจัดการด้วยตัวเอง (manual intervention)

การตรวจจับหน้าจอที่ไม่ต้องการ

การมีอยู่ของ adminhash= ใน URL ปัจจุบันเป็นตัวบ่งชี้ที่เชื่อถือได้ ข้อความนี้จะปรากฏเฉพาะในหน้ายืนยันอีเมลเท่านั้น ไม่ปรากฏในหน้าแดชบอร์ดปกติหรือหน้าผู้ดูแลระบบอื่นๆ

วิธีการข้ามขั้นตอนแบบง่ายๆ

ใส่การตรวจสอบเข้าไปทันทีหลังจากขั้นตอนการเข้าสู่ระบบ หาก URL มีคำว่า adminhash= ให้คลิกปุ่ม “I’ll wait” และรอให้หน้าโหลดเสร็จสิ้นก่อนที่จะดำเนินการต่อ

def ensure_past_email_check(page):
    if "adminhash=" in page.url:
        page.click("text=I'll wait")
        page.wait_for_load_state("networkidle")

เรียกใช้ ensure_past_email_check(page) ทันทีหลังจากเข้าสู่ระบบสำเร็จทุกครั้ง ฟังก์ชันนี้จะไม่ทำอะไรเลยหากหน้าจอการยืนยันไม่ปรากฏขึ้น ช่วยให้สคริปต์ทำงานได้รวดเร็วและมีความแน่นอน (deterministic)

ควรใช้การข้ามขั้นตอนเมื่อใด

สำหรับเวิร์กโฟลว์อัตโนมัติที่ต้องทำงานโดยไม่มีคนควบคุม—เช่น การอัปเดตปลั๊กอินรายคืน หรือการทดสอบ UI แบบ continuous-integration—การข้ามขั้นตอนนี้ถือว่าใช้งานได้จริง เพราะมันเปลี่ยนขั้นตอนการยืนยันให้กลายเป็นเส้นทางเบี่ยงที่คาดการณ์ได้ แทนที่จะเป็นความล้มเหลวที่เกิดขึ้นแบบสุ่ม

ข้อโต้แย้ง

ผู้ดูแลระบบบางคนแย้งว่าการกดข้ามข้อความแจ้งเตือนโดยอัตโนมัติอาจเป็นการปกปิดปัญหาการส่งอีเมลที่เกิดขึ้นจริง หากอีเมลผู้ดูแลระบบไม่สามารถติดต่อได้จริงๆ เว็บไซต์อาจพลาดการแจ้งเตือนที่สำคัญ ในกรณีเช่นนี้ วิธีการที่ละเอียดอ่อนกว่า—เช่น การบันทึกเหตุการณ์ (logging), การส่งการแจ้งเตือน หรือการหยุดระบบอัตโนมัติชั่วคราว—อาจเป็นทางเลือกที่ดีกว่า

สิ่งที่ควรเฝ้าระวังต่อไป

  • WordPress อาจเปลี่ยนรูปแบบ URL หรือเพิ่มขั้นตอนการยืนยันเพิ่มเติม ซึ่งจะทำให้การตรวจสอบ adminhash= ใช้ไม่ได้ผล ควรคอยติดตามบันทึกการอัปเดต (release notes) ของตัวหลัก (core) อย่างใกล้ชิด
  • ตัวเลือก (selector engine) ของ Playwright มีการพัฒนาอยู่เสมอ ตรวจสอบให้แน่ใจว่า text selector "text=I'll wait" ยังคงตรงกับปุ่มหลังจากมีการปรับเปลี่ยน UI ใดๆ
  • หากคุณดูแลเว็บไซต์จำนวนมาก ควรพิจารณารวบรวมตรรกะการข้ามขั้นตอน (bypass logic) ไว้ในไลบรารีส่วนกลางเพื่อหลีกเลี่ยงการเขียนโค้ดซ้ำซ้อน

ด้วยการจัดการหน้ายืนยันอีเมลผู้ดูแลระบบอย่างชัดเจน นักพัฒนาจะสามารถเปลี่ยนปัญหาการหมดเวลาที่เกิดขึ้นเป็นครั้งคราว ให้กลายเป็นส่วนหนึ่งของสคริปต์ Playwright ตามปกติ ช่วยให้การทำงานอัตโนมัติของ WordPress มีความน่าเชื่อถือ แม้ว่าแพลตฟอร์มจะแสดงข้อความแจ้งเตือนความปลอดภัยที่ไม่ได้คาดคิดก็ตาม

Source: https://dev.to/susumun/browser-based-updates-getting-stuck-on-the-confirm-your-admin-email-screen-why-playwright-6io