0

「値の取得」の使用感を比べました。
XPathの関数で条件をまとめて設定することで、処理を最も効率化できました。
お裾分けです。

 

目的

  • サイト内の文字列4種いずれかの有無チェック

 

文字列4種の例

  • あああああ
  • いいいいい
  • ううううう
  • えええええ

 

あり得るパターン

  • 1種だけ~4種とも
  • ゼロのことも

 

ソース情報

  • Copy XPath://*[@id="category"]/a[1]
  • Copy Element、Copy outerHTML:<a href="" class="abc ijk xyz">あああああ</a>

 

ブラウザ起動(WinActor630、Chrome5X/8X)

  • 待機時間1秒

 

試したバリエーション

  1. 元の構成
    「値の取得」に関数入りのXPathを指定

    例外処理
     値の取得://a[contains(text(),"あああああ")]、変数A
    例外処理
     値の取得://a[contains(text(),"いいいいい")]、変数A
    例外処理
     値の取得://a[contains(text(),"ううううう")]、変数A
    例外処理
     値の取得://a[contains(text(),"えええええ")]、変数A
    分岐:変数A 等しい 値⇒

    ・所要時間:4秒台
    ・所感:ここだけ明らかなもっさり感
    ・ホンネ:人なら一瞬で識別するのに
    ・総パーツ数:2×項目数
     

  2. XPathを一意に変更
    例外処理
     値の取得://a[text()="あああああ")]、変数A
    例外処理
     値の取得://a[text()="いいいいい")]、変数A
    例外処理
     値の取得://a[text()="ううううう")]、変数A
    例外処理
     値の取得://a[text()="えええええ")]、変数A

    ・所要時間:1.より気持ち速い
     

  3. スクリプトを工夫
    「値の取得」改め「値の一括取得」:欄を直列に増設

    例外処理
     値の一括取得
      //a[contains(text(),"あああああ")]、変数A
      //a[contains(text(),"いいいいい")]、変数A
      //a[contains(text(),"ううううう")]、変数A
      //a[contains(text(),"えええええ")]、変数A

    ・所要時間:1秒台
    ・所感:まずまず
    ・ホンネ:項目数に比例してる感が残り、少しもの足りない
    ・総パーツ数:2

    スクリプトの加工方法
    https://winactor.com/questions/question/指定xpath一括処理を作ってみた/
    https://winactor.com/questions/?q=指定XPathの表の値一括取得を作ってみた
     

  4. XPathの関数を集約
    「値の取得」1つで、条件を「or」で連結

    例外処理
     値の取得
      //a[contains(text(),"あああああ") or contains(text(),"いいいいい") or contains(text(),"ううううう") or contains(text(),"えええええ") ]、変数A

    ・所要時間:1秒未満
    ・所感:満足
    ・総パーツ数:2

 

比較結果を踏まえた方針

  • 変数を使い分ける場合は、「値の一括取得」が有利
  • 変数が1つで良い場合は、条件を or で連結する等で、XPathをまとめて記述するのが有利
  • ヒットするXPathが存在しないケースもあるなら、例外処理で囲う

or 以外に、and や not も、WinActorで使えることをテストで把握済みです。

XPath基礎編(3) ー XPathによく使う関数 – スクレイピングツール | Octoparse
https://helpcenter.octoparse.jp/hc/ja/articles/360012713639--XPath基礎編-3-ー-XPathによく使う関数

anothersolution 質問の編集

回答とコメントは、会員登録(無料)で閲覧できるようになります。
会員登録(無料)する