アプリ版:「スタンプのみでお礼する」機能のリリースについて

WinActorというRPA環境でVBScriptを動かしています。

innerHTMLを変数tempに取得して、表示するコードを下記のとおり書きましたが、tempに何も入っていません。

最初の1行目が原因と推定されますが、どう直せば良いでしょうか?(Dim文は省略しています)

-------<コードはここから>----
Set elements = document.documentElement.innerHTML '変数elements にinnerHTMLを取得
'Set elements = document.body.innerHTML '変数elements にinnerHTMLを取得

For i = 0 To elements.Length - 1
temp = elements(i).innerHTML
'MsgBox "tempは" & vbCrLf & CStr(temp)

Next


'tempに半角スペースが2個あれば、すべて半角スペース1個に置換する。

Do
If InStr(1,temp," ") > 0 Then
temp = Replace(temp," "," ")
Else
Exit Do
End If
Loop


MsgBox "tempは" & vbCrLf & CStr(temp)


-------<コードはここまで>----

質問者からの補足コメント

  • つらい・・・

    >No1にも懸念を述べておきましたが、変数documentにHTML Documentを取得できていることを前提に回答していますが、確かに取得できていますか?

    理解力不足で申し訳ありません。変数documentにHTML Documentを取得するのが、そもそもの目的です。私のスキルはそれほど高くありません。
    HTML Documentを取得できれば、配列操作で、目的の”なんとかコミュニケーション”などの、欲しい文字列を取得するのは可能ではないかと考えています。

    No.2の回答に寄せられた補足コメントです。 補足日時:2020/04/14 13:38
  • つらい・・・

    >対象とするHTMLはどこにあるのでしょうか?
    Web上にあります。

    No.3の回答に寄せられた補足コメントです。 補足日時:2020/04/19 12:53
  • どう思う?

    >ループする内容が何も書かれていないので。
    tempに取得された文字列を対象にループさせています。目的は半角スペース2個を1個に置換しています。

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/04/19 12:56
  • つらい・・・

    >Tagの取得をしらべたのなら、全称セレクタ("*")でも ~
    すみません。初心者のため、そのセレクタという言葉がわかりません。
    そのセレクタを使ったサンプルコードを示していただけないでしょうか?

    No.5の回答に寄せられた補足コメントです。 補足日時:2020/04/19 18:04
  • どう思う?

    もしかして、下記のコードでWebページの全タグのinnerHTMLが取得できるのでしょうか?

    elements = element.getElementsByTagName(*)

      補足日時:2020/04/19 18:08

A 回答 (7件)

こんにちは



VBSはあまりよく存じませんが・・・

>Set elements = document.documentElement.innerHTM
documentは正しく取得できているものと仮定したとして、document.documentElementでエラーになっていませんか?
さらには、右辺は採取的にinnerHTMLなので文字列になるのに対して、Set文はおかしくないでしょうか?

コメントアウトしている
>elements = document.body.innerHTML
とすれば、elementsに文字列が取得できるものと思います。
ただし、文字列のHTML文書であって、いわゆるelements(=要素群)ではありません。
(body要素のinnerHTML文字列)

>For i = 0 To elements.Length - 1
elementsを配列などの複数オブジェクトのように扱っていますが、その上の処理で代入しているのはinnerHTMLなので、単なる文字列です。
VBScriptの文字列にはLength属性はないような気がしますが(←未確認)長さを取るならLEN関数では?
あるいは、仮に1文字ずつ取得できたとしても、1文字に分解して操作をするつもりにも見えませんけれど・・・

>temp = elements(i).innerHTML
elementsは単一文字列なのでelements(i)でエラーになるのではないですか?
もっとも、ループ自体が、エラーで実行されるとは思えませんけれど・・・

次のDO~~LOOPも奇異に見えます。
ループする内容が何も書かれていないので。
単なるIF文の処理内容で済むことと思いますが、その上の処理では配列を扱っているような記述をしているのに対して、こちらは単一オブジェクトに対する記述になっているので、何をどうしたいのかよくわかりませんね。
この回答への補足あり
    • good
    • 0
この回答へのお礼

>elements = document.body.innerHTML
とすれば、elementsに文字列が取得できるものと思います。(body要素のinnerHTML文字列)
とのことですが、欲しい情報は取得できませんでした。
下記のHTML文の中で、下から、2行目のTatsuno Communicationsや下から1行目の236453を取得したいのですが、どうコードを書けば良いでしょうか?


