画面スクレイピングでターゲットが表示されない時

みなさん、こんにちは。画面クレイピングで、ターゲットが画面をスクロールしないと表示されない時は、どうしたら良いのでしょう?
具体的に言うと、
https://www.kensetulist.com/area/8/29/
のページから各会社のリンク左記の詳細を開いて、そこから、住所、電話番号、資本金を取得します。
1件目、2件目は正常に取得出来ますが、3件目
https://www.kensetulist.com/company/12081/
では、電話番号や資本金は、かなり下にあるため、スクロールしないと表示されず、正常に取得出来ません。
取得の方法は、テーブル部分から取得しています。アンカーベースで、Left 、表示中のテキストを取得を利用しています。どうしたらよいか教えてください。2019.8.0を利用しています。よろしくお願いします。

@Katsu_Take さん

スクロールしないと表示されない部分のデータ取得について、
下記の方法を参照してみてください。

wusiyangjia さん、レスありがとうございます。
なんとなくわかったのですが、
visibility の変数の型は何ですか?現状下記のエラーが出てしまいます。


よろしくお願いします。

@Katsu_Take さん

「GenericValue」にしてみてください。
なお、バージョンが違いより、差別があるかもしれませんが、
CInt(visibility)などの型変換のメソッドでも利用できると思います。

wusiyangjia さん、回答ありがとうございました。GenericValueでいけました。
もう一つ教えてください。資本金という項目はスクロールしなくても表示される場合があります。そこで、最初に資本金という項目があるかどうかを判断して、無ければそれが現れるまで、pgdnキーを押すというようにしたいのですが、どのようにしたら良いのでしょうか?現状下記のように考えています。


よろしくお願いします。

横から失礼します。

個人的には、安定しないので、画像認識は最後の手段としています。
画像認識なしで、データスクレイピングを使用して作ってみました。
※これであれば、スクロールなんて関係ありません。
※結果の最大数は30にしてありますので、全件時は0に設定してください。
※すべてのデータを見た訳ではないので、想定外の動作になる可能性はありますが。。。

Main.xaml (18。2 キロバイト)

ご参考まで。

kyd_has さん、レスありがとうございました。
データスクレイピングで取りたかったのですが、やり方がわからなかったので。せっかくサンプルファイルまで作っていただいたのですが、2019.8.0CommunityEditionで開くと,添付の通りエラーが出てしまい、正常に表示されません。どうしたらよいか教えていただけませんか。よろしくお願いします。
1

エラーとなっているアクティビティは、「構造化データを抽出」です。

恐らく、UIAutomationアクティビティパッケージがインストールされていないのが原因かもしれませんね。

STUDIOの、「パッケージを管理」から、「UiPath.UIAutomation.Activities」をインストールしてください。

こんにちは

UIAutomation.Activityパッケージのバージョンミスマッチっぽいですね。
ダウンロードしたMain.xamlを開く際、別プロジェクトの設定(project.json)が適用されているようです。

対応方法としては

  • ダウンロードした Main.xaml を別の何もないフォルダに移動してから開く。(あるいは新規に空で作成したプロジェクトのMain.xamlと入れ替える)
  • パッケージマネージャーでパッケージのバージョンを上げる。

になると思います。

1 Like

Yoichi さん、HANACCHI さん、レスありがとうございました。
新規に空で作成したプロジェクトのMain.xamlと入れ替える
の方法で、無事開くようになりました。
動作確認は明日きちんとしてみます。一度動かしたのですが、止まってしまったようです。
kyd_has さん、またお聞きすると思いますが、よろしくお願いします。

kyd_has さん、回答ありがとうございました。
職場のマシンで確かめたところ、うまく動作しました。同じ2019.8.0だけどどうしてだろう?
そこで、もう一つ、業務内容も取得したいのですが、
190918135741
ここに業務内容を追加し、


ここにも追加しましたが、これではうまく行かないようです。あと、どこを修正したら良いか教えていただけませんか?よろしくお願いします。

@Katsu_Take さんのおっしゃる通りで問題ないと思います。

こちらで追加したものと結果を上げますが、上げていただいた箇所しか修正していません。。。何が違うのかわかりません。。

業務内容追加.zip (5。0 キロバイト)

kyd_has さん、ご丁寧にどうもありがとうございました。
自宅のマシンで、念のためUiPahtをアンインストール、もう一度入れ直しました。その上でいただいたファイルを実行したら、うまく行きました。変更箇所も同じ気がしますが。明日職場のマシンでもう一度実行してみます。これを応用してうまく行きそうです。
どうもありがとうございました。

wusiyangjia さん、kyd_has さん、HANACCHI さん、Yoichi さん はじめ皆さん。
どうも色々とありがとうございました。職場のマシンでも正常に動いています。少し工夫が必要ですが、何とかなりそうです。
本当にどうもありがとうございました。

みなさん、すみません。解決した思ったのですが、少し問題がありまして。
資本金が無いところがあって、プログラムはずっと動いていくのですが、csvファイルでは、そこで書き込みが終わってしまい、それ以降のデータが書き込まれていませんでした。そこはどのように処理したら良いか教えていただけませんか?たびたびすみません。よろしくお願いします。

数字がなかったら、数字をいれてしまえばいいのです。

DtWork(4) ← CInt(“0” & Row2(1).ToString)


“0” ⇒ “00” ⇒ 0
“1” ⇒ “01” ⇒ 1
“100” ⇒ “0100” ⇒ 100

この場合、マイナスの値が無い事が前提です。
尤も、資本金にマイナスはあり得ないでしょうから、大丈夫ですね。

HANACCHI さん、レスありがとうございました。
なるほど。もっと難しいことをするのだと思っていました。ただ、資本金のデータは
190919165217
となっているため、データ型もStringとなっています。
190919165128
そこで、
190919165636
CStr(CInt(“0” & Row2(1).ToString))
としてみたが、詰まってしまいました。
そこで、CStr(“” & Row2(1).ToString))
としたら、うまく動作しました。これでやってみます。
どうもありがとうございました。

1 Like

みなさん、こんにちは。
その後順調に行っているのですが、一部エラーが発生してしまいます。ある、都道府県で、特定のページのリンク先が誤っているため、終了してしまいます。そのレコードが6番目とすると6番目に来た時にデータスクレイピングをスキップして、次のレコードに飛び、続いて処理を実行させたいと思うのですが、どうやってプログラムを書けば良いのでしょうか?カウンターをもうけてifにより6番目に来た時にスキップすると書けば良いのはわかるのですが、次のレコードへ移動がわかりません。よろしくお願いします。

For Each Rowを使っているのでしたら、そのForの最後まで実行されたら、自動的に次のレコードに移動します。
ですので、条件分岐で本来のロジックと、何もしないロジックとに分岐させてやればOKです。

ただ、その都道府県の6件目だけですか?他の都道府県は絶対大丈夫ですか?

と言うような心配があるので、リンク先が正常かどうかを判断させるアクティビティを実装し、例えば「資本金」のエレメントが存在するかどうかを判断させ、あったら正常処理、なかったらログ出力させた後、次のレコードの処理へ行かせた方が、融通が利くと思います。

如何でしょうか?

HANACCHI さん、いつもありがとうございます。
おっしゃるとおりです。エラーキャッチの方法ですよね。
まだ、10都道府県くらいの実施ですが、ひとつもエラーが無い時は1200件以上のデータを正常に取得出来ます。すべてのエラーが発生する条件を検証しているわけではありませんが、今のところわかっているのは、
リンク先が間違っているため、(県番号26愛媛県の場合)
https://www.kensetulist.com/company/7948/
トップページ
https://www.kensetulist.com
に戻ってしまいます。
このトップページが開いたということをどのように判断したら良いか教えていただけませんか。
現状のファイルは下記の通りです。
Main.zip (4.7 KB)
お手数をおかけして申し訳ありません。よろしくお願いします。