knowledge AutoMate 自習用コンテンツ その7 - 解説

自習用コンテンツ その7(https://automate.sct.co.jp/knowledge/12055/)の内容は如何でしたでしょうか?
簡単に出来てしまった方も、難しかった方もいたかと思います。

下記では、解説を書いていきます。
(解答例のコードは、ページ最下部に書いています。)


■観点
今回のコンテンツでは、「要素数が変化する場合における特定要素の取得」を観点としました。
対象となっているページでは、以下のような性質があります。
A. 画面上部に存在するテーブルの行数が毎回変化する
B. 取得したい要素に一意のIDや名前が振られていない
そのため、「td」タグを指定しつつ、「何番目の要素を使用するか指定する」で固定番号を指定しても、常に顧客コードを取得することが出来ません

処理を実現するには、以下のいずれかの方法が候補に挙がります。(一例です)
X. 下側のテーブルは行数固定なので、テーブルそのものを取得して要素を指定する
Y. 「上から数えて何番目」は変化するが「下から数えてN番目」は変化しないので、tdタグの総数から一定数を引いた数字を指定する
Z. 「td」タグをすべて取得し、文字列「顧客コード」を含むtdタグの次のtdタグを取得する

解説では、最も処理がシンプルで済むXを例にします。
(今回のタスクでは、データセットの要素を直接ダイアログ表示するので、変数の作成は含まれていません)
  

■1. 対象のWebページを開く

ブラウザで対象のWebページを開きます。「Webブラウザ - ブラウザを開く」を使用します。
対象のWebページは「https://www-1.sct.co.jp/amdemo/two_tables.html」です。

<AMWEBBROWSER URL="https://www-1.sct.co.jp/amdemo/two_tables.html" SESSION="BrowserSession1" BROWSER="chrome" />

  

■2. ページ下部のテーブルの抽出

「Webブラウザ(従来) - テーブルの抽出」または「Webブラウザ - テーブルの抽出」を使用し、下側のテーブル(あなたの顧客情報)をデータセットとして取得します。
下側のテーブルはID「customerInfo」が振られているため、一意に区別が可能です。

<AMWEBBROWSER ACTIVITY="extable" HTMLID="customerInfo" SESSION="BrowserSession1" RESULTDATASET="ds_CustomerInfo" />

データセットを取得し、内部を表示すると、下図のようなデータになっています。
(図1. 取得結果のデータセット)

そうすると、4行目の「Column2」に顧客コードが出現することが分かります。

  

■3. ダイアログ表示

データセット「ds_CustomerInfo」の「4行目」の「Column2」のデータは、「%ds_CustomerInfo(4).Column2%」で表現できます。
「ダイアログ - メッセージ」アクションを使用し、当該要素をダイアログ表示します。

<AMSHOWDIALOG>%ds_CustomerInfo(4).Column2%</AMSHOWDIALOG>

  
今回定義する処理は以上になります。

(処理構築例:展開するにはここをクリック)
<!--対象のページをブラウザで開く-->
<AMWEBBROWSER URL="https://www-1.sct.co.jp/amdemo/two_tables.html" SESSION="BrowserSession1" BROWSER="chrome" />
<!--ページ下部のテーブルをデータセットとして取得-->
<AMWEBBROWSER ACTIVITY="extable" HTMLID="customerInfo" SESSION="BrowserSession1" RESULTDATASET="ds_CustomerInfo" />
<!--「顧客コード」の現れる4行目の「Column2」を表示-->
<AMSHOWDIALOG>今回の顧客コードは
%ds_CustomerInfo(4).Column2%
です。</AMSHOWDIALOG>

  

(別解その1. 方法Yの例)
<AMVARIABLE NAME="var_CustomerCD" />
<!--対象のページをブラウザで開く-->
<AMWEBBROWSER URL="https://www-1.sct.co.jp/amdemo/two_tables.html" SESSION="BrowserSession1" BROWSER="chrome" />
<!--ページ内の「TD」タグの要素を全て取得しデータセット化(目的:ページ内のTDタグの総数の取得)-->
<AMWEBBROWSER ACTIVITY="getvalue" HTMLTAG="TD" SESSION="BrowserSession1" RESULTDATASET="ds_TD" ATTRIBUTE=":text" />
<!--顧客コードは「TD」タグを下から数えた7番目に存在する為、「TDタグの総数 - 6」を引いた数字が顧客コードのありかとなる-->
<AMWEBBROWSER ACTIVITY="getvalue" HTMLTAG="TD" USEMATCH="%ds_TD.TotalRows - 6%" SESSION="BrowserSession1" RESULTVARIABLE="var_CustomerCD" ATTRIBUTE=":text" />
<AMSHOWDIALOG>今回の顧客コードは
%var_CustomerCD%
です。

なお、データセットの値として既に取得済なので、データセットの値を表示しても取得できます。
↓
%ds_TD(ds_TD.TotalRows -6).Value%
</AMSHOWDIALOG>

  

(別解その2. 方法Zの例)データセットの行数によってはループの読み飛ばしが多く処理が長くなりやすいためご注意ください。
<AMVARIABLE NAME="var_CustomerCD" VALUE="" />
<!--対象のページをブラウザで開く-->
<AMWEBBROWSER URL="https://www-1.sct.co.jp/amdemo/two_tables.html" SESSION="BrowserSession1" BROWSER="chrome" />
<!--ページ内の「TD」タグの要素を全て取得しデータセット化-->
<AMWEBBROWSER ACTIVITY="getvalue" HTMLTAG="TD" SESSION="BrowserSession1" RESULTDATASET="ds_TD" ATTRIBUTE=":text" />
<!--ループでデータセットの中身を順繰りにチェック-->
<AMLOOP ACTIVITY="dataset" DATASET="ds_TD" />
<!--「顧客コード」の文字列が出現すると、次のデータセットの行が顧客コードの実体で確定-->
<AMIF EXPRESSION="%ds_TD.Value% = "顧客コード"" />
<!--現在処理中の行 + 1行目の値をセットしてループを抜ける-->
<AMVARIABLE ACTIVITY="set" VARIABLENAME="var_CustomerCD">%ds_TD(ds_TD.CurrentRow + 1).Value%</AMVARIABLE>
<AMBREAK />
<AMIF ACTIVITY="end" />
<AMLOOP ACTIVITY="end" />
<AMSHOWDIALOG>今回の顧客コードは
%var_CustomerCD%
です。</AMSHOWDIALOG>