プロが教える店舗&オフィスのセキュリティ対策術

WinActorというRPAツールで、VBScriptを動かしています。

VBScriptでWebページの"hogehoge"という単語を探したいと考えています。

もし、あれば、”あったよ!”とMsgBoxで表示します。

下記のコードで合っていますか?気になる箇所があれば教えてください。

ーーー<Start of code>ーーーー

Option Explicit

On Error Resume Next
Dim temp
Dim arraytemp
Dim num
Dim i

temp = document.body.innerHTML

temp = Replace(temp,CStr(vbCrLf)," ")
temp = Replace(temp,CStr(vbLf)," ")

'でvbCrLfとvbLfを半角スペースに置換する。

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

'で半角スペース2個を半角スペースに1個に置換する。

arraytemp = Split(temp," ")
num = UBound(arraytemp)

For i = 0 to (num - 1)
If arraytemp(i) = "hogehoge" Then

MsgBox "あったよ!"
Else
End If
Next

ーーー<End of code>ーーーー

A 回答 (2件)

No1です。



>HTMLは無視して、innerHTMLで探して下さい。
またしても意味不明ですな…
マークアップは無視したいということのようには思えるけれど、それならなぜにinnerHTML??

>やりたいことは、arraytempに配列を入れて、インデックスで"hogehoge"を探しています。
方法に関しては、お好きにどうぞとしか言えませんが、
 <div>hogehoge</div>
は、無視するってことなんでしょうかね・・・

質問者様のなさりたいルール通りにできているのなら、そのままでよろしいのではないかと。
    • good
    • 0

こんにちは



なさりたいことがよくわかりませんが・・・
>"hogehoge"という単語を探したい
だけであるなら、改行を変換したりワードごとに分解したりしなくても良いのではないでしょうか?何を目的としているのかイマイチわかりかねます。
特に、 
 If InStr(1,temp," ") > 0 Then
  temp = Replace(temp," "," ")
なんてのも意図不明。
(文字コードまで見ちゃったけど、皆、32だった。汗)

ワードごとということは「ahogehoge」とか「hogehogehoge」などは対象としてカウントしないという意味なのでしょうか?
存在を探すだけなら、直接に InStrでもよさそうだし、スペース等も考慮するなら正規表現で「\shogehoge\s」みたいなパターンで考えるとか・・・
両端も考慮するなら、(^|\s)hogehoge(\s|$) とかかも。

一番疑問なのは、HTMLの表示内容だけから探したいのか、要素属性も含めてなのかもわからない。
ってか、ご提示の内容だと
  <div class="fugafuga hogehoge piyo">意味あるんか?</div>
なんてのも取っちゃいそうだけれど、はたしてそういうつもりなのでしょうか?

あれっ!? スペースにこだわるようだと…
 <div>hogehoge</div>
は、カウントされないけれどいいのかなぁ・・・??
    • good
    • 0
この回答へのお礼

ご質問にインラインで回答させていただきます。

>ワードごとということは「ahogehoge」とか「hogehogehoge」などは対象としてカウントしないという意味なのでしょうか?

そのとおりです。"hogehoge" のみを探します。

あと探す際に、HTMLは無視して、innerHTMLで探して下さい。

arraytemp = Split(temp," ")
num = UBound(arraytemp)

やりたいことは、arraytempに配列を入れて、インデックスで"hogehoge"を探しています。

お礼日時:2020/07/02 14:33

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