VBAによるMS Edgeのscrapingができない※ためPower Platformを試してみることにしました。
(※一応、MSWedbdriverとTinySeleniumBasicとJSONcomberterを使って対応しているのですけれど、標準機能だけでできないのかなと)
出来そうなのはPower BIとPower Automata Desktopか。
Power BIは会社がlicense契約していない模様。
Power Automata Desktopはlicenseに含まれていると表示されるけど別アプリですね。
まあ、しゃあないか。
program時にいくつか悩んだので覚書です。
1) booleanの取り扱い
変数の型宣言ができず、自動判定されるようです。
演算で型が合わないとerrorになって実行開始すらできません。
演算結果を入力した変数をmessage boxで表示すると
True False
なのですけれど、これを値に記入するとstringと判定されます。
変数をtrueとかfalseに設定するには、
%True% %False%
を値に記入すれば所望の動作が得られました。
2) null stringの取り扱い
stringをnullに設定するのに、値が空欄だと怒られます。
こちらは値に
%""%
を記入すれば所望の動作が得られました。
3) 要素の存在確認
actionに"Webに次が含まれる場合"というのがあります。
条件として、要素を含む/含まない、テキストを含む/含まない が選択できます。
テキストの場合は良いのですが、要素の場合は、partsに要素のURLも含まれて表示されます。
試してみると別のWeb Pageでもとりあえず有無判定できるのですが、気持ち悪い。
うまくいかないときもあり、何をもって含まれると判断しているのかよく分かりません。
そこで、"WebページでJavaScript関数を実行します"を用いて結果を変数に返すことにしました。
function ExecuteScript() {
return (document.getElementById("XXX") != NULL);
}
とかですね。
ちなみに、"Webページのボタンを押す"(actionにないけどrecordで生成される)みたいなやつも要素にURLが含まれており、別pageで実行してもうまくいかないので、JavaScriptを使用しました。(今回うまくいかなったのはreload)
4) code
desktopアプリでないものとはprogram画面が異なりますね。統一環境ではなさそう。
desktopアプリではprogramしたactionを選択(複数可)してcopyし、memoなどにpasteするとtext codeが貼り付けられます。
逆も同様で、text codeをcopyしてdesktopアプリに貼りつけるとactionになります。
いちいちactionを配置するより、textでcodingして貼り付けたほうが楽じゃね?
文字の大きさとかも変えられるし。(desktopアプリだと文字が小さすぎて読みにくい)
-----
さて、所感を。
値を設定する時に変数を選択すると変数名が%で囲われるのですが、変数ごとに%で囲うのではなく、全体を%で囲うことになっており、%% 内は演算となる仕様のようです。
であれば、1)は%%内に演算結果を書けばよいはず。
ということで、%1=1%とか%1=0%とか書いてみたらTrueとかFalseとかになりました。
で、もう一歩進めて%ture%とか%false%とか書いてみたらうまくいった次第です。
2)は、net検索すると、入力値を設定しない入力変数を設定する方法がhitしました。
これだと実行時に入力boxが表示されて空のままOKしないといけないので面倒です。
これも、1)と同様に行けんじゃね?
と思い%null%と書いてみたのですが"変数nullが存在しません"と怒られました。
それでは演算結果をnull stringにするには?
%""%で良いですね。%’’%のほうが素直なのか?
しかし、Web pageの要素をどう判定しているのかよくわからず。
"Webページの要素の詳細を取得します"も、選択肢が”Own Text”, "Title", "source link", "HRef","exists"しかないです。
結局、javascriptで最初から書けばよいんじゃないか、とか思いました。
さて、次は出力をどうするかが課題です。
Excelだと楽だったのですけれど。ExcelからPADを実行して結果を受け取れるのだろうか?
逆に、PADからExcelのVBAを起動して値を渡すのはできそう。でも前者もやりたい。
最終的には結果をまとめてWeb pageに表示したい。BIならできるのかな?
今回は以上です。