WordPressに組み込まれている管理者メールアドレスの確認画面(バージョン5.3以降、数ヶ月ごとに表示されるもの)は、SSHアクセスができないサイトでプラグインを更新するPlaywrightの自動化を妨げます。この追加ステップにより、スクリプトは決して現れないボタンを待ち続け、タイムアウトやデプロイの停止を引き起こします。
停止を引き起こす原因
Playwrightスクリプトがwp-adminにログインすると、ダッシュボードがすぐに読み込まれることを期待します。しかし、WordPressは時としてURLに adminhash= を含むページにリダイレクトすることがあります。そのページには「Is this still your address?(これはまだあなたのメールアドレスですか?)」という問いかけとともに、Yes, this is my address(はい、これは私のメールアドレスです)と I’ll wait(後で確認します)という2つのボタンが表示されます。人間であれば「I’ll wait」をクリックして後で対応できますが、無人のスクリプトはダッシュボードの要素を探し続け、それらを見つけられずに最終的にタイムアウトしてしまいます。
プロンプトが存在する理由
WordPressはこのプロンプトを、管理者メールアドレスが引き続き利用可能であることを確認するために追加しました。サイトの活動状況に関わらず、およそ数ヶ月ごとに表示され、メールアドレスへのアクセス権を失った可能性があるサイトオーナーのためのセキュリティチェックとして機能します。
影響を受ける対象
- Developers(開発者): プラグインの更新、UIテストの実行、または一括管理タスクの実行にPlaywrightを利用している方。
- Hosting providers(ホスティングプロバイダー): SSHを制限しており、ユーザーにブラウザ経由での自動化を強いている環境。
- Site owners(サイトオーナー): 自動化が更新画面に到達できず、更新が遅延している方。
そのコストは単なる数秒の浪費にとどまりません。失敗が繰り返されると、予定されていたメンテナンス時間が中断され、手動での介入を余儀なくされる可能性があります。
不要な画面の検知方法
現在の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の自動化の信頼性を維持できます。