<tr class="">
<th>5</th><td class="org_name"><a class="star(6453)" onmouseover="asSnap_show(&quot;6453&quot;,this)" onmouseout="asSnap_hide(&quot;6453&quot;,this)" href="browse.do?net=6453&geo=planet:earth&cluster=false">Tatsuno Communications <span class="as"><span class="pfx">AS</span><span class="val">236453</span></span></a></td>
</tr>

お礼日時:2020/04/14 02:38

No1です



>欲しい情報は取得できませんでした。
そもそもどのような状況で実行しているのかまったく不明ですけれど・・・

No1にも懸念を述べておきましたが、変数documentにHTML Documentを取得できていることを前提に回答していますが、確かに取得できていますか?
その確認方法はどのようになさっていますか?

もしも、取得できていないとするなら、根拠が何もなくなってしまうので、何とも・・・
この回答への補足あり
    • good
    • 0

No2です。



>変数documentにHTML Documentを取得するのが、そもそもの目的です。
その割にはご提示のコードは、そのあたりに関しては何の記述もないので、てっきり取得後のこととしか思えませんでした。
そういうことであるならば、そもそも、対象とするHTMLはどこにあるのでしょうか?
一般的にはWeb上に存在するものと想像しますけれど、まさか、PC内のファイルとかではないですよね?

最初に書きましたようにVBSはあまり知りませんけれど、Web上のHTMLを取得する方法であれば、検索しさえすればいろいろと見つかります。
まずはそこからでしょう。

以下は適当に見つけたサイト。(内容は一切吟味していません)
XMLHTTP、ServerXMLHTTP、WinHttpなどの利用といったもので、様々な手段があるようです。
https://necoyama3.hatenablog.com/entry/20090424/ …
https://qiita.com/aratana_ogawa/items/609953a85d …
https://www.keicode.com/note/winhttp-send-http-r …

別法として、よくある方法ですが、IEを利用してDOM操作で処理を行うもの
https://qiita.com/itsumoonazicode/items/810e0000 …
https://qiita.com/nezuq/items/93390c4def01991c0354
この回答への補足あり
    • good
    • 0
この回答へのお礼

IEを利用したdom操作につき1つだけ教えてください。tagやidやclassをdomで取得するのは見たことがありますが、いちばん上のルートノードから全部取得するのはdomではできないのでしょうか?

お礼日時:2020/04/16 20:30

No3です。



>いちばん上のルートノードから全部取得するのはdomではできないのでしょうか?

環境がないので確認はできていませんが、全称セレクタを利用すれば可能ではないでしょうか。
ただし、DOMはElement Modelなので、テキストノードはElementとしては、取得できないはずです。
ElementのtextContentとして取得はできるはずですが。
    • good
    • 0
この回答へのお礼

>全称セレクタを利用すれば可能ではないでしょうか。
具体的にどうコードを書くのでしょうか?よろしければ教えてください。

お礼日時:2020/04/19 12:50

No4です。



>tagやidやclassをdomで取得するのは見たことがありますが、~
>具体的にどうコードを書くのでしょうか?
tagの取得をしらべたのなら、全称セレクタ("*")でも取得できることもわかるのでは?
https://developer.mozilla.org/ja/docs/Web/API/El …

もしも、IEを利用しているならDocument.allでも取得できるのでははないかと思います。
あるいは、querySelectorAllでも、全称セレクタを利用できるはずです。
この回答への補足あり
    • good
    • 0

No5です



()内は*ではなく"*"です。

質問者様の場合は、それよりも先に、HTML Documentを取得することの方が問題ではないでしょうか?
取得できさえすれば、後は、いろいろと試してみることで、わかるはずと思います。
    • good
    • 0
この回答へのお礼

詳細は省略しますが、ご教示いただいた情報はやってみましたが、すべてダメでした。RPAツールWinActorにテキストファイルを加工するWinActorノートという機能があるため、それを活用することにしました。

お礼日時:2020/04/26 06:53

No6です。



>ご教示いただいた情報はやってみましたが、すべてダメでした。
何をどうなさったのか存じませんが、はじめから何度も言っているように、そもそものDocumentが取得できていないのではないかと推測します。(何の情報もいただけないので、実態はわかりませんが)
ですので、その後のことをいろいろ試したところで、何ら改善しないものと考えられます。

「だめです」という情報しか返って来ないので、これまでの回答に関しても意味が正しく通じているのかすらも不明です。
実際に、何をなさっているのかはこちらには知るよしもありませんので。
残念ながら、これ以上いくら情報を提供しても効果は期待できないと想像されます。
頑張ってください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!