実は、以前にもspv_Web関連のエラー記事書いたことあったんだけども、そん時はEdgeでそもそも何にも操作ができないってシーンでした。
Edge自動操作で『ライブラリ実行(spv_Web)に失敗しました。』
今回は、Chromeのブラウザ操作でクリックの操作で限定的なシーンで出るエラーがあったので紹介します。
1.Chrome クリックでエラーになるケース
ざっくり言うと、こんなレイアウトで発生しやすいみたいだ。
ページ自体にもスクロールバーがでるくらいの長さのページで、コンテンツの中にもスクロールするコンテンツがある。
ほんで、スクロールする内部スクロールの中にボタンとかがあって、操作後にフォーカスがそこに残るケース。
で、内部スクロールの部分にある要素にフォーカスが残った状態で、ページ自体のスクロールでページ表示外にある要素をクリックしようとした際にエラーが発生しました。
2.調査のやり方
困ったことに、ブラウザ操作でエラーが発生すると
『ライブラリ実行(spv_Web)に失敗しました。』
しか出ないんですねぇ。。。
原因がわかんないんですよ。なので、このエラーが発生する箇所に例外処理を仕込んで、異常系の方で[01 WinActor制御] - [07 デバッグ] - [SPVエラー情報収集]を使います。
すると、クリップボードの中にWebDriverが出力してるエラーの生ログが取得できます。
WebDriver????もし、もっと詳しく知りたいって方はこちらの記事もどぞー。
(エラー内容の本筋からズレるので興味なければスルーでOK。)
PowerShellでSelenium使わずWebDriver操作
要するに、ブラウザ操作まわりの機能はブラウザベンダーが提供してるWebDriverを噛ませて実装してるのでWinActorの制御外なんですねー。
ほんで、先ほどの「SPVエラー情報収集」を使ってエラーログを取得する訳ですが、いきなりエラーの内容に「unknown error・・・」とかって出ちゃってる場合はWebDriverの差替えを行ってください。
Chromeなんかは、結構知らない間にブラウザのバージョン上がってたりして、WinActor内部に保管されてるWebDriverは勝手にアップデートされる訳ではないので、ほっとくとブラウザとWebDriverの適用バージョンが合わなくなってしまっていたりします。
で、今回のケースではWebDriverを最新化してみたら「element not interactable ・・・」っていうエラーが出てましたってお話な訳です。
3.element not interactable????
こっからは、WebDriverで出力してるエラーなんだから他のツールであろうが理由と対処は一緒でしょー?って話で、そのままググるとSeleniumで同様の事象がでて別アプローチで対処したって話がでてくる訳なのね。
seleniumにてButtonがクリックできない時の対処法 - Qiita
ちなみに、WebDriverの歴史的にはSeleniumの方が元祖なのね。
ブラウザ操作系は検索するとSeleniumの情報ばっかでてくるけど、他のRPAツールでも流用できる情報はとても多いです。
今回のケースで言うと、本来はWebDriver経由でクリックの命令を出すとそのポイントまで画面をスクロールして、表示状態になってからクリックする。という処理を行っている訳だけど、内部のスクロール範囲にフォーカスが残ってるケースで稀に親のスクロールを動かせずにクリック対象のボタンを表示状態にできず、エラーになったって感じなんじゃないかと思う訳です。
そんな仮説の元、とりあえずクリックの前にエミュレーションで画面の任意の位置をクリック後、キーボードのHomeキーを押すっていうノードを置いたところ、エラーの再発は無くなりましたとさ。。。
んー、だめだ。
このページの上の方にボタン作って、下にスクロールするテーブル作ってみたけどエラー出ないや?
状況を再現できないなぁ?
タイトル | タイトル | タイトル | タイトル | タイトル |
---|
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |
データ |