更新:Pyhon+Seleniumで作ったスクリプトがタスクスケジューラーで動かない

Webスクレイピングに欠かせないPythonとSelenium。
それをpyinstallerでexe化して、タスクスケジューラーで自動実行させていたのですが、最近になって動いていないような感じがしたので調べてみました。
何が起きていた?
タスクスケジューラーでexeが動かない・・・
厳密には実行されているものの、exeに記した処理が実行されない(終了しない)ことが発生していました。
それまではうまく動いていたのですが、9月の上旬になって突然動かなくなってしまいました。
やっていた処理
SeleniumでWebスクレイピングをしています。
#Sampe Code: Sample.py
from selenium import webdriver
browser = webdriver.Chrome('chromedriver.exe')
browser.get('https://google.co.jp')
browser.quit()
これをpyinstallerでexe化します。
> pyinstall Sample.py ---onefile
created Sample.exe
exe化されたSample.exeを、Azure上のWindows 10に配置し、タスクスケジューラーで実行させます。
いちいちVMにサインインしたくないので「ユーザーがログオンしているかどうかに関わらず実行する」をONにしておきます。
●最上位の特権(管理者権限)とするかどうかは実行する処理に応じます。
結局どうしたのか?
Google Cromeをヘッドレスモードで実行させました。
とオチは簡単ですが、そこに行きつくまでの切り分けがしんどかった…(徹夜)
修正後のコードはコチラです。
#Refurbished Sampe Code: Sample2.py
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
option = webdriver.ChromeOptions()
option.add_argument('--headless')
driver = webdriver.Chrome('chromedriver.exe', options=options)
browser.get('https://google.co.jp')
browser.quit()
その後のexe化、タスクの設定は同様です。
原因
9月上旬になって処理が止まってしまったタイミングでGoogle Chromeがバージョン93に更新されていました。
どうもそのバージョンで、クロームのバックグラウンド処理が封じられたようです(evidenceを探しましたが見つけ出せませんでしたが、実動ベースでの結論です)。
タスクスケジューラーには、2つの実行オプションがあります。
・ユーザーがログオンしているときのみ実行する(R)
・ユーザーがログオンしているかどうかにかかわらず実行する(W)
前者はフォアグラウンドプロセス、後者はバックグラウンドプロセスで動作します。
修正前での切り分けでもタスクの設定を前者として実行すると動き、後者として実行すると動きませんでした。
タスクの実行のためにいちいちVMにサインインするのは面倒極まりないので、バックグラウンドで動作するように対応する必要があります。
問題はクロームを表示させている(フォアグラウンド処理を要求する)ところにあるので、バックグラウンド処理させる必要があります。ヘッドレスモード(ブラウザ画面を表示させない)で実行したGoogle Chromeはバックグラウンドで動作することが分かり、修正してみたところアタリでした。
ここに至るまでに実行アカウントの問題か?(SYSTEMアカウントでもダメ)とか、pyinstallerの問題か?(python.exeでpyファイルを呼び出す)とかあーだこーだやってましたが、なんというか簡単なオチでびっくりでした。
結論
タスクスケジューラーで[ユーザーがログオンしているかどうかにかかわらず実行する]場合は、Headless Chromeを使いましょう!
というお話でした( *´艸`)
キャンプするなら絶対に【ハピタス】!!
ハピタスは業界最高水準のポイント還元率♪
普段のネットショッピングを、ブラウザのブックマークからハピタス経由にするだけで、2倍3倍…とポイントが貯まってオトク♪
物価高の今だからこそ必要な節約手段ですよ♪
9月の入会キャンペーンは過去最大!?
①こちらのリンクからハピタスに登録(9/30 23:59まで)
②9月30日までのキャンペーン期間中に掲載広告を1件以上利用し…
③10月31日までに合計1,000ポイントを貯めると…
④1,700ポイントがもらえます♪
⑤しかも300ポイント貰える新規登録者向けキャンペーンも開催中ヾ(≧▽≦)ノ

ガッチリ固定して、強風にもビクともしないサイトを作れば家族も安心♪エリッゼステークはカラフルな塗装でサイトでも失くしづらいです。