AI自動化

ChatGPT自動化が壊れる本当の理由:Brave CDP 移行で解決した実録

ChatGPT自動化が壊れる本当の理由:Brave CDP 移行で解決した実録

ChatGPT自動化が壊れる本当の理由:Brave CDP 移行で解決した実録

「ChatGPT に頼んだコード、最初は動いたのにいつの間にか壊れてる」——この経験、ある人は多いと思う。

僕は 107 日間、note への投稿を手動でコピペし続けた。スクリプトは書いた。Playwright のコードも何度も書いた。そのたびに「ログインに失敗しました」「公開済みか判定できず」でコケた。原因がわかったのは 4 ヶ月後。クッキーの有効期限と、UI の細かい挙動変更という、ChatGPT には「見えない」問題だった。

この記事でわかること:
– ChatGPT が生成した自動化コードが壊れやすい本当の理由
– headless Chromium と Brave CDP の違いと使い分け
– note.com で実際に起きた UI 変更とその検出方法
– Brave CDP に移行してセッション切れを根治した手順
– コピペで動く Playwright + CDP 接続テンプレ


ChatGPT 生成コードが自動化で詰まる3つの構造的な問題

ChatGPT はコードを書くのが得意だ。でも「セッションを維持する」「UI 変更を検知する」「スクリプトを長期間壊れないまま運用する」は、コード生成とは別の問題だ。

この 3 つが噛み合わないと、自動化は月単位で壊れ続ける。

headless Chromium を使うとセッションが消える

ChatGPT に Playwright のコードを書かせると、ほぼ確実に (略) が出てくる。これ自体は悪くない。ただ、(略)(略) を指定してセッションを保存する方式は、クッキーの有効期限に完全に依存する。

実際に僕の (略) を調べたら、21 個のクッキーのうち 15 個が期限切れだった。

(コード例は元記事を参照)

headless で起動するたびに「既存セッションを使う」つもりが、実態は「腐ったクッキーで接続しようとして失敗」になっていた。

UI 変更をコードは知らない

2026 年 4 月、note.com の URL パターンが変わった。

以前は下書きプレビューが (略) だったのが、SvelteKit 移行後は (略) になった。僕のスクリプトはこの URL を「公開成功」と誤検出していた。4 ヶ月間、投稿してるつもりで下書きに積み上げていた。

ChatGPT はこの変更を知らない。学習データのカットオフより後の話だから。

セッション切れの「根治」方法を知らない

「ログインし直すコードを書いて」と ChatGPT に頼めば書いてくれる。でも 2 段階認証、reCAPTCHA、サービスごとのセッション管理の癖は、何度 prompt を調整しても完全には埋まらない。


headless Chromium vs Brave CDP:どちらを選ぶか

項目 headless Chromium Brave CDP
セッション管理 storage_state ファイル Brave の実ブラウザセッションを共有
ログイン維持 クッキー期限に依存 手動ログイン一回で半永久維持
セッション切れ対応 コードで再ログイン実装 Brave で手動ログインするだけ
UI 変更への対応 テスト・修正が必要 同じく必要(ここは変わらない)
初期設定コスト 低い(pip install だけ) Brave のデバッグポート起動が必要
長期安定性 低い 高い

Brave CDP は Brave ブラウザをデバッグモードで起動して、その中のセッションを Playwright で操作する方式だ。普段 Brave でログインしている Amazon や note や X のセッションをそのままスクリプトが使える。クッキー期限が切れても、Brave を開いてログインし直せば終わり。


実際に note 自動投稿が壊れていた経緯

107 日間の時系列を整理するとこうなる。

(コード例は元記事を参照)

根本原因は 2 つ同時に起きていた。クッキー腐敗と URL 誤検出。どちらか片方だけ直しても動かなかったと思う。


Brave CDP 移行で実際に書いたコード

Brave をデバッグモードで起動する

(コード例は元記事を参照)

これを launchd に登録して、Mac 起動時に自動で立ち上がるようにしてある。

CDP 接続の共通ライブラリ(コピペ可)

(コード例は元記事を参照)

note の URL 誤検出を修正した部分

(コード例は元記事を参照)

テキストロケーター((略))が SvelteKit 移行後から動かなくなっていた。座標指定は不安定だけど、今は動いている。


よくある質問

Brave CDP って Brave ブラウザが起動してないと動かないの?

動かない。これが最大のデメリットで、Mac がスリープすると Brave が落ちることがある。launchd で (略) を設定して、落ちたら自動再起動させている。

storage_state 方式はもう使えない?

note.com や X には使わない。ログイン維持が必要なサービスは全部 Brave CDP に統一した。API キーで認証するサービス(Bluesky など)は storage_state 不要なので関係ない。

ChatGPT でコードを書くのをやめたの?

やめてない。構造の設計や「こういう処理をどう書くか」の初稿は ChatGPT や Claude で書く。ただ「このコードをそのまま本番で長期運用できるか」は別の話だ、という感覚がついた。

テキストロケーターが動かない時の対処は?

DevTools でボタンの座標を調べて (略) で押す。ベストプラクティスではないけど、動く。aria-label や data-testid がついていれば (略) が安定する。

107 日間気づかなかった理由は?

手動確認を「たまにやる」から「ほぼやらない」にシフトしたタイミングが悪かった。自動化したつもりで放置していた。定期的に「本当に動いているか」を確認するモニタリングが必要だった。


まとめ

  • ChatGPT 生成の自動化コードが壊れる主因は「クッキー期限切れ」と「UI 変更」の2つ
  • headless Chromium + storage_state はセッション維持が弱い。長期運用には向かない
  • Brave CDP は普段使いブラウザのセッションを流用するため、ログイン切れが起きにくい
  • note.com の URL パターン変更(SvelteKit 移行)を誤検出していた。実際に URL を print して確認するのが確実
  • テキストロケーターが動かない場合、座標クリックは迂回策として有効
  • 「動いている」の確認は月に1回でいいので必ずやる

この記事を読んだあなたに:
– Playwright + Brave CDP の環境構築手順(Mac編) #
– launchd でスクリプトを自動起動する設定テンプレ #
– note 自動投稿スクリプトの全コード公開 #


(コード例は元記事を参照)