Pdfを繰り返し取得しデータテーブルに入れる方法

studio

#1

以前にも質問させていただきましたが、


Whileの繰り返し中で、data scrapingが可能か?
宣言する際に繰り返しの際に宣言した変数を組み合わせるのか。
その方法等教えて頂ければ幸いです。

単純に、ページを繰り返すだけならできます。
なので、課題としては、いかにして、各ページをdatatableとして落とすか具体的な方法等ごぞんじであれば教えてください。
お忙しいところすみませんが、教えて頂ければ幸いです。


#2

細かい個々の手順というよりは、全体の作りの問題になると思うので、1つの例として。
PDFの構造やページ数等、ケースバイケースでやり方はいろいろとあるとは思いますが。


#3

@Honoka

ご教授いただきましてありがとうございます。
度々申し訳ございません。
転記がうまくできないのですが、data scrapingではなく、extract structured でしょうか?
不具合と致しまして、最後のmaxpageまで移動はするのですが、そのページ数分だけ1ページの内容が繰り返し転記されてしまいます。
selector等で編集をするのでしょうか?
1ページ目は<ctrl idx ='2" role='table/>
2ページ目は、<ctrl idx ='4" role='table/>
3ページ目は、<ctrl idx ='6" role='table/>
となっており、中身に規則性はあると思います。
この文を現在のページ数を表す変数と組み合わせていけばできるのではないかと推測しております。
何か不具合の原因等ご存知でしたら教えて下さい。
わかっていない部分が多くてすみません。


#4

ページ数だけループしているのであれば、セレクターに直接、変数を埋め込むのがシンプルかもしれません。

変数名をpageNumとしたとき、
<ctrl idx =’" + (pageNum * 2).ToString().Trim() + "’ role=‘table’/>
のような記述ができます。

セレクターも記法に制限があるだけで、本質的にはString型のプロパティなので、動的な値を変数から持ってきて使えます。


#5

@Honoka
ご教示いただいた通りにやってみましたが、エラーになってしまいます。
お忙しいところすみませんが、2点ほど質問させてください。
いろいろ行き詰ってしまいました。

①先ほど添付していただいた例でいうと、pageNum変数は、currentPageでしょうか?
②<ctrl idx = ‘" ←ここは ” と ’ を組み合わせるのですか?
Trim() + "’ ←ここも ” と ’ を組み合わせるのでしょうか?
"'でやりますと、以下のようにquotという文字が出てきます。(ExraStructured dataのselector)


以下のエラーが出てしまいまして、上記のselector編集部分か、もしくは、build data table内の設定が間違っているのかもしれません。

%E3%82%A8%E3%83%A9%E3%83%BC
Build data tableの設定が間違っているかもしれません。今回転記すると7列になりました。


#6

ごめんなさい、言葉足らずでした。

Selector Editorを使わず、Propertyウィンドウからセレクタの文字列を直接編集すると、他のString型の変数と同じように文字列の連結などができます。
(一度、そのように編集すれば、「…」ボタンを押すとSelector EditorではなくString Editorが出てくるようになるので、編集も容易になります)

selector%E3%81%AB%E5%A4%89%E6%95%B0%E3%82%92%E5%85%A5%E3%82%8C%E3%82%8B


#7

こういったエラーが出てしまいます。

whileの中は以前貼っていただいたcurrentPageを使用しております。

Assign等で設定を行うのでしょうか?
wnd cls='AVL_AVView’title='title=‘AVPageView’/>も同時に入力が必要となってきますでしょうか?
また、defaultで1と設定してしまうと、2ページ目がずっと張り付いてしまい、
current page + 1とした割には、うまく機能しないみたいです。


#8

pageNumがGenericValueになっているのが原因です。

pageNumを、Int32.Parse(pageNum.ToString())

に置き換えてみてください。


#9

@Honoka
お忙しいところいつもありがとうございます。
先ほど教えて頂いた通りに試してみました。
エラーは回避できましたが、Extract Structured Data “table” でした同じページのものが未だに、張り付いてしまいます。

変数の前提条件
currentPage:GenericValue DefaultValue:1
PageNum :GenericValue

①Assignにて、PageNum= Int32.Parse(currentPage.ToString())で置き換えをする。
②Datascrapingにて、1ページ目を選択し、selectorを直接修正する。
“<ctrl idx = '” + (PageNum*2).ToString().Trim() + “'role=‘table’/>”
③Assignにて、currentPage = currentPage + 1 と設定する。
実行しますと、やはり同じページの部分が出てきてしまいます。
defaultvalueの設定の仕方が問題なのでしょうか?
そもそもPageNumを別途宣言する必要はなく、currentPageだけで済む話でしょうか。


#10

ページ番号はcurrentPageをInt32型にしてしまえば、いちいちPageNumに変換する必要はないと思います。これはVariableから変更できるので軽微な修正で済むと思います。

これ以上の部分はPDFの内容にも関わってくるので、実際に切り分けをしていくしかないのですが、
Extract Structed Dataの直後で、取得したDataTableの中身を確認してみるのが良い気がします。
WriteLineを用いて「(取得したDataTable).Rows(0).Item(0).ToString()」で最初のセルの値を出力してみてください。(内容が同じなら、適宜、引数を変えることで見るセルを変えられます。Rowsの引数が行、Itemの引数が列に該当します)

それが全てのループで同じ値になっているならセレクタ側の問題の可能性が高く(毎回同じページを取得している)、ページごとにDataTableを取得できているなら、Merge DataTableあたりに何か工夫が必要、という感じになるかと思いますが。。。


#11

@Honoka

連日、ご支援頂き本当にありがとうございます。
write lineで確認しましたところ、やはり同じページの内容が張り付いているようです。
考えられる不具合要因としては以下2つと推測しております。

①Create Variableで、defaultが1と設定されているため。
whileの中で、assign(加算+1)してもセレクターがcurrentPage*2なので、2ページ目だけとなってしまう。

②selector stringの編集方法が異なるため。
もしくは、いくらselectorを編集したところで、特定のページ画面を指定しているので、読み込み画面は変えられないというUiath上の特性がある等。


#12

①はないと思います。変数のdefault値がセットされるのは、そのWorkflowが読み込まれたタイミングだけの筈です。
(気になるようならループの中でcurrentPageを.ToStringして、WriteLineしてみると確認できます)

可能性としては②なので、UiExplorerでセレクタを確認する、固定値でセレクタのidxを設定して、本当に他のページが取れるかを確認する、といった操作になるかなと。


#14

セレクタが正しいかどうか、という検証でいちばん手っ取り早い方法だと。
・UI Explorerの右下側にあるセレクタの文字を書き換える(この場合はidxの内側など)
・そのセレクタが正しいかどうかの検証(左上ツールバーの緑のチェックのアイコン)を押してエラーになるかどうかを見る
というのを試してみてください。

それでエラーになるようであれば、セレクタそのものが機能していないので、別の方法が必要になると思います。
ページ番号を入力してAcrobat上で移動させるのはできているので、あとはページ全体の中から必要な領域をClippingRegionで指定して、Get Full Textで取得する、とかになるのでしょうか。


#16

UiExplorerの、変動しそうな値の部分(上記の画像例だと緑色の○をつけた場所)を別の値に変えた上で、上のチェックマーク(赤丸のところ)を押すことで、「そのセレクタが現状の画面で有効かどうか」をチェックできます。

ですので、PDFを画面に開いた状態で、UiExplorerの値を弄りながらチェックして、何を変更すると値が読めるようになるのかを洗い出す、といのが検証には良いのではないでしょうか。

ふと気になったのですが、Extract Structed Dataの部分で、ContinueOnErrorをTrueにしていませんか?それだとセレクタ無効でエラーだった場合に、最初に読んだデータが上書きされずにそのまま追加されていく原因になりそうな気がします。
そちらもあわせて確認してみてください。


#17

@Honoka
ご教示頂きありがとうございました。
詳細については、Uipath公式にも問い合わせてみることにします。
方法については理解できました。
① Launch UiexplorerでExtract Data tableを指定する。
② Validate selectorで有効性を確認する。

確かに、真ん中らしき所にチェックを入れれば、idxらしき文面は出てきますが、そこに変数を入れ込むと、有効ではないとなってしまいます。automationidとは何か?たくさんある<ctrl ・・・・>は何を指しているのか、一体どの<ctrl・・・>を編集すればよいのか等については公式にも問い合わせてみます。お時間を取らせてしまい、申し訳ございませんでした。


#18

@Honoka

先日のUipath explorer の件で、要は、select target elementにて、PDFの各ページを指定し、
idxとなっている部分を編集するということでよろしいでしょうか?
https://uipath.site/use-uipath/uipath-explore.html#UiPath_Explorer


Merge data table
#19

使い方としては、

・idxの部分を編集してみて、要素としてチェックが通るようなら、その上で実際に値がとれるかどうか試してみる
・PDFの各ページをそれぞれ指定してみて、セレクタがどのように変化するかを見る

という流れになると思います。
前者は「セレクタとして正しいことは事前に検証できるけど、値が取れるかはわからない」のが課題で、後者は「セレクタの変化(の規則性)を自分で見つけないといけない」ところが難しい、のですが。


#20

@Honoka

①PDFの各ページをそれぞれ指定してみて、セレクタがどのように変化するかを見る。
⇒これに関しては、idx=~ ← ~の部分が、2×ページ数となっております。

② idxの部分を編集してみて、要素としてチェックが取れるようなら、その上で実際に値が取れるかどうか試してみる。⇒これに関しては、expression editor Selector(String)で編集したうえで、
Design→Launch Uipath Explorer→左側AcroRd32.exe○○.pdfを選択の上、idx=1となっているところを変数に置き換えてチェックをすると、有効となりました。ただ、また同じものを開くと、idx=1に戻ってしまっています。何か編集方法があるのでしょうか?あくまで、UiExplorerは、アプリケーションのUI要素を特定するだけなので、編集はあくまで、デザイナーパネル・プロパティで編集するのが一般的ですかね。他対策法として、Marge DataTableを工夫したり、write lineで、読み込んで、同じものが読み込まれていないかを確認する。公式からの解決法等を待っている間に、いろいろと試してみようと思います。