Seleniumで業務自動化をしていると、EXE化した途端にChrome(やDriver)のプロセスが残ることがあります😇💦
放置すると、PCが重くなる・メモリを食う・次回実行が不安定になる…など地味にダメージ大です⚠️
業務効率化に向けたおすすめの参考書になります。
driver.quit() を “必ず” 実行する(例外でも) ✅close() と quit() の違いを理解して使い分ける ✅※ quit() は「全ウィンドウ/タブを閉じ、ブラウザ・ドライバプロセスも終了」するのが基本動作です。
EXE化(PyInstaller等)すると、次のような条件で「終了処理に到達しない」ことが増えます👇
return / sys.exit() して finallyが走らない書き方 🌀driver.quit() を「必ず」通すテンプレ🧱✨try / finally で閉じる🧰✅from selenium import webdriver
driver = None
try:
driver = webdriver.Chrome()
driver.get("https://example.com")
# ✅ ここに自動化処理を書く
finally:
if driver is not None:
driver.quit()
finally は実行されるので、閉じ漏れが激減します🧹quit を呼ばないと バックグラウンドプロセス等が残って問題になる旨が明記されています。atexit で終了時クリーニング🪄🔒「何が起きても最後に掃除してほしい」用途なら atexit が便利です🧼
(※正常終了時に実行される“終了ハンドラ”)
import atexit
from selenium import webdriver
driver = webdriver.Chrome()
def cleanup():
try:
driver.quit()
except Exception:
pass
atexit.register(cleanup)
# ✅ 自動化処理...
close() では足りないことが多い⚠️🪟close() は「今見てるタブ/ウィンドウだけ」😶🌫️close は 現在のウィンドウを閉じる動作です。quit は 関連する全ウィンドウを閉じてセッションを終了します。✅ 業務自動化の後処理は基本 quit() を選ぶのが安全です🔐
Chromeのオプションで detach=True を入れていると、ドライバ終了後もブラウザが残る挙動になります🧲
(デバッグ用途では便利だけど、本番EXEでは事故りやすい)
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_experimental_option("detach", True) # ← これが原因になることも
✅ EXE配布・運用用途なら、基本は detachを外すのが無難です🙅♂️
正攻法でも環境次第でプロセスが残るケースがあります(特に多重起動や拡張ツール併用など)😵
その場合は「PID管理 → 終了」を組み込むと安定します。
chromedriver / chrome のPIDを記録taskkill(Windows)で掃除🧹※強制終了は諸刃なので、最後の最後にだけ使うのがおすすめです⚠️
固まって quit に到達しない事故を減らします。
「どこで止まったか」が分かると、閉じ漏れ原因を潰せます。
except: pass 連発だと、閉じ漏れが“隠れて”増殖します👻
driver.quit() が基本(close() だけだと残りやすい)try / finally で quit を必ず通すatexit(正常終了の掃除役)detach=True は本番EXEでは外す(ブラウザが残る設定)close() だけじゃダメ?🚪close() は「今のタブ/ウィンドウだけ」を閉じます。セッションやプロセスが残ることがあるので、基本は quit() が安全です🧹
例外の出方や実行タイミングがブレると、終了処理に到達したりしなかったりします💦try/finally とログが入っていると原因特定が一気にラクになります📝✨
detach=True を使うと、ドライバ終了後もブラウザを残せます。ただし運用EXEでは事故りやすいので、用途で切り替えがおすすめです🔁
atexit を入れたのに残ることがある…😢atexit は「正常終了」で動く仕組みです。強制終了(クラッシュ/kill)だと走らない場合があります。
その場合は、タイムアウトやPID監視など“別の保険”も検討すると安定します🧯
まずは try/finally + driver.quit() が最優先です✅
次に保険として atexit を足すと、業務運用での事故率がグッと下がります🛡️