صفحه تأیید ایمیل مدیریت داخلی WordPress — که از نسخه ۵.۳ به بعد هر چند ماه یک‌بار نمایش داده می‌شود — اتوماسیون Playwright را در سایت‌هایی که دسترسی SSH ندارند و به‌روزرسانی افزونه‌ها را انجام می‌دهند، مختل می‌کند. این مرحله اضافی باعث می‌شود اسکریپت‌ها منتظر دکمه‌ای بمانند که هرگز ظاهر نمی‌شود، که منجر به اتمام زمان (timeout) و توقف فرآیند استقرار (deployment) می‌شود.

عامل ایجاد توقف چیست

وقتی یک اسکریپت Playwright وارد wp-admin می‌شود، انتظار دارد داشبورد بلافاصله بارگذاری شود. اما در عوض، WordPress گاهی اوقات کاربر را به صفحه‌ای هدایت می‌کند که URL آن شامل adminhash= است. این صفحه می‌پرسد: «آیا این هنوز آدرس شماست؟» و دو دکمه دارد: Yes, this is my address و I’ll wait. یک انسان روی «I’ll wait» کلیک کرده و بعداً ادامه می‌دهد؛ اما یک اسکریپت خودکار مدام به دنبال عناصر داشبورد می‌گردد، آن‌ها را پیدا نمی‌کند و در نهایت با خطای timeout مواجه می‌شود.

چرا این پیام نمایش داده می‌شود

WordPress این پیام را برای تأیید اینکه آدرس ایمیل مدیریت همچنان قابل دسترس است، اضافه کرده است. این پیام تقریباً هر چند ماه یک‌بار، صرف‌نظر از فعالیت سایت، ظاهر می‌شود و به عنوان یک بررسی امنیتی برای صاحبان سایت‌هایی که ممکن است دسترسی خود به آن آدرس را از دست داده باشند، در نظر گرفته شده است.

چه کسانی تحت تأثیر قرار می‌گیرند

  • توسعه‌دهندگانی که برای اعمال به‌روزرسانی‌های افزونه، اجرای تست‌های UI یا انجام وظایف مدیریتی انبوه به Playwright متکی هستند.
  • ارائه‌دهندگان هاستینگ که دسترسی SSH را محدود می‌کنند و کاربران را مجبور می‌کنند اتوماسیون را از طریق مرورگر انجام دهند.
  • صاحبان سایت که به دلیل عدم رسیدن اتوماسیون به صفحه به‌روزرسانی، با تأخیر در به‌روزرسانی‌ها مواجه می‌شوند.

هزینه این مشکل فقط چند ثانیه اتلاف وقت نیست؛ شکست‌های مکرر می‌تواند پنجره‌های تعمیر و نگهداری برنامه‌ریزی‌شده را متوقف کرده و نیاز به مداخله دستی را ایجاد کند.

شناسایی صفحه ناخواسته

وجود 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) را فراخوانی کنید. اگر صفحه تأیید ظاهر نشود، این تابع هیچ کاری انجام نمی‌دهد و باعث می‌شود اسکریپت سریع و قابل پیش‌بینی باقی بماند.

چه زمانی از این روش استفاده کنیم

برای جریان‌های کاری خودکار که باید بدون نظارت انسانی اجرا شوند — مانند به‌روزرسانی‌های شبانه افزونه‌ها یا تست‌های UI در فرآیند CI — این روش کاربردی است. این کار با مرحله تأیید به عنوان یک انحراف قابل پیش‌بینی برخورد می‌کند، نه یک شکست تصادفی.

دیدگاه مخالف

برخی از مدیران استدلال می‌کنند که رد کردن خودکار این پیام می‌تواند یک مشکل واقعی در تحویل ایمیل را پنهان کند. اگر ایمیل مدیریت واقعاً غیرقابل دسترس شود، ممکن است سایت اعلان‌های حیاتی را از دست بدهد. در چنین مواردی، یک رویکرد دقیق‌تر — مانند ثبت رویداد، ارسال هشدار یا متوقف کردن اتوماسیون — ممکن است ترجیح داده شود.

موارد بعدی که باید مراقب باشید

  • WordPress ممکن است الگوی URL را تغییر دهد یا مراحل تأیید اضافی اضافه کند که باعث از کار افتادن بررسی adminhash= می‌شود. یادداشت‌های انتشار نسخه اصلی (core release notes) را دنبال کنید.
  • موتور انتخاب‌گر (selector engine) Playwright تکامل می‌یابد؛ اطمینان حاصل کنید که انتخاب‌گر متنی "text=I'll wait" پس از هرگونه بازطراحی رابط کاربری (UI)، همچنان با دکمه مطابقت دارد.
  • اگر سایت‌های زیادی را مدیریت می‌کنید، منطق دور زدن را در یک کتابخانه مشترک متمرکز کنید تا از تکرار کد جلوگیری شود.

توسعه‌دهندگان با مدیریت صریح صفحه تأیید ایمیل مدیریت، یک خطای timeout گاه‌به‌گاه را به بخشی روتین از اسکریپت‌های Playwright خود تبدیل می‌کنند و اتوماسیون WordPress را حتی زمانی که پلتفرم یک پیام امنیتی غیرمنتظره ارائه می‌دهد، قابل اعتماد نگه می‌دارند.

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