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 自动化的可靠性。
