文字なし(null)を指定する

文字なし(null)は以下のように表現する。

 

%''%

 

テキスト中に改行やスペースなどの特殊文字があり、後続処理に使うためにそれを削除したい場合などに使える。以下はテキスト中のすべての「/」を削除する例。文字なし(null)なので「置き換え先のテキスト」の入力ボックスに何も入れなければいいのかなと一度は考えるがエラーとなって動かないのでこれを入力する。

f:id:yujihb:20211014010227j:plain

 

日付と時刻を取得する2つの方法

「現在の日時を取得します」というアクションで文字通りそれを実行した日付と時刻が取得できる。

「現在の日時を取得します」アクション

f:id:yujihb:20211014010958j:plain

f:id:yujihb:20211014011006j:plain

「現在の日時を取得します」の実行結果

f:id:yujihb:20211014011013j:plain

「現在の日時を取得します」の出力結果には区切り文字が3種類(/と:とスペース)でAM/PMの表現が含まれる。さらに月/日/年というなんともアメリカンな年月日の順番である。ヤード・ポンド・月/日/年。

CurrentDateTmeに付随する変数の値を使う

この取得した変数CurrentDateTimeそのままの形式だとかなり扱いづらい。一方で、CurrentDateTimeに付随する形で年・月・日・時刻・曜日等を個別に格納した変数が同時に生成されており、CurrentDateTime自体ではなく主にこれら個別の値をつかって必要な形に加工して使えそうである。

f:id:yujihb:20211017152706j:plain

f:id:yujihb:20211017153140j:plain

f:id:yujihb:20211017153514j:plain

CurrentDateTime.Secondには現在の時刻の秒の値が入っている。上記画面の処理を実行した時刻は15時34分05秒。時分秒は6ケタの「153405」がほしい値であったが実際は「15345」であった。CurrentDateTime.Secondに05ではなくて5が格納されているためだ。おそらく月・日・時・分も1ケタの数値は同様に1ケタで格納される仕様と思われる。アクションのひとつ「テキストをパディング」により2ケタになるように0で埋めることもできるが、CurrentDateTime.Second、CurrentDateTime.Minuteなどなど月・日・時・分・秒のすべてに「テキストをパディング」するとフロー上のアクションが5行以上にもなり見た目が冗長となる。もう少しアクション数をすくなくする方法はないだろうか。

DOSコマンドで日時を取得する

そこでアクション数を少なくするためDOSコマンドを使ってみる。dateコマンドとtimeコマンドで日時を取得する。

DOSコマンドで日時を取得するフローの例

f:id:yujihb:20211014011334j:plain

以下のコマンドを入力する

echo %%date:~0,4%%%%date:~5,2%%%%date:~8,2%%_%%time:~0,2%%%%time:~3,2%%%%time:~6,2%%

「%」はPower Automate Desktopでは変数の始まりや終わりを表す特別な文字なのでそのまま入力はできない。エスケープして「%%」と入力すると、DOSコマンドの「%」と認識してもらえる。

f:id:yujihb:20211014011344j:plain

スペースを0に置換する

timeコマンドでは時間のひとけた目が0である場合(=午前0時から午前9時の場合)にスペースが出力されてしまうのでこれを0に置換する。

f:id:yujihb:20211014011353j:plain

最後に仕上げでトリミングをし日付と時刻をアンダースコアで区切ったこんな形式

f:id:yujihb:20211014011402j:plain

アクション数が少なくなり再利用もしやすくなってよかった。

Webサイト上の目的物をクリックする3つの方法

Webサイト上の目的物をクリックする方法が複数ある。ここでは以下の3つの方法を確認してみたい。

1. Webオートメーション

2. UIオートメーション

3. ブラウザーで検索

1. Webオートメーション

