【自動化初心者向け】要素選択方法の優先順位

自動化

自動化にはどこをクリックするとか、どこに入力するかの「どこ」を様々な方法で選択ができます。

例えば、画像の場合はテキスト要素をクリックさせています

引用:Seleniumクイックリファレンス https://www.seleniumqref.com/api/python/element_set/Python_click.html

初心者が初めて構築が終わりプログラムで言うところの「Hello World」レベルまでできるようになると
比較的早い段階で本運用での実装となるでしょう。
その際、動かすことと運用していく(何日も回していく)は違うことに気がつくと思います。

私も、初めて自動化実装していた際に動かせば問題ないだろうと思っていたのですが
振り返って見るとはじめに作ったシナリオはとても運用に耐えられないと反省しています。

そこで重要になってくるのが要素選択となります。

要素選択は様々なツールで方法が限られていることもありますが大体下記の選択方法となります。

  • idやclassでの検索
  • 画像での検索
  • ソースコードでの検索(xpathやCSSセレクタなど)
  • 座標での検索

優先順位は?

私が様々なシナリオを作成しての優先順位が下記となります

id,Class > xpath(加工後) > CSSセレクタ > xpath(加工前) > 画像 > 座標

この優先度は経験からのメンテナンス性が高い。エラーが発生する可能性が低い順となっています。
今回は一つずつメリット・デメリットについて説明いたします。

各要素のメリット・デメリット

id,Classでの要素選択

まずは文言での要素選択となります。これは基本中の基本となり、とっつきやすさメンテナンスのしやすさで
はじめに選択することが多いです。

メリット:HTML上のidやclassを選択するので比較的つかいやすい

デメリット:idやClassなどが設定されていないと選択できない

Seleniumであればこんな感じです

#表示されたWebページから検索のIDを検索する
#HTML内でのタグ内にclass="search"がある場合
element = driver.find_element(By.class, "search")

xpathでの要素選択

私がよく使う要素選択方法です。むしろこれが慣れてしまうと他の選択方法も賄えるのでこれしか使っていないです。
書き方が上級者になってくると呪文のような書き方をすることもあり、
他人に見せるときにわかりやすくするため、わざと他の要素選択を使用し短いもので選択できるものを切り替えるくらいです。

メリット:自由度が高く基本的なWebページであれば選択できないものはない

デメリット:書き方を理解していないとすぐにエラーを出す要素になりかねない

xpathの書き方に関してはよく使う方法を下記の記事に載せていますので参照ください!

CSSセレクタでの要素選択

基本的にはxpathと考え方は変わらないですが、自由度はxpathより劣ってしまいます

主に、PowerAutomateなどではxpathを使用するより簡単に呼び出せるので使用します

メリット:自由度があり、選択の幅が広がる

デメリット:xpath同様、書き方を理解していないとすぐにエラーを出す要素になりかねない

#日本気象協会の網走市の画像を指定(Chromeで該当のアイコンを右クリックし検証。
#ハイライトしたコードを右クリックしてコピーからSelectorを選択)
element =  find_element(By.CSS_SELECTOR, "forecast-map-entry-1211 > picture > img")

画像での要素選択

すべての要素で賄えない場合に逃げやすい要素選択となります。
必要な要素をスクショして画像比較を行い要素選択する方法です。
しかし、運用上は使用しないほうが結果としてメンテ工数が少なくなる印象です。

Seleniumでは実装されておらず、PowerAutomateにて要素選択方法としてあります。

私もeggplantで画像による要素選択を行ったシナリオを作成したことがあり、
早く実装ができますがその分日々の運用上のエラーが多発します。結果現場が炎上します。

メリット:画像を用いるので第三者がすぐに飲み込みやすく、初心者でも扱いやすい

デメリット:少しでも画像に変更があるとエラーとなる(背景が違う、解像度が違うなど)

ただし、運用上で使用したほうがメリットがある箇所があり、例えば色などの検査を行う場合など有効です!
(赤色以外になっていないことの確認やグレーアウトしていることの確認など)

座標での要素選択

画像でも解決できない場合に使用します。ただし、内的(ソースコードの変更)や外的(表示位置が変わることやポップアップ表示)などで予期しない場所を選択してしまう可能性があります。
他の要素選択では要素が何かしらの影響でクリックできない場合動作しないようになっていますが、
こちらは要素があろうが無かろうが動作してしまうのでかなりの確率で事故が起こります。本番環境ではなるべく使用しないようにするべきです。

メリット:必ず動作するのでシナリオ上ある意味エラーが発生しない

デメリット:上記に記載しましましたが暴発のおそれがあります

ただし、運用上で使用したほうがメリットがある箇所があり、スワイプなど要素と関係なく指の動きが必要な場合効果的です!

まとめ

この優先度は私の経験によるものなので偏見が含まれています。

ただし、経験をしたからお伝えできているものだと思っていますので、これを参考にシナリオ作成してみてください!

もしお困り事があればコメントいただければ私の経験上のアドバイスは可能なのでよろしくお願いいたします!

コメント

タイトルとURLをコピーしました