Webページ内の要素のループ処理

Webページ内の要素のループ処理

お知らせ:当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の英語版を参照してください。

このガイドでは、Webページ上の要素をループ処理する方法について説明します。Webデータは非常に多様で、テーブル形式も一般的ですが、操作や抽出が必要な情報の多くは必ずしもテーブル内にあるとは限りません。多くの場合、データは <div>、<span>、<li>、<a> などのさまざまなHTML要素内に存在します。これらの要素に対して、Webページ上で直接データ操作を行う必要があります。
よくあるシナリオの例:
  1. Webポータルからファイルやレポートの一覧をダウンロードする。
  2. テーブル内の各行に対して処理を実行する。
  3. リストや構造化されたUI要素内の項目からデータを抽出する。
Zoho RPA では専用の「ループ」アクションを現在開発中ですが、この例では、既存のアクションを使ってRPAオートメーションフロー内で同様の反復処理を実現する方法を紹介します。

Zoho Inventory に画像をアップロードする

この例では、Zoho Inventory への商品画像のアップロードを自動化します。対応する画像ファイルはローカルに保存されており、商品コード(SKU)に基づいて命名されています。ここで作成するオートメーションワークフローは、Zoho Inventory の商品一覧を順番にたどり、各商品の商品コード(SKU)に基づいて該当する画像を自動的にアップロードします。

ワークフローを作成する

新しいフローを作成する

1. My Flows ページに移動し、Create flow をクリックします。


2. フローに名前を付けて説明を入力し、ワークフローを保存するフォルダーを選択します。
3.実行に使用する RPA エージェントを選択します。RPA エージェントは、ワークフローを実行するデスクトップマシンです。フローは選択したエージェント上で実行されます。エージェントは後からワークフロービルダーで変更できますが、その際はファイルパスなどの設定が新しいエージェントと互換性があることを確認してください。

トリガーを設定する

ワークフローを作成する最初のステップは、ワークフローを開始するイベントであるトリガーを選択することです。この例では Webhook トリガーを使用します。これにより、リアルタイムでワークフローを実行でき、新しい商品をインポートした後や、他のアプリケーションに依存するタイミングでのみ画像更新をトリガーできます。必要なタイミングで正確にワークフローを実行できるようになります。


Webhook トリガーを設定してテストする
ここでは、ワークフローの開始点となる Webhook トリガーを設定し、テストします。Webhook トリガーは、各フローごとに生成される一意のURLであり、このURLにリクエストを送信するたびにフローが起動されます。場合によっては、入力としてフローにデータを渡したいこともあります。この例では、フローが処理する必要のある特定の「row」を渡します。
  1. ワークフロー用に生成された一意の Webhook URL をコピーし、Next ボタンをクリックします。
  2. Webhook URL をテストするには、次のいずれかの方法でこのURLに HTTP POST 要求を送信します。
    1. Webアプリケーションから送信する: Webhook URL をWebアプリケーションに組み込み、必要なペイロードを含む HTTP POST 要求を送信するように設定します。
    2. API テストツールを使用する(例: Postman):
      1. 新しい HTTP POST 要求を作成します。
      2. コピーした Webhook URL を要求 URL 項目に貼り付けます。
      3. Body タブに移動し、raw オプションを選択して、コンテンツタイプとして JSON を指定します。
      4. 次のサンプル JSON ペイロードを入力します。これにより、「row」の値がワークフローに送信されます。
サンプル JSON:
{
'row': '1'
}


ワークフローを構築する

1つのワークフローを作成し、Zoho Inventory の一覧に含まれる件数に応じて、そのワークフロー自身を N 回呼び出すようにします。

商品画像の整理:
開始する前に、画像ファイルを準備しておく必要があります。すべての商品画像を専用のフォルダーに保存し、各ファイル名は対応する Zoho Inventory の SKU 番号と完全に同じ名前にします。たとえば、商品の SKU が 1001 の場合、その画像ファイル名は 1001.png とします。この名前を正確に一致させることが、ワークフローが画像と商品を自動的に紐付けるために重要です。


ワークフローのロジック:
ここからがコアロジックです。ワークフローは Zoho Inventory に接続し、商品一覧の各アイテムをチェックします。対象の商品が見つかった場合は、対応する画像のアップロードなど、必要なアクションを実行します。リストに存在しないアイテムの場合は、そのまま次へ進むか終了し、既存の商品だけが処理されるようにします。

