knowledge 【不具合対処】Chrome115以降で発生するWebドライバー更新失敗をタスクで回避する方法

AutoMate バージョン22.1またはそれ以前、Google Chrome バージョン115以上をご使用の環境において、[Webブラウザ]アクションでChromeを指定し実行するとブラウザを開けないトラブルが発生することがあります。(不具合情報)
この事象について、AutoMateのタスクとして回避することが可能ですので本記事で解説いたします。

以下回避用のサンプルタスクです。
お手元の環境でタスクビルダーに貼り付けて内容をご確認ください。
例えばこのタスクをスケジュール実行することにより、定期的にChromeが開けるか確認し、開けない場合は正しく開けるよう自動修正することが出来ます。
【重要】以下タスクは、貼り付けて実行するだけでは正しく機能しません。
お使いのAutoMateバージョンにあわせて、ステップの一部を有効にしてください。
本タスクに関しご不明点や何かお気づきのことがありましたら、AutoMate技術窓口までご連絡下さい。

<!--処理スタート地点を定義する-->
<AMLABEL LABELNAME="lb_start" />
<!--Chromeを起動する。この例では、AutoMateポータルを開くページに指定する。失敗しても強制的に次のステップへ。-->
<AMWEBBROWSER AM_ONERROR="CONTINUE" URL="automate.sct.co.jp" SESSION="BrowserSession1" BROWSER="chrome" />
<!--"Knowledge"ページをクリックする。失敗しても強制的に次のステップへ(ステップ4でブラウザが開けなかった場合、このステップは必ず失敗する)-->
<AMWEBBROWSER ACTIVITY="click" AM_ONERROR="CONTINUE" HTMLTAG="h2" USEMATCH="1" SESSION="BrowserSession1" BTNTOCLICKMODE="0" CLICKACTIONMODE="0" />
<!--ブラウザを開くorページ内のクリックが成功したか判定する-->
<AMIF ACTIVITY="last_step" LASTSTEP="failed" />
<!--ブラウザを閉じる(ステップ6のみが失敗している場合、ブラウザは開かれている状態であるため)-->
<AMWEBBROWSER ACTIVITY="close" AM_RETRY="3" AM_RETRYDELAY="500" AM_ONERROR="CONTINUE" SESSION="BrowserSession1" />
<AMREGION NAME="バージョン11.5以上の環境は、このリージョン内13-23ステップまでを有効化してください" COLLAPSE="no" />
<!--古いドライバーの存在が失敗原因である場合は古いドライバーをまず無効化し、疑似的にWebドライバーが存在しない状況を作る-->
<AMFILESYSTEM ACTIVITY="rename" AM_ONERROR="CONTINUE" SOURCE="C:\ProgramData\AutoMate\WebDrivers\chromedriver.exe" DEST="C:\ProgramData\AutoMate\WebDrivers\chromedriver.exe.old" OVERWRITE="YES" AM_ENABLED="NO" />
<!--Webブラウザアクションを実行し失敗させることで、最新のドライバを入手する-->
<AMWEBBROWSER AM_ONERROR="CONTINUE" URL="automate.sct.co.jp" SESSION="BrowserSession1" BROWSER="chrome" AM_ENABLED="NO" />
<!--(11.5および11.6)フォルダ"tmp"が生成されるので、検知して強制的に"tmp_chrome"にリネームする-->
<AMIF ACTIVITY="folder_exist" FOLDER="C:\ProgramData\AutoMate\WebDrivers\tmp" AM_ENABLED="NO" />
<AMFILESYSTEM ACTIVITY="rename" MODE="folder" SOURCE="C:\ProgramData\AutoMate\WebDrivers\tmp" DEST="C:\ProgramData\AutoMate\WebDrivers\tmp_chrome" AM_ENABLED="NO" />
<AMIF ACTIVITY="end" AM_ENABLED="NO" />
<!--不正なフォルダにあるドライバーを適切なフォルダに移動させる-->
<AMFILESYSTEM ACTIVITY="move" SOURCE="C:\ProgramData\AutoMate\WebDrivers\tmp_chrome\chromedriver-win64\chromedriver.exe" DEST="C:\ProgramData\AutoMate\WebDrivers\*" AM_ENABLED="NO" />
<!--WebDrivers配下から不正なフォルダを削除する-->
<AMFILESYSTEM ACTIVITY="delete" AM_ONERROR="CONTINUE" MODE="folder" SOURCE="C:\ProgramData\AutoMate\WebDrivers\tmp_chrome" AM_ENABLED="NO" />
<AMENDREGION />
<AMREGION NAME="バージョン11.5以前の環境は、このリージョン内27-35ステップまでを有効化してください" COLLAPSE="no" />
<!--古いドライバーの存在が失敗原因である場合は古いドライバーをまず無効化し、疑似的にWebドライバーが存在しない状況を作る-->
<AMFILESYSTEM ACTIVITY="rename" AM_ONERROR="CONTINUE" SOURCE="C:\ProgramData\AutoMate\AutoMate 11\WebDrivers\x64\chromedriver.exe" DEST="C:\ProgramData\AutoMate\AutoMate 11\WebDrivers\x64\chromedriver.exe.old" OVERWRITE="YES" AM_ENABLED="NO" />
<!--不正なフォルダが既に存在する場合は削除する-->
<AMFILESYSTEM ACTIVITY="delete" AM_ONERROR="CONTINUE" MODE="folder" SOURCE="C:\ProgramData\AutoMate\AutoMate 11\WebDrivers\x64\chromedriver-win64" AM_ENABLED="NO" />
<!--Webブラウザアクションを実行し失敗させることで、最新のドライバを入手する-->
<AMWEBBROWSER AM_ONERROR="CONTINUE" URL="automate.sct.co.jp" SESSION="BrowserSession1" BROWSER="chrome" AM_ENABLED="NO" />
<!--不正なフォルダにあるWebドライバーを適切なフォルダに移動させる-->
<AMFILESYSTEM ACTIVITY="move" SOURCE="C:\ProgramData\AutoMate\AutoMate 11\WebDrivers\x64\chromedriver-win64\chromedriver.exe" DEST="C:\ProgramData\AutoMate\AutoMate 11\WebDrivers\x64\*" AM_ENABLED="NO" />
<!--不正なフォルダを削除する-->
<AMFILESYSTEM ACTIVITY="delete" AM_ONERROR="CONTINUE" MODE="folder" SOURCE="C:\ProgramData\AutoMate\AutoMate 11\WebDrivers\x64\chromedriver-win64" AM_ENABLED="NO" />
<AMENDREGION />
<!--処理のスタート地点に戻す-->
<AMLABEL ACTIVITY="goto" LABELNAME="lb_start" />
<AMIF ACTIVITY="end" />
<!--失敗時の条件式が終わっている=適切な状態であるのでダイアログを表示する(この例では10秒で自動的に閉じる)-->
<AMSHOWDIALOG MESSAGE="適切なchromedriver.exeが配置されています" COUNTDOWNDELAY="10" />
<!--ブラウザを閉じる-->
<AMWEBBROWSER ACTIVITY="close" SESSION="BrowserSession1" />

