
ieやエッジを使用すれば簡単なのですが、ブラウザを使用したくないので別の方法を考えています。
次のurlの様にクラスAAAAAの下にいくつかクラスがあり、そのクラスにinnerTextが2つあります。
やりたいことは、AAAAAで絞って、その配下のクラスのtextクラスのinnerHtmlのみを取得したいのですが、詳しい方教えてください。
まとめて取得して半角空白以前を抜き出せばよいという考えもありますが、今回はどうしてもクラスtextをスポットで抜き出したいのでよろしくお願いいたします。
<url>
<ul class="AAAAA">
<label>
<input type="checkbox">
<span>
<span class="flag"></span>
<span class="text" aria-hidden="true">21</span>
</span>
<span class="count">52</span>
</label>
</li>
<li class="facet">
<label>
<input type="checkbox">
<span>
<span class="flag"></span>
<span class="text" aria-hidden="true">21.5</span>
</span>
<span class="count">33</span>
</label>
</li>
以下:同じ
試験中モジュール
Set httpClient = CreateObject("WinHttp.WinHttpRequest.5.1")
httpClient.Open "GET", ページ, False
httpClient.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0"
httpClient.setRequestHeader "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
httpClient.setRequestHeader "Upgrade-Insecure-Requests", 1
httpClient.send (Null)
'Dim htmDoc As MSHTML.HTMLDocument
'Set htmDoc = New MSHTML.HTMLDocument
'htmDoc.body.innerHTML = httpClient.responseText
'見本
Dim 要素 As MSHTML.HTMLDocument
Set 要素 = New MSHTML.HTMLDocument
要素.body.innerHTML = httpClient.responseText
Dim objClass As Object
For Each objClass In 要素.getElementsByClassName("AAAAA")
Debug.Print objClass.innerText
Next
Stop
実行結果
21 52
21.5 33
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
素朴な疑問なのですが、この簡易的な方法って、HTML解析待ちが要らないのでしょうか。
要素.body.innerHTML = httpClient.responseText
While 要素.readyState <> "complete"
Sleep 1
Wend
―――
一般的には、IPersistStreamInit::Load を用いる。
https://gist.github.com/kumatti1/485df5eaeaa43d3 …
No.2
- 回答日時:
No1です。
>No1の回答者さまの意見を実行しましたが、エラーになりました
getElementsByClassNameで取得できるのは要素リスト(配列に似たオブジェクト)のはずです。(一応、メソッド名が複数形になっていますし)
最初にご提示のコードではその様に扱っているので、今更、説明は不要と思ったのですが……
エラーメッセージの雰囲気では、要素(群)は取得できているような感じですが?
No.1
- 回答日時:
こんにちは
よくわかってませんけれど、objClassが取得できているのなら、再度
objClass.getElementsByClassName("text")
などで絞りこめばよいだけでは?
あるいは、querySelectorやquerySelectorAllが使えるのなら、ダイレクトに要素が取得できるものと思われます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
含む含まないという概念自体の...
-
ある要素の中身を全部グレーア...
-
【ヒトの神秘】美男美女から何...
-
html タグの閉じスラッシュ前の...
-
CSSのa:hoverが急に一部だけ効...
-
figcaption要素の中にul要素
-
aの中にspan
-
C言語 並び替え(配列)について
-
初歩的な質問です。<div>のwidt...
-
質問1.
-
CSSで改行後の行間調整
-
HTML の繰返し法???
-
「にはとって代わることのでき...
-
html の divとtable の役割
-
ボタンをセル内一杯に表示させ...
-
HTML5のfooterに見出しを付けて...
-
訪問済のリンク色を変えない方法
-
マウスカーソルを当てた時だけ...
-
<h1>、<h2>と<p><div>の行間を...
-
htmlの文字が縦書きになる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
含む含まないという概念自体の...
-
【ヒトの神秘】美男美女から何...
-
角丸画像の背景色を透明にした...
-
NからZへの全単射を具体的に構...
-
CSSで改行後の行間調整
-
改行ほどは行かないけど、若干...
-
HTML の繰返し法???
-
aの中にspan
-
マージソートの計算量について-...
-
input type="hidden"で取得した...
-
親要素・子要素
-
質問1.
-
tdに対してmin-heightの定義、...
-
テキストボックスの中にリンク...
-
スタイルシートで文字色を指定...
-
その要素がjQueryでremove()済...
-
見た目と声さえ良ければ、他の...
-
CSSのa:hoverが急に一部だけ効...
-
「にはとって代わることのでき...
-
fontawesomeのアイコンを少し大...
おすすめ情報
ありがとうございます。
textのクラスは他にも使われており、objClass.getElementsByClassName("text")だけで取得すると
別のクラスのtextも採ってきてしまいます。
なので一度AAAAAクラスで絞って、その中のクラスtextを取得したいのです。
No1の回答者さまの意見を実行しましたが、エラーになりましたので補足でつけておきます。
objclassをDOM形式にまとめないといけいのでしょうか?
何かうまくDOMが理解できるものに変換する方法をしっている人はいませんか?
For Each objClass In 要素.getElementsByClassName("facets facet-SIZE_SCHEME_SHOESIZE")
Debug.Print objClass.getElementsByClassName("text").innerText
Debug.Print 要素1.innerText
Next
Debug.Print objClass.getElementsByClassName("text").innerText
の箇所が黄色くなり、添付のメッセージが起動されます。