「WhatsAppをPythonで自動操作したいけど、Seleniumだとすぐ壊れて困る…」
そんな悩みを持っている方、多いんじゃないでしょうか。実は2026年現在、Seleniumを使わないよりスマートな方法が注目を集めています。今回はその仕組みと実践的な使い方をわかりやすく解説します🚀
Contents
なぜSeleniumだとWhatsApp自動化がうまくいかないのか?

WhatsApp WebはアップデートのたびにDOM構造が変わります。SeleniumでXPathやクラス名を指定してボタンを操作する方法は、WhatsApp側のデプロイが走るたびにあっさり壊れてしまうんですよね。
メンテナンスのコストが高く、「動いたと思ったら翌週には壊れてる」という状況になりがちです。これは初心者にとってとくに辛い体験です。
2026年の答え:Playwright + whatsplay の組み合わせ
注目されているのが Playwright と whatsplay というライブラリの組み合わせです。
イメージとしてはこんな感じです。
- 🎭 Playwright:Microsoftが開発したブラウザ自動化ツール。SeleniumよりもAPIが安定していて高速
- 📦 whatsplay:WhatsApp Web専用のラッパーライブラリ。ミニファイされたクラス名ではなく属性ベースのセレクターを使うため壊れにくい
つまり、「壊れやすいクラス名に依存しない設計」になっているのが最大のポイントです。
実際にどんなものが作れる?
たとえば「特定の商品価格を監視して、閾値を下回ったらWhatsAppで通知を送るボット」が作れます。コードの流れはこんな感じです。
# 必要なライブラリをインストール
# pip install playwright whatsplay
# playwright install chromium
import asyncio
from whatsplay import WhatsApp
async def main():
# WhatsApp Webに接続(初回はQRコードのスキャンが必要)
async with WhatsApp() as wa:
# 価格チェック(ここは自分のスクレイピングロジックを入れる)
current_price = get_current_price() # 例: 3200
threshold = 3500
# 価格が閾値を下回ったら通知を送信
if current_price < threshold:
await wa.send_message(
to="自分の携帯番号(国番号付き, 例: '81901234xxxx')",
message=f"💰値下げ通知!現在価格: {current_price}円(閾値: {threshold}円)"
)
print("通知を送信しました!")
else:
print("まだ閾値を超えています。監視を継続します。")
if __name__ == "__main__":
asyncio.run(main())
ポイントをまとめるとこんな感じです👇
- 初回起動時にQRコードが表示されるので、スマホのWhatsAppでスキャンしてログインする
- ログイン情報はローカルにセッションとして保存されるため、2回目以降はQRスキャン不要
send_message()にはメッセージ送信先と本文を渡すだけでよく、DOM構造を意識する必要がない
Seleniumからの移行で気をつけたいこと
既存のSeleniumコードから移行する場合は、次の点を意識するとスムーズです。
- XPath・CSSセレクターをベタ書きしていた処理は、whatsplayが提供するメソッド呼び出しに置き換える
- Playwrightは非同期(
async/await)が基本なので、同期的なSeleniumコードとは書き方が変わる - 本番運用する場合はセッションファイルの保管場所・権限に注意する(ログイン情報が含まれるため)
まとめ
今回のポイントを整理するとこんな感じです👇
- ✅ SeleniumのDOM依存はWhatsApp Webのアップデートで壊れやすい
- ✅ Playwright+whatsplayなら属性ベースのセレクターで壊れにくい
- ✅ 非同期処理(async/await)に慣れておくとスムーズに移行できる
まずは自分がよく使う通知パターンを1つ選んで、小さく試してみるのがおすすめです。「思ったよりあっさり動いた」と感じてもらえるはずです。ぜひ一緒に試してみましょう!💪





