WordPress 内置的管理邮箱验证页面——自 5.3 版本以来每隔几个月就会出现一次——会破坏那些在没有 SSH 访问权限的网站上更新插件的 Playwright 自动化流程。这个额外的步骤迫使脚本等待一个永远不会出现的按钮,从而导致超时和部署停滞。

导致停滞的原因

当 Playwright 脚本登录 wp-admin 时,它期望仪表盘能立即加载。然而,WordPress 有时会重定向到一个 URL 中包含 adminhash= 的页面。该页面会询问:“这仍然是您的地址吗?”并提供两个按钮:Yes, this is my address(是的,这是我的地址)和 I’ll wait(我会稍后再处理)。人类用户会点击“I’ll wait”并在稍后继续;而无人值守的脚本会一直寻找仪表盘的元素,却始终找不到,最终导致超时。

为什么会出现此提示

WordPress 添加此提示是为了确认管理邮箱地址仍然可以接收邮件。无论网站活动如何,它大约每隔几个月就会出现一次,旨在为可能丢失邮箱访问权限的站长提供安全检查。

受影响的对象

  • 开发者:他们依赖 Playwright 来推送插件更新、运行 UI 测试或执行批量管理任务。
  • 托管服务商:他们限制了 SSH 访问,迫使用户必须通过浏览器进行自动化操作。
  • 网站所有者:由于自动化程序无法到达更新页面,导致更新延迟。

损失不仅仅是浪费了几秒钟;反复的失败可能会中断计划内的维护窗口,并迫使人工介入。

如何检测该干扰页面

当前 URL 中是否存在 adminhash= 是一个可靠的指标。该字符串仅出现在邮箱验证页面上,而不会出现在常规仪表盘或任何其他管理界面中。

一个简单的绕过方案

在登录步骤之后立即插入一个检查。如果 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)。如果验证页面没有出现,该函数不会执行任何操作,从而保持脚本的高效和确定性。

何时使用该绕过方案

对于必须在无人值守的情况下运行的自动化工作流——例如每晚的插件更新或持续集成(CI)UI 测试——这种绕过方案非常实用。它将验证步骤视为一个可预见的绕路,而不是随机的故障。

不同观点

一些管理员认为,自动忽略该提示可能会掩盖真实的邮件投递问题。如果管理邮箱确实无法接收邮件,网站可能会错过关键通知。在这种情况下,采用更细致的方法——例如记录事件、发送警报或暂停自动化——可能会更好。

后续注意事项

  • WordPress 可能会更改 URL 模式或增加额外的验证步骤,这会导致 adminhash= 检查失效。请密切关注核心版本的更新日志。
  • Playwright 的选择器引擎在不断演进;请确保在任何 UI 设计变更后,文本选择器 "text=I'll wait" 仍能匹配到该按钮。
  • 如果你管理着许多网站,请考虑将绕过逻辑集中在共享库中,以避免重复代码。

通过显式处理管理邮箱确认页面,开发者可以将偶尔发生的超时转化为 Playwright 脚本中的常规流程,即使平台抛出意外的安全提示,也能保持 WordPress 自动化的可靠性。

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