kotがChromeDriverManagerのIssueに伴ったエラーを発生させていたので対処した記録

kotをローカルで実行したところエラーとなり、原因を辿ってみたところIssueそのものは解消されていたものの、fix差分を取り込むために色々と大掛かりな作業が発生いました。正常に動作するまでの手続きを並べてみました。
2023.07.28

以前紹介した、King Of Time上の情報をローカルから取得できるライブラリ「kot」がDockerベースでの動作に更新されていました。

なお、この更新に気がついた理由は、ChromeDriverManagerのIssueへ対応しようとした時だったりします。

一気にあれこれ発生して手間取りましたが、何とか対処できたので実際にやったことをメモとして書いてみることにします。

アップデートの手順

kotとwebdriver_managerの両方に対応が必要になります。kotを更新したとしても、webdriver_managerのissueとその解決が直近で反映されていないためです。

手順としては以下の通り

  1. kotへ手を入れた部分の退避
  2. kotをアップデート
  3. 退避しておいた処理を反映
  4. kotのwebdriver_manager依存バージョンをfix
  5. 最新のwebdriver_managerに沿った形で変更
  6. kotのインストール

kotの修正退避

git stash辺りで問題ないはずです。

git stash save

kotのアップデート

最新のコミットをpullしておきます。

git pull

退避しておいた処理を反映

stashを反映させるだけです。

git stash apply

kotのwebdriver_manager依存バージョンをfix

kotの最新バージョンで指定されているwebdriver_managerのバージョンは当記事執筆時点で3.7.0です。fixが入っていないバージョンであるため4.0.0に引き上げます。

-webdriver-manager = "3.7.0"
+webdriver-manager = "4.0.0"

最新のwebdriver_managerに沿った形で変更

おそらく一番手間取る作業ですが、修正ポイントはほんの数か所です。対象はkot/common/crawl.py

-from webdriver_manager.core.utils import ChromeType
+from webdriver_manager.core.os_manager import ChromeType
or driver_options.browser_kind == BrowserKind.chromium
         ) and isinstance(options, webdriver.ChromeOptions):
             if driver_options.browser_kind == BrowserKind.chromium:
-                chrome_service = ChromeService(
-                    ChromeDriverManager(path=DRIVER_PATH, chrome_type=ChromeType.CHROMIUM).install()
-                )
+                chrome_service = ChromeService(ChromeDriverManager(chrome_type=ChromeType.CHROMIUM).install())
             else:
-                chrome_service = ChromeService(ChromeDriverManager(path=DRIVER_PATH).install())
+                chrome_service = ChromeService(ChromeDriverManager().install())
             driver = webdriver.Chrome(service=chrome_service, options=options)
         elif driver_options.browser_kind == BrowserKind.firefox and isinstance(
             options, webdriver.FirefoxOptions
         ):
-            gecko_service = GeckoService(GeckoDriverManager(path=DRIVER_PATH).install())
+            gecko_service = GeckoService(GeckoDriverManager().install())
             driver = webdriver.Firefox(service=gecko_service, options=options)
         elif driver_options.browser_kind == BrowserKind.remote:
             driver = webdriver.Remote(

さらにもう一箇所。Dockerビルド時にkotディレクトリが存在しないエラーが発生していました。一部typoのようです。docker/kot/Dockerfile

-ENV APP_HOME /kot
+ENV APP_HOME = /kot

kotのインストール

最新のREADMEに沿ってインストールします。今回はcolimaを通してみました。

colima start
poetry install
poetry run invoke build

あとがき

今回のkotアップデートにより、処理完了までの時間がやや短縮されました。

もし同様のトラブルで動かせなくなっている場合は、当記事を参考にすることで期待通りの動作に戻せるかもしれません。