うまいことWebサイト上の要素をセレクターで特定できれば一番確実な方法である。Webブラウザインスタンスを取得できていればブラウザーがバックグラウンドであっても動く。Webサイト上の目的物が画面上に表示されていなくてもよく、スクロールして画面上に表示していなくても動く。そのため、Webサイトのデザインやサイト上部の注意書きとかコメントとかが想定よりも多くて、目的物が画面の外に出てしまっていてもOK。確実にボタンを押す等のアクションがとれる強力な方法である。

Webオートメーションのイメージ。事前にブラウザーインスタンス取得が必要。

f:id:yujihb:20211014000458j:plain

Webオートメーションのセレクターのイメージ。確実に特定ができるよう、目的のWebサイトのソースを分析する必要があるので場合によりとても疲れる。

f:id:yujihb:20211014000513j:plain

 

2. UIオートメーション

UIオートメーションでもWebオートメーションと同じくWebサイト上の要素をセレクターで特定できていればボタンなどを押すことができる。Webオートメーションと違って画面上に目的物が表示されていないと動かないので、UIオートメーションを実行する前に確実にブラウザーをフォアグラウンドにし、目的物が画面に表示されているように工夫する必要がある。Webオートメーションによるテキストボックスへの入力等に反応しないサイトがまれにあり、そのようなときに代替として利用するものとなろう。そもそもUIオートメーションはブラウザーに限らず一般的にアプリケーションのウィンドウ上の要素を扱うためのものであるので、基本的にWebブラウザー上の操作はその專門の機能であるWebオートメーションを使うとよい。

UIオートメーションのイメージ。ブラウザーインスタンス取得は不要でシンプルに直接つくっていける。

f:id:yujihb:20211014000956j:plain

UIオートメーションのセレクターのイメージ。Webオートメーションと同様に確実に特定ができるよう、目的のWebサイトのソースを分析する必要があるので作成者の身体に疲労が蓄積される場合がある。

f:id:yujihb:20211014001006j:plain

 

3. ブラウザーで検索

最終手段。不安定なのでできれば避けたいのだが、どうしてもセレクターで特定できない場合や、Webページが頻繁に変更される等でセレクターでの特定が面倒な場合がある。そんなときは人間がキーボードショートカットで実行することをそのままやってもらうしかない。すなわち、アクション「キーの送信」を使って以下のようにブラウザー上で検索してタブ等を押して目的物にたどり着きエンターを押す、をやってもらう。

  • 検索ボックスを表示するために「{Control}({F})」!
  • 検索キーワードを送信!
  • 検索ボックスを閉じるために「{Escape}」!
  • 見つかったテキストの場所からいつもタブ3つめにあるから「{Tab}{Tab}{Tab}」!
  • ボタンをクリックするために「{Return}」!

サイト上のデザインの変更にとても弱く、誤って意図しない画面を表示してしまうと意図せずタブタブタブエンターが送られておかしなことになったりと不安定である。一方でメリットがいくつかある。フロー上の見た目がわかりやすいこと、セレクターを精緻に考えなくてよいこと。サイズが小さいこと。UI要素を検索しにいかないので爆速であること。さらに、ブラウザーの検索では半角英字で検索しても全角英字のテキストを検索してくれる(逆もOK)ので便利なことがある。セレクターによるHTML上の要素の検索では厳密に全角なら全角でないと検知してくれないので、あいまいに検索してくれるブラウザー検索のほうが優れている場面がある。

ブラウザー検索のイメージ。実行したいことが見えやすい気がする。単純にキーを送信しているだけなので、実行中に他の画面に触ったり不意に別アプリがフォアグラウンドになったりするとすぐにフローが不整合をおこす

f:id:yujihb:20211014001228j:plain

キーの送信の中身のイメージ。キーボードのショートカット等をそのまま入れて再現できる。PC上のほとんどの操作は実現できるがやはり脆弱性は否めない

f:id:yujihb:20211014001241j:plain

 

Webサイトを見ている側はそのWebサイトを管理しておらず当然コントロールできないので見ている側が情報発信側の更新に合わせていくしかない。フローを作成する上では更新のすくないサイトから情報取得するなどの方針も合わせて考慮するとよい。