同じようなボタンを判断して押すようにしたい

あるWebの作業を自動化したいのですが、
見た目が全く同じで数も不確定のボタン「削除」を判断して押したいです。

具体的には対象者のメールアドレスの行に存在するボタンを押したいのですが、
詳細は添付資料をご確認ください。実施したい内容の詳細.xlsx (98.6 KB)

不足情報や不明点、このやり方ならできる等、ヒントになるものでも何でも構いませんので、
何かございましたらお教えいただけますと幸甚でございます。
宜しくお願い致します。

1 Like

周辺のHTMLを見ないと確定で出来るとは言えないのですが、たとえば漢字氏名のところにSelectorを引き、そこから

<nav up='n' />

(nは「n個上の階層に戻る」です)のようなタグを挟んでやると、できそうな気がします。

イメージとしては、

<tr>
  <td><webctrl id='xxxx' title='削除ボタン'></td>
  <td><span class='name'>佐藤太郎</span></td>
  <td><span class='company'>テスト会社</span></td>
  <td><span class='section'>システム部・・・</span></td>
</tr>

のような構造だったときに、

<webctrl aaname='佐藤太郎' tag='span' class='name' />
<nav up='2' />
<webctrl aaname='削除ボタン' />

のようなセレクターでボタンを特定できます。
セレクター1行が「aaname(アクセシビリティ)表記の佐藤太郎で、spanタグ、nameクラスのHTML要素」をまず固定し、2行目で「2段階上の要素に戻る(例示HTMLのtr要素)」を行います。
その上で、その子要素として「aanameが削除ボタン」を選ぶことで、確実に対象行の削除ボタンを選択する、という方式です。

上記の場合は名前(佐藤太郎)をキーにしているので、そこに変数を結合することで「特定の行のボタン」といった選択も可能になるかと思います。

1 Like

削除ボタンは表の中に表示されているのでしょうか?

それでしたらDataScapingが使用できると思います。
DataScapingを動かすと表のデータがDataTableに格納されます。
→デフォルトではExtractDataTableという変数になります。

ExtractDataTableをFor Each Rowで回しながら目的のメールアドレスが
存在する行を探します。
For Each Rowでは、現在何行目かわからないので、数値型の変数をカウントアップ
することで、現在の行番号を把握してください。

見つかったらBreakしてループを抜けます。

ボタンはctl02から始まっているようなので、行番号を+1する必要があると思います。
ctlXXのXXの部分を+1した行番号に置き換えて完成だと思います。

Honoka様

早急のご回答、ありがとうございます。
すみません。私の理解力と知識不足のせいで設定してもうまくいかない状況です…。

例えば今回質問しているページ(https://forum.uipath.com/t/topic/64309)の下の方に、
「フォーラム」というボタンがありますが、
これを位置ではなくトピックのタイトル(エクセルの値を変数に格納後、次の行の変数を格納したい、“.screenshots”フォルダ内の画像整理、等)で判断し、
指定の「フォーラム」をクリックしたい場合、どのような設定にて可能になりますでしょうか。

図々しい質問で大変申し訳ございません。
時間がある時で構いませんのでご助力の程、
何卒宜しくお願い致します。

サンプルを添付します。
Main.xaml (11.5 KB)

一覧の内容がが刻々と変化するので、なかなかヒットしないと思いますが、
if文の内容を書き換えて試してください。

文章で説明するより動画の方が早そうなので、まずはUiExplorerの操作方法を。

・・・ちょっと画質が残念な感じで、ごめんなさい。全画面にすればギリギリ見れると思います。

要点としては「対象を選択するマウスカーソルのようなアイコン(UiExplorerの左上)」の、隣にある「相対的に位置を固定したい要素を設定するためのアイコン」も使用します。
この動画のケースだと、トピックの文字列(名称)を内包しつつ、その隣にある「フォーラム」の文字へのセレクターが作成できています。
これ単体だと少し意味は薄いのですが、実際には(セレクターは最終的にString型の文字列になるので)トピック名に該当する部分を、変数に置き換えるような設定にすれば良いです。
そうすることで、任意の変数の値が含まれる要素と同じ行の別の要素のような選び方ができるようになります。

– 以下、追記(補足)
上記の動画で作成したセレクター画面のスクリーンショットを添えておきます。
セレクターの一番最後の行(実質的な要素を示す行)には「どの”フォーラム”の文字か」という情報はありませんが、その2行上で特定できていることがわかると思います。

1 Like

kaishii様

ご連絡が遅くなりまして申し訳ございません。
詳細な解決方法とサンプルの添付、誠にありがとうございます!

DataScapingの設定方法を含む「DataTable」を使った作業がまだ完璧に理解できておらず…。
(OutPutやLookUpについては何とかサンプルでいくつか作成できております)
当方の知識不足によりIF文の中の内容が特定できずうまくいっておりませんが、引き続き試してみます。
ご助力いただきありがとうございます!

Honoka様

ご連絡が遅くなり申し訳ございません。
動画の添付及び詳細な手順と説明、誠にありがとうございます!
ご教示いただきましたやり方にて任意のフォーラムを押下することができました!

申し訳ございませんが更問をさせてください…。
実際に当方がクリックしたい画面と構成が異なる為か、
判断基準(変数)としたいメールアドレスと同じ行の【削除】をクリックする設定方法がわからず、
現在も躓いております…。

かなり雑でモザイクだらけの資料で大変恐縮なのですが、
事象についてまとめましたのでお時間ありましたら参照頂ければ幸甚でございます。[追記]実施したい内容の詳細.xlsx (525.6 KB)

度々の質問で申し訳ございませんが、
何卒、ご助力の程、宜しくお願い申し上げます。

お返事遅くなってしまいごめんなさい。。。(少し風邪でダウンしてました)

セレクターはUiPathの設定画面(プロパティの設定部分)では、横の「…」を押した場合こそ専用のUIが表示されますが、基本的には文字列として認識されます。

なので、一番簡単な方法は、当該部分のセレクター文字列を

"<webctrl aaname='" + メールアドレスの変数 + "' tag='input' />"

のような感じで、文字列の連結で組み立てれば対応できます。
(プロパティ画面でセレクターの文字部分を、直接編集・追記することができます)

Edit%20Selector

Honoka様

病み上がりにもかかわらずご回答くださいましてありがとうございます!
ご教示頂いた内容で今まで動作しなかった箇所が動くようになりました!

Selectorを開いてしまうとダブルクォーテーションの形が変わってしまうのですね…。
上手く動く時とそうでない時がありましたが、おおよそ改善できそうです。

今躓いているところとしては、Selectorの設定方法もそうなのですが、
どのような値をSelectorに直接投入すれば「削除」をクリックするよう動かせるか、
というところですが、こちらは当方で作業するページのHTMLを見て検討しなくてはと思います。
知識不足で時間はかかりそうですが頑張ってみます。
ご助力いただき大変助かりました。ありがとうございます!

P.S.お忙しいとは思いますが、お身体を第一に、お大事にしてください。