
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)
-------<コードはここまで>----
A 回答 (7件)
- 最新から表示
- 回答順に表示
No.7
- 回答日時:
No6です。
>ご教示いただいた情報はやってみましたが、すべてダメでした。
何をどうなさったのか存じませんが、はじめから何度も言っているように、そもそものDocumentが取得できていないのではないかと推測します。(何の情報もいただけないので、実態はわかりませんが)
ですので、その後のことをいろいろ試したところで、何ら改善しないものと考えられます。
「だめです」という情報しか返って来ないので、これまでの回答に関しても意味が正しく通じているのかすらも不明です。
実際に、何をなさっているのかはこちらには知るよしもありませんので。
残念ながら、これ以上いくら情報を提供しても効果は期待できないと想像されます。
頑張ってください。
No.5
- 回答日時:
No4です。
>tagやidやclassをdomで取得するのは見たことがありますが、~
>具体的にどうコードを書くのでしょうか?
tagの取得をしらべたのなら、全称セレクタ("*")でも取得できることもわかるのでは?
https://developer.mozilla.org/ja/docs/Web/API/El …
もしも、IEを利用しているならDocument.allでも取得できるのでははないかと思います。
あるいは、querySelectorAllでも、全称セレクタを利用できるはずです。
No.4
- 回答日時:
No3です。
>いちばん上のルートノードから全部取得するのはdomではできないのでしょうか?
環境がないので確認はできていませんが、全称セレクタを利用すれば可能ではないでしょうか。
ただし、DOMはElement Modelなので、テキストノードはElementとしては、取得できないはずです。
ElementのtextContentとして取得はできるはずですが。
No.3
- 回答日時:
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
IEを利用したdom操作につき1つだけ教えてください。tagやidやclassをdomで取得するのは見たことがありますが、いちばん上のルートノードから全部取得するのはdomではできないのでしょうか?
No.2
- 回答日時:
No1です
>欲しい情報は取得できませんでした。
そもそもどのような状況で実行しているのかまったく不明ですけれど・・・
No1にも懸念を述べておきましたが、変数documentにHTML Documentを取得できていることを前提に回答していますが、確かに取得できていますか?
その確認方法はどのようになさっていますか?
もしも、取得できていないとするなら、根拠が何もなくなってしまうので、何とも・・・
No.1
- 回答日時:
こんにちは
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文の処理内容で済むことと思いますが、その上の処理では配列を扱っているような記述をしているのに対して、こちらは単一オブジェクトに対する記述になっているので、何をどうしたいのかよくわかりませんね。
>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("6453",this)" onmouseout="asSnap_hide("6453",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>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでActiveDirectoryのユーザ...
-
VB.NETで DataRow()を利用して...
-
ListView 項目の選択/選択解除...
-
PHP8でWarning:Undefined varia...
-
ListViewで複数選択された項目...
-
count(*)で取得した値をJAVAの...
-
利用者側のMACアドレスを取得し...
-
現在時刻をミリ秒まで取得
-
ExcelでNTPサーバーから時刻を...
-
VBA:小数点以下の数字を取得で...
-
動的SQLのCOUNTのとり方
-
like演算子内に変数って使えな...
-
Active directoryの全グループ取得
-
ウェブサイトのコンボボックス...
-
URIでのページの移動について
-
指定URL以外からのアクセスを拒...
-
JavaScriptでWindowsログオンID...
-
DateTimePickerをIf文で
-
コンボボックス表示文字列を取...
-
VBでFTPサーバ側のファイルの更...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETで DataRow()を利用して...
-
PHP8でWarning:Undefined varia...
-
count(*)で取得した値をJAVAの...
-
ListView 項目の選択/選択解除...
-
VBAでActiveDirectoryのユーザ...
-
VBA:小数点以下の数字を取得で...
-
JSP+Servletでのページングの常識
-
データ数をカウントしたいのですが
-
Flexgridで選択行の列の値を取...
-
利用者側のMACアドレスを取得し...
-
getParameter と getAttribut...
-
like演算子内に変数って使えな...
-
JavaScriptにおいてコンピュー...
-
郵便番号検索APIにてget Elemen...
-
DataGridView 複数選択で行番...
-
URIでのページの移動について
-
指定のURLのタイトルを取得...
-
Spreadの選択行の取得について
-
EXCELのリストボックスを選択し...
-
ListViewで複数選択された項目...
おすすめ情報
>No1にも懸念を述べておきましたが、変数documentにHTML Documentを取得できていることを前提に回答していますが、確かに取得できていますか?
理解力不足で申し訳ありません。変数documentにHTML Documentを取得するのが、そもそもの目的です。私のスキルはそれほど高くありません。
HTML Documentを取得できれば、配列操作で、目的の”なんとかコミュニケーション”などの、欲しい文字列を取得するのは可能ではないかと考えています。
>対象とするHTMLはどこにあるのでしょうか?
Web上にあります。
>ループする内容が何も書かれていないので。
tempに取得された文字列を対象にループさせています。目的は半角スペース2個を1個に置換しています。
>Tagの取得をしらべたのなら、全称セレクタ("*")でも ~
すみません。初心者のため、そのセレクタという言葉がわかりません。
そのセレクタを使ったサンプルコードを示していただけないでしょうか?
もしかして、下記のコードでWebページの全タグのinnerHTMLが取得できるのでしょうか?
elements = element.getElementsByTagName(*)