ワークフローの手順:
  1. Web Automation カテゴリーから Open URL アクションを使用し、Zoho Inventory の URL を設定します。
  2. Zoho Inventory の商品一覧はテーブル形式で表示されます。特定のアイテムを見つけて操作するために、このテーブルの行を順番に処理する必要があります。
    1. テーブル要素を特定するには、Zoho Inventory のページでリスト内の任意のアイテムを右クリックし、Inspect を選択してブラウザーのデベロッパーツールを開きます。
    2. 要素セレクター(ポインターアイコン、または Ctrl+Shift+C など)を使い、ページ上の「商品名」要素を直接クリックします。これにより、対応する HTML コードがデベロッパーツール内でハイライトされます。
    3. ハイライトされた HTML コードを右クリックし、Copy > Full XPath を選択します。
      コピーされた XPath
      /html/body/div[6]/div[5]/div[3]/main/div/div[4]/div[2]/div[2]/table/tbody/tr[2]/td[2]/div/div[2]/a
      コピーされた XPath から、対象が「table/tbody/tr[2]/td[2]/div/div[2]/a」というテーブル要素であることが分かります。そのため、このテーブルをループ処理して、目的のテーブル行を見つければよいことになります。
    4. この XPath を HTML ビュー内の検索バー(Ctrl+F)に貼り付けます。特定のテーブル行要素を指していることが確認できます。
    5. さまざまな行を対象にするには、この XPath を動的にする必要があります。XPath 内の数値インデックスを変更すると、別の商品がハイライトされることが分かります。これにより、行を繰り返し処理するための正しい要素を特定できたことが確認できます。


      Web ページ上の要素が必ずしもテーブル内にあるとは限りません。
      多くの場合、<div>、<span>、<a> などの別の HTML タグ内にあります。これらの要素をループ処理するには、数値インデックスを動的に変更できる適切な div や span を特定し、ページ上の要素を順番に処理できるようにする必要があります。別の種類の要素をループ処理する例については、以下の動画をご覧ください。


  3. Web Automation カテゴリーから「Check if element exists」アクションをドラッグ&ドロップして、ワークフローに追加します。
    1. XPath をタイプとして選択し、調整済みのセレクターを貼り付けて設定します。
    2. XPath 内の固定の行番号を、Webhook トリガーで設定した Row 変数 に置き換えます。これにより、Webhook の入力で渡された行番号の商品だけをワークフローがチェックするようになります。
    3. XPath : /html/body/div[6]/div[5]/div[3]/main/div/div[4]/div[2]/div[2]/table/tbody/tr[${webhookTrigger.payload.row}]/td[2]/div/div[2]/a

  4. Logic タブから Decision アクションをドラッグ&ドロップします。このアクションは、直前の Check if element exists アクションで(例:商品名などの)要素が正常に見つかったかどうかを判定するために使用します。条件として、element exists == true となるように設定します。

  5. 要素が存在する場合、その要素をクリックできる必要があります。Web Automation カテゴリーから Click アクションをドラッグ&ドロップします。UI セレクターには、Check if element exists アクションで使用したものと同じセレクターを指定します。
    ワークフローのスクリーンショット

    アクションの設定


次のいくつかのステップは Web レコーダーを使って記録します:
  1. Zoho Inventory の商品(Items)ページに移動します。
  2. 商品名をクリックします。
  3. 表示された SKU 番号にカーソルを合わせます(オレンジ色でハイライトされます)。SKU の横にある歯車アイコンをクリックし、アクションを「Get Text」に変更します。OK をクリックします。
  4. 画像アップロードを開始するために、Browse オプションをクリックします。
  5. レコーダーで Stop をクリックします。
  6. 記録されたステップのうち、SKU の「Get Text」アクションと、ファイルブラウザーを起動するアクション(例:「Browse file」のクリック)以外はすべて削除し、それらをワークフローに追加することを確定します。

    これらのステップは、最初は Decision アクションのデフォルトブランチに追加されます。必ず、ステップ 5 の「Click」アクションの直後に来るように移動してください。以下のスクリーンショットを参照してください。


  7. Windows General カテゴリーの Open file dialog アクションを使用します。画面上の「開く」ダイアログの要素を指定するよう求められます。そのために、Zoho Inventory でアイテムをクリックし、Browse file オプションを使って「開く」ダイアログウィンドウを表示させます。Ctrl + クリック でその要素を選択します。
  8. 次の設定を行います。
    フォルダー path: すべての画像が保存されているディレクトリを選択します。
    File name: 前のアクションで取得した SKU のテキストを使用し、ファイル名と拡張子(例:sku.jpg)を含めます。

    遅延設定では、「アクション後の遅延」を数秒に調整できます。画像サイズによっては、アイテムに画像が完全に読み込まれるまで数秒かかる場合があります。アクション後の遅延は 1000~1500 ミリ秒に設定することを推奨します。

  9. 同じフローを再度呼び出すためのカスタム関数をもう 1 つ作成します。まず Logic タブをクリックし、カスタム関数 を選択してから、+ New Custom Function をクリックします。カスタム関数内に、提供されたコードを貼り付けます。

    void call_Inventoryflow(int row_v)
    {
    row_v = row_v + 1;
    map1 = Map();
    map1.put('row',row_v);
    test = invokeurl
    [ url: '<REPLACE YOUR Webhook URL>'
    type: POST
    parameters: map1
    ];
    }
    Webhook の URL を、実際の Webhook トリガーの URL に必ず置き換えてから、変更内容を保存してください。
  10. ドラッグ&ドロップでこのカスタム関数をワークフローに追加します。入力には Webhook 変数を設定し、このワークフローがページ上の最後のアイテムまで繰り返し実行されるようにします。
  11. 次に、ページ上に要素が存在しない場合に、再帰的な実行が続かないようにする必要があります。そのために、Check if element exists アクションのデフォルト条件側に、Close ブラウザー アクションを追加します。こうすることで、要素が存在する場合はクリックして画像をアップロードし、存在しない場合はブラウザーを閉じてワークフローを終了します。
ボットの実行