Upgrade to Pro — share decks privately, control downloads, hide ads and more …

210226 A2019ハンズオン資料 佐野さん

comucal
February 26, 2021

210226 A2019ハンズオン資料 佐野さん

comucal

February 26, 2021
Tweet

More Decks by comucal

Other Decks in Technology

Transcript

  1. jsonデータの結果を見てみましょう メモ帳などに、コピーした内容を貼り付けてみましょう 日付、店名、合計金額がどのようにデータ化されている か、画像と見比べて確認してみましょう Q. Jsonって何? A. Java Script Object

    Notationの略で、 データを記述する形式の名前だよ。 {“項目名”:項目の内容, ”項目名2”:項目の内容2} のように、項目の名前と内容を紐づけるよ。 {“くだもの価格表”:{ “いちご” : 150, “バナナ” : 877}, “野菜価格表”:{ “トマト”:100, “きゅうり”:90}} のように、カテゴリの中にさらに細かい情報を 含めることもできるよ。 実は今日の 自己紹介の スライドも……
  2. csvファイルを準備しよう 1.メモ帳を開きます 2.「購入日,店名,合計金額」と入力し、改行して、名前をつけて保存 3.保存する際のポイントは、 右記を参考に! ←行末で改行してね! ←カーソルはここにある ① ② ③

    ① ファイル名 → 「好きなファイル名.csv」 とする ② ファイルの種類 → 「すべてのファイル(*.*)」を選択 ③ 文字コード → 「UTF-8(BOM付き)」を選択 ※ 「BOM付き」の選択肢は、チェックボックスになっている場合もあり ※ 「BOM付き」の選択肢がない場合は、 ただの「UTF-8」を選択すればOK 以下の手順で、 ←このようなCSVファイルを 作成します。
  3. A2019の画面の基本 左側の帯では、 変数、アクション、トリ ガーの一覧を切り替 えられます。 レコーダーを 起動するボタン 処理のビューを 切り替えるタブ (次頁参照)

    画面の言語の 切替 ここのボタンを押すと、 左/右それぞれの帯を たたんだり表示させた りできます 全体のメニューを 左側に表示できます (Bot開発中は不要 なのでたたんでおき ます)
  4. 大抵のBotに共通している処理構造 ① 前処理 - 変数の初期化・定数(ファイルパスなど)の取得 - アプリケーションの起動・ログイン - Excelの開始行の取得 ②

    メイン処理 - Excelの各行に対する処理 - データの転記 - 計算 ……などなど、このBotでやりたいメインの処理 ③ 後処理 - 集計結果の表示・転記・受け渡し - 使い終わったアプリケーションのログアウト・終了
  5. 今回作るBotの処理構造 ① 前処理 - Clova OCRのトライアルページを開く - 日本語 → レシート

    → jsonボタンを押す ② メイン処理 - Json形式の処理結果をコピーする - json形式のデータから、購入日・店名・合計金額を取得する - ファイルに書き出す ③ 後処理 - Clova OCRのトライアルページを閉じる
  6. Stepの作り方 ① アクションからStepを検索 ② ダブルクリック or ドラッグしてフローの中へ ③ わかりやすいタイトルをつける ①

    「step」と入力し 検索 ② ダブルクリック or ドラッグ してフローの中へ ③ タイトルはわかりやすく! このように表示されます
  7. ブラウザを開く ① 「ブラウザ」と入力し 検索 ② ドラッグしてフローの 中へ ① アクションから「ブラウザ」を検索 ②

    「Open」をドラッグしてフローの中へ ③ ④ ⑤ ③ 「New Window」が選択されていることを確認 ④ ブラウザから「Google Chromeを選択 ⑤ 開きたいページのURLを入力 → 今回開くのは以下のURLです https://clova.line.me/ocr_demo/en 「New window」を 選択 「Google Chrome」 を選択 https://clova.line.me/ocr_demo/en を指定
  8. レコーダーを利用する ① 操作したいアプリケーションやwebサイト (今回の場合はClova OCRのトライアルページ)を 開いた状態で、レコーダーのボタンをクリック 目的のページを 開いた状態で…… レコーダー ボタンを

    クリック ② しばらく待っていると、 画面の右下に以下のような画面が表示されます しばらく 待つと…… 画面右下に 登場! ③ ウィンドウの一覧から目的のページを選択し、 「Universal Recorder」をクリック レコーディングしたい 画面のタイトルを選択 Universal Recorderを クリック 続く▶
  9. レコーダーでキャプチャした処理の中身を確認 レコーダーでキャプチャしたアクションが意図どおりになっているかを確認しましょう 処理のビューで レコーダーのアクションに カーソルを当てると、 画面右側に 操作の詳細が表示されます ▲選択されていない状態 ▲アクションが選択された状態 見分け方

    (微妙な違いです) ☝確認のポイント(基本編) ① オブジェクト 表示されている画像の赤枠が、 自分が操作したかった対象の オブジェクト(ボタン等)と合っているか? ② オブジェクトに対する操作 選択されているアクションは、 自分がオブジェクトに対してしたかった 操作と合っているか? ① ② 意図と違う操作を記録してしまった場 合は、該当のアクションを削除するか、 オブジェクトの再キャプチャ(後述)を実 施します。
  10. 処理を移動する 処理の最後に記録されたレコーダーのアクションを、 正しいステップ内に移動させてみましょう ① 移動させたいアクションを一括選択します ② 選択されたアクションを切り取ります ① 選択したい範囲の 先頭のアクションを選

    択。その状態で…… 範囲の最後のアクショ ンをShift + クリック → 範囲選択完了! ② はさみマークで 切り取り (Ctrl + X でもOK) ③ 移動させたい先の直前にあるアクションを 選択し、切り取ったアクションを貼り付けます マークをクリックする と、このようなリスト が表示されます 「アクション後に貼り付け」を クリック (Ctrl + VでもOK)
  11. 3. メイン処理を作ろう メイン処理では、以下の処理を行います。 ① Clova OCRのコピーボタンを押す ② コピーした内容を変数に格納 ③ Clova

    OCRのコピーしたjson形式のデータから 購入日、店名、合計金額を取り出す ④ ファイルに書き出す ①はレコーダーの編集、②はクリップボードアクション、 ③はJavaScript、④は「ファイルに記録」アクションを使用し ます。
  12. レコーダーを編集する レコーダーでキャプチャした処理をコピーして、 中身をアレンジしてみましょう 【前提条件】(②以降の操作に必須) Clova OCRのトライアルページを開いた状態で実施 ① 前処理にあるレコーダーアクションからどれかひとつを コピーし、メイン処理のStepの中に貼り付ける ②

    コピー先のアクションを選択し、 「オブジェクトを再キャプチャ」をクリック ① アクション をコピー ② コピー先のアク ションを選んだ状態 で…… クリック ③ Clova OCRのページが表示されるので、 コピーボタンをキャプチャ ④ 少し待つ 続く▶ クリックは 赤枠が出てから!
  13. レコーダーを編集する レコーダーでキャプチャした処理をコピーして、 中身をアレンジしてみましょう ⑤ アクションを「左クリック」に変更 ⑤ ☝補足 アクションをクリック→左クリックに変更する意味 公式ドキュメント情報: ↑・・・どういう場合にクリックが作動しないのか(・_・;)???

    ↑今回のCopy ボタンのように、 「クリックによって、単純なページ遷移や画面表示”以外”の 動作を起こさせる」という場合に、 左クリックに変えるとうまくいくケースが多い(経験則) 「左クリック」に変更
  14. ① 「クリップボード」と 入力し検索 ② ドラッグしてフローの 中へ ① アクションから「クリップボード」を検索 ② 「コピー元」をドラッグしてフローの中へ

    クリップボードの情報を変数に格納する ③ 出力先の変数を指定します (変数の作成方法は次頁以降を参照) Copyボタンをクリックしたことで、クリップボードに入ったjson情報を変数に格納しましょう
  15. 変数の2通りの作り方 1. 変数ウィンドウから明示的に作る ▲こちらの +マークを クリック 値を必ず変数に代入する必要がある箇所には、 入力欄の右に マークが表示される。 (

    とは違うので注意!) をクリックすると、変数を作成するとともに その変数を代入先として指定できる : 作成済みの変数を指定する(V11におけるF2) : 変数を新たに作成するとともに、代入先として指定する 変数に関するマークの違い 2. 処理を作っている途中で、必要に応じて作る
  16. 変数の2通りの作り方 1. 変数ウィンドウから明示的に作る場合 2. 処理を作っている途中で、必要に応じて作る場合 Q. 2つの方法の違いは? A. 1の場合は型(タイプ)を自分で選択、 2の場合は適した型(タイプ)がすでに選択されています

    適した型(タイプ)を 自分で選択 変数を作成するウィンドウが起動した時点で、 該当する処理の箇所に適した型(タイプ)が すでに選択されている 変数名(半角英数のみ)を入力すると、 (1.の場合) もしくは (2.の場合)ボタンが 活性化します。 ボタンを押すと変数を作成できます。
  17. ① 「java」 で検索 ② ドラッグして フローの中へ ① アクションから「java」を検索 ② 「開く」「JavaScriptを実行」「閉じる」を

    ドラッグしてフローの中に入れる 購入日、店名、合計金額を取り出す ③ 「開く」アクションの詳細を下記のとおり設定します json形式のデータから、ほしい情報を取り出して変数に格納してみましょう。 いろいろなやりかたが考えられますが、今日はJavaScriptを使います。 手動インポートを 選択 スクリプトの内容は、 次頁の中身をコピペ
  18. function getDate(s){ var j = JSON.parse(s).result; var pi = j.paymentInfo;

    return (pi ? (pi.date ? pi.date : '') : ''); } function getStore(s){ var j = JSON.parse(s).result; var si = j.storeInfo; var name = (si ? (si.name ? si.name : '') : ''); var branch = (si ? (si.branch ? si.branch : '') : ''); var dq = '"'; return dq + name + branch + dq; } function getPrice(s){ var j = JSON.parse(s).result; var tp = j.totalPrice; return (tp ? (tp.price ? tp.price : '') : ''); } 「開く」アクションに貼り付けるスクリプト ☝補足 左のスクリプトでやっていることをざっくり解説します - 各functionは、日付、店名、合計金額を それぞれ抽出する処理です - 「開く」アクション内のスクリプトでは関数(function) の定義だけを行い、実行は「JavaScriptを実行」の アクション内で行います - jsonデータの中に取り出したい値があればその値を、 なければ空白を返します (店名や購入日などは、レシートによってはそもそも 書いていない場合があるため) - 店名に関しては、店名(name)と支店名(branch)を 結合した結果を返します
  19. ④ 「JavaScriptを実行」アクションの詳細を 下記のとおり設定します 購入日、店名、合計金額を取り出す json形式のデータから、ほしい情報を取り出して変数に格納してみましょう。 いろいろなやりかたが考えられますが、今日はJavaScriptを使います。 a. 関数名 b. パラメータ(引数)

    c. 出力先の変数名 a.関数名 c.出力先の変数名 getDate -> vDate getStore -> vStore getPrice -> vPrice ☝Tips 1つのJavaScriptの実行アクションで実行できる関数 は1つだけです。 今回は購入日、店名、合計金額という3つのデータを取 り出す必要があるため、実行アクションを3回行います。 a.の関数名とc.の出力先の変数は3つそれぞれ異なり ますが、b.のパラメータ(関数に渡す引数)はすべて同じ です。 なので、実行アクションをひとつ作ってコピーし、 コピー先のアクションでa.の関数名とc.の変数だけ変 更、とすると少し楽です。 変数の作り方は p.43~参照
  20. ① 「ファイルに記録」と 入力し検索 ② ドラッグしてフローの 中へ ① アクションから「ファイルに記録」を検索 ② ドラッグしてフローの中へ

    ファイルに書き出す ③ 詳細を以下のとおり設定 Copyボタンをクリックしたことで、クリップボードに入ったjson情報を変数に格納しましょう a. ファイルパス 最初に作ったcsvファイルを選択 b.ファイルに記録する内容 $vDate$,$vStore$,$vPrice$ と設定 c.追加/上書きの選択 「既存のログファイルに追加」を選択 d.エンコード 「UTF-8」を選択 👆👆設定内容の意味や、他の便利なやり方などは ハンズオンの中で説明します。
  21. ① 「閉じる」と 入力し検索 ② ドラッグしてフローの 中へ ① アクションから「閉じる」を検索 ② 「ウィンドウ」配下の「閉じる」アクションを

    ドラッグしてフローの中へ ウィンドウを閉じる ③ 詳細を以下のとおり設定します 処理の最後に、使い終わったウィンドウを閉じておきましょう 「ウィンドウ」をクリッ クし、配下のアクショ ンを表示させる 「変数」を 選択 変数の検索ウィンドウを表示 させると、$window-x$という 変数がいくつか表示されるは ず。→xの数字が最も小さいも のを選択 ウィンドウタイトルにClova OCRのweb ページタイトルが表示されればOK ウィンドウ変数については、ハンズオンの中で説明予定です
  22. おまけ問題の下準備 - アップロードしたいレシートの画像を用意しましょう - レシートの画像を、ロボット実行端末の特定のフォルダにまと めましょう - レシート画像のファイル名は、できるだけ短くシンプルにして おきましょう -

    上記のフォルダの中には、アップロード用のレシート画像だ けを入れるようにし、それ以外のファイルは入れないようにし てください (フォルダは入っていてもOKですが、zipファイルなどはNG)
  23. おまけ問題 Step2 アップロード処理を レコーディングしよう レコーダーを使って以下の操作をレコーディングしましょう 【操作】 アップロードボタンを押す → 出てきた画面の「+」を押す →

    フォルダパスを指定 → ファイルを選択 → 「開く」ボタンを押す → 「Confirm」ボタンを押す 赤枠部分は少しコツがいるので、次頁で解説します ※赤枠部分+「開く」ボタンはWindowsオブジェクト、それ以外はChromeの画面 ですが、A2019はレコーダーを切り替えたりせず、一連の操作を記録できます
  24. おまけ問題Step2 レコーダーのコツ フォルダパスおよび画像ファイルの指定を再現性のある手順にするために、 以下の要領でレコーディングしましょう ① レコーディングの前に、画像ファイルの入った フォルダパスをコピーする (フォルダパスがクリップボードに入った状態に しておく) ②

    レコーダーを起動し、アップロードボタン、 +ボタンを普通にレコーディング ③ ウィンドウズの「開く」画面が起動します → このあと、通常であればクリック操作で フォルダを選びたくなりますが、それはNG! (画面起動時のフォルダパスが変わると操作が変わってしまうため) → クリックではなく、このページの右側の要領で フォルダパスを指定しましょう 【レコーディング時のフォルダパスの指定の仕方】 フォルダパスを指定する バーをクリック いま入っているフォルダパスをBack Spaceで消し、①でコピーしておいた フォルダパスを貼り付ける 続く▶
  25. おまけ問題Step2 レコーダーのコツ フォルダパスおよび画像ファイルの指定を再現性のある手順にするために、 以下の要領でレコーディングしましょう ④ アップロードする画像を選ぶ際も、 通常であればクリックして選びたくなりますが、 それはNG! → 代わりに、ファイル名の入力欄をクリックし、

    ファイル名を手入力します。 ここをクリックして、 ファイル名を手入力 ⑤ 「開く」ボタンのクリック、「Confirm」ボタンのクリック 操作を通常どおりレコーディングし、レコーディングを 終了します → ここまで完了したら、次は ③と④のアクションの中身を編集 していきます。 編集のやりかたは 次頁以降を参照してください。
  26. オブジェクトのプロパティの編集 操作対象の要素をつかむ根拠になる 「オブジェクトのプロパティ」を編集す る方法です ①「オブジェクトのプロパティ」をクリック ここをクリック ② 表示された要素を取捨選択 → すると、オブジェクトを認識する根拠としてレ

    コーダーがつかんだ要素の一覧が右のように 表示されます。 取捨選択の基準 【残す・入れる】 処理のタイミングや条件を問わず不変で、 当該オブジェクトをユニークに認識できる要素 【外す】 処理のタイミングや条件によって 変わってしまうかもしれない要素 Pathは変わりやすいので 選択から除外(チェックを外す) Nameはフォルダパス全体が識別 要素になってしまっているためNG (チェックを外す) 「開く」のウィンドウの中に ツールバーはひとつしかない(不変)& フォルダパスを指定する場所は 常にツールバー(ユニーク) → これを選択(チェックを入れる)
  27. アクションの編集 ④ファイル名の指定 操作対象の要素をつかむ根拠になる「オブジェクトのプロパティ」と、 オブジェクトに対するアクションを編集します 【Before】 【After】 続く▶ アクションを「テキストを設定」に変更。 設定内容として、「キーボード操作」を選択+ ループを回すごとにファイル名が変更できるよう、

    $vFile{name}$.$vFile{extension}$ と指定 (ループ作成時にファイルを格納する変数名を vFileとしていた場合) プロパティは「Name」を選択 考え方や、「オブジェクトのプロパティ」の 編集方法は③の場合と同様です。 「テキストを設定」の内容の $vFile{name}$.$vFile{extension}$ の意味がわからない人は、以下の記事を参照して ください https://qiita.com/IQ_Bocchi/items/ed8a17deb6a1d64473c7 (Step3:ループの中で実行したい処理を行う)
  28. ① 「遅延」と 入力し検索 ② ドラッグしてフローの 中へ ① アクションから「遅延」を検索 ② ドラッグしてフローの中へ

    遅延を組み込む ③ 詳細を以下のとおり設定します Webサイトやアプリに処理のリクエストをかけたあと、 処理結果が出るまでに時間がかかる場合は、 処理結果を待つために遅延を組込みます。 単位は「秒」を選択 遅延のタイプは「定期」で 遅延の秒数は「5」を指定