ユーザーの皆様にはご不便、ご迷惑をおかけし大変申し訳ございません。
AutoMate 22.1以前の環境でChromeを使用される場合は、このタスクサンプルを不具合回避にお役立て下さい。


○補足:この不具合の詳細について
■本事象の原因:「chromedrive.exe」の自動更新不具合
[Webブラウザ]アクションによるブラウザの自動化には"Webドライバー"を使用します。
通常このWebドライバーは環境のブラウザバージョンへ適合したもので自動更新されますが、ChromeのWebドライバー(chromedriver.exe)は適合したものが適切なフォルダに自動配置されず、[Webブラウザ]アクション実行時にエラーを発生させます(自動入手自体は出来ます)。

適切なWebドライバーのフォルダ:
C:\ProgramData\AutoMate\AutoMate 11\WebDrivers\x64(11.4以前)
C:\ProgramData\AutoMate\WebDrivers(11.5以降)
不具合により"chromedriver.exe"が配置される誤ったフォルダ:
C:\ProgramData\AutoMate\AutoMate 11\WebDrivers\x64\chromedriver-win64(11.4以前)
C:\ProgramData\AutoMate\WebDrivers\tmp\chromedriver-win64(11.5, 11.6)
C:\ProgramData\AutoMate\WebDrivers\tmp_chrome\chromedriver-win64(11.7以降)

適切なフォルダに適切なWebドライバーが存在しないことから、Chromeではブラウザが開けない、または開けても操作ができないトラブルが発生します。

■回避タスク詳細: 不正なフォルダ内の"chromedriver.exe"を正しいフォルダに移動させる
この不具合では、Webドライバーが配置されるべきフォルダに不正なフォルダが作成され、その中に正しい"chromedriver.exe"が配置されることが確認されています。
そのため、処理の流れとして大まかには
1. Chromeの起動と操作を試みる
2. エラーになった場合Webドライバーのフォルダを確認し、
 古い"chromedriver.exe"がある場合はリネームし使用不能にする
3. 再度Chromeの起動を試み、不正なフォルダと正しい"chromedriver.exe"を入手する
4. 不正なフォルダに配置された"chromedriver.exe"を正しいフォルダに配置する
5. 1に戻る
以上の処理構造を組むことにより、適切なchromedriver.exeの配置と起動確認が可能になります。

上記の流れを実際のアクションに落とし込んだ解説は以下の通りです。
なお、[]はAutoMateのアクションを示します。

a. [ラベル - 作成]ラベルを作成する
→更新処理後に再びブラウザを開く動作に戻すため必要です
b. [Webブラウザ - 開く]任意のURLを指定する
→プロパティ上部"エラー時"タブの最下部"エラーイベントの後"について
 プルダウンから"次のステップに進む"に変更します。
c. [Webブラウザ - クリック]任意のページ要素(ボタンなど)をクリックする
→Webドライバーの差により、ページを開けても操作がエラーになるケースがあります。
 その検知のため、画面を操作する手順を1つ定義します。
 プロパティ上部"エラー時"タブの最下部"エラーイベントの後"について
 プルダウンから"次のステップに進む"に変更します。
d. [if - 直前のステップ]手順c. の失敗を判定する
→c. で失敗するということはWebドライバーが不正であることを意味します。
 "直前のステップが次の場合"を、プルダウンから"失敗"に変更します
========d. 条件式始め========
e. [Webブラウザ]ブラウザを閉じる
→b. に成功しc. に失敗したという状況の場合、Chromeが開かれたままの状態です。
 そのためブラウザを閉じる動作を定義します。
 プロパティ上部"エラー時"タブの最下部"エラーイベントの後"について
 プルダウンから"次のステップに進む"に変更します。
f. [ファイルシステム - 名前を変更する]Webドライバーのフォルダにある古いchromedriver.exeをリネームする
→名前を変更することで、AutoMateにより使用されなくなります。
 "元の名前"に"chromedriver.exe"のフルパス、"新しい名前"に"chromedriver.exe"のフルパス+".old"と記述します。
 "ファイルオプション"配下"ファイルが存在する場合は上書きする"にチェックを入れます。
 プロパティ上部"エラー時"タブの最下部"エラーイベントの後"について
 プルダウンから"次のステップに進む"に変更します。
g. [Webブラウザ - 開く]任意のURLを指定する
→不正なフォルダと正しい"chromedriver.exe"を入手するためわざと失敗させます。
 プロパティ上部"エラー時"タブの最下部"エラーイベントの後"について
 プルダウンから"次のステップに進む"に変更します。
h. [ファイルシステム - 移動]不正なフォルダにある"chromedriver.exe"を正しいフォルダに移動させる
→"ソース"にWebDrivers配下の不正なフォルダと"chromedriver.exe"を記入し
 "保存先"に正しいフォルダ+"\*"と指定します。
i. [ファイルシステム - 削除]不正なフォルダを削除する
→残したままだと次の更新時にエラーとなります。
 ラジオボタン"フォルダ"を選択し、"ソース"に不正なフォルダのフルパスを指定します。
j. [ラベル - Goto]手順a. から処理を流し直す
→手順a. の位置に戻るため、再度ブラウザを開く動作からやり直します。
 プルダウンから、手順a. で作成したラベル名を選択します。
========d. 条件式終り========
k. [Webブラウザ]ブラウザを閉じる
→適切にWebドライバーが更新された場合、Chromeが開かれたままの状態になります。
 b. で指定したブラウザセッションを選択します。