UiPath で認証が必要なページを開く
記事の概要
UiPath で認証が必要なページをブラウザで開く場合、どのようにフローを作成すればよいかという話。
どういった作業を想定しているか
作業用ブラウザを開き、認証ウィンドウにユーザー名とパスワードを入力してログインするだけの簡単なお仕事。
アクティビティを配置する前に考えるべきこと
順を追って「ロボットにやらせなければならないこと」を考える。上で挙げた作業例であれば以下のようなことを想定して実装すべきだろう:
作業用のブラウザは既に開かれているのか
ブラウザでアクセスした先のサーバは生きているか
認証ウィンドウは表示されたか
認証に成功したか
では、どのように実装するか
作業用ブラウザが起動しているか確認し、起動していなければブラウザを起動
単純にページにアクセスして情報を取得するだけであれば必要ない想定だが、複数回にわたってアクセスした先の情報を取得する必要があるのであれば、いちいちブラウザを起動するのではなく作業用のブラウザを指定したほうがよいだろう。そこで、まず初期値を Nothing としたブラウザオブジェクトを格納する変数を定義し、条件分岐のアクティビティで isNothing メソッドで判定を行わせる。
判定が True であればブラウザを開いたうえで「出力」に先ほど定義した変数を指定しておけば、いちいちブラウザを開かなくても済む。
アクセス先のサーバが生きているかの確認と認証
指定した URL にアクセスしても認証ウィンドウが表示されるとは保証されていないので「認証ウィンドウが表示される」もしくは「ブラウザに何らかのエラーページが表示される」のを待つ必要がある。これを実現するには以下のように実装を行う必要がある:
「繰り返し (後判定)」を定義する
「要素の存在を確認」で認証ウィンドウの存在確認を行う
「要素の存在を確認」でブラウザに html のタグ(別に body のタグでも構わないが)が存在しているかを確認する
いずれかの要素が存在していた場合は繰り返し処理を抜ける
この場合に必要になってくるのは変数は「要素の存在を確認」で要素が存在した場合の返り値を格納する変数が 2 つと、繰り返す回数を設定するカウンタの合計 3 つ。実際に自分が実装したケースでは、以下のようにフローを作成した:
「代入」で繰り返す回数をカウンタに代入
「繰り返し (後判定)」に入る
「待機」でディレイを設定(サーバからレスポンスが返る前にいきなり繰り返し処理に入っても意味がないので)
「代入」アクティビティでカウンタをデクリメント
「要素の存在を確認」で認証ウィンドウの存在確認を行う
「要素の存在を確認」で html のタグの存在確認を行う
カウンタの値が 0 になる、もしくは「要素の存在を確認」の返り値のどちらかが True であった場合は繰り返しを抜ける
最終判定として「要素を探す」で認証ウィンドウの存在確認を行う
このときに「要素の存在を確認」や「要素を探す」のタイムアウトに設定する値は 1 でよいだろう。最終判定でも認証ウィンドウが表示されていなければ「要素を探す」が例外をスローしてくれる。
認証に成功したか確認
認証ウィンドウにユーザ名とパスワードを設定して OK ボタンをクリックする処理の実装は簡単なので省略する。認証に成功したか失敗したかの判断は
「待機」でディレイを設定
「要素の存在を確認」で認証ウィンドウの存在確認を行う
まだ認証ウィンドウが存在していた場合はエラー処理を行う
という流れでよいはずだ。ここで例外をスローするのではなく「エラー処理」としたのは、ユーザ名かパスワードか、もしくはその両方が誤っている可能性が高いので、単純に例外をスローするだけではなく必要な人員もしくは部署に連絡するべきだからである。
補記
アクセス先のサーバの生存判定を行う部分を実装するにあたって、当初「並列」のアクティビティを使えば簡単なのでは?と考えたのだが、このアクティビティは(基本的には)使えないと考えた方が間違いない。これは AsyncCodeActivity クラスで定義したアクティビティでないと並列処理にならないためだ。そしてカスタムアクティビティを作成するには Visual Studio が必要だ。
並列処理については UiPath のデベロッパーブログに記事があるのでリンクを貼っておく。読んでおくと「並列」アクティビティについての理解が深まるはずだ。
この記事が気に入ったらサポートをしてみませんか?