次のマクロは、ニコニコ動画のマイリストページを開き、動画の数を取得するVBScriptになります。
Dim objIE 'as Object
Dim Movies 'as integer
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate "http://www.nicovideo.jp/mylist/53973672"
Do until objIE.readystate=4
Wscript.Sleep 200
Loop
Movies = objIE.Document.GetElementsbyClassName("SYS_box_item").Length '動画の数を取得
msgbox Movies
objIE.quit
set objIE = Nothing
また添付図は、そのマイページのソースの一部になります。
ここで質問なのですが、同じクラス(今回はSYS_box_item)から、任意のn番目のタグIDを取得したい場合には、どのように記述すれば良いのでしょうか?
HTMLに詳しくないので、教えていただきたいです。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
ANo1です。
申し訳ないです。実は、VBSはほとんど知らないのですが、違ってたのかな?
・・・ってんで、慌ててにわか勉強しならテストしてみました。
ご提示のサイトには残念ながらアクセスできない環境からなので、違うページでテストしています。
Dim objIE, elms
Dim idx, res
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
objIE.Navigate "http://www.data.jma.go.jp/obd/stats/data/mdrr/sy …
Do Until objIE.readystate = 4
Wscript.Sleep 200
Loop
Set elms = objIE.Document.GetElementsbyClassName("o0")
res = ""
For idx = 0 To 10
res = res & elms(idx).innerText & " , "
Next
MsgBox "Length=" & elms.Length & vbCrLf & res
objIE.Quit
Set objIE = Nothing
※ 気象庁のページですが、表中、地名の欄にクラス名「o0」が付いています。
上記を実行すると、
Length= 164
札幌 , 稚内 , 北見枝幸 , 旭川 , 留萌 , 羽幌 , 岩見沢 , 小樽 , 寿都 , 倶知安 , 網走 ,
のように、表中の最初の11の地名が表示されます。
それなので、要素は取得できていると考えても良さそうです。
上の例では文字列を取得していて属性値ではないところが違うと言えば違いますが、上記の要素には他に属性値がないので、
res = res & elms(idx).className & " , "
と、クラス名を取得してみると、(←バカバカしいですが)
o0 , o0 , o0 ・・・・・
となりますので、予想通り属性値も取得できるようです。
ということで、こちらで試した範囲ではANo1でいけそうに思えるのですが・・・
何ぶんにもにわか勉強の者なので、どこかに間違いがあるのかも知れません。
>Lengthで要素の数が返ってくるのに、配列ではないということはあるのでしょうか?
GetElementsbyClassNameが返すものは、要素リスト(NodeList)と言われるもので、DOM要素と直結した「活きた」リストです。(純粋な配列とは違います)
読み出して使う範囲では、ほぼ配列と同じ扱いができたはずです。
<参考>
http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-2 …
No.1
- 回答日時:
確認していませんが・・・
objIE.Document.GetElementsbyClassName("SYS_box_item")( index )
で対象となるDOM要素が取得できると思いますので、
objIE.Document.GetElementsbyClassName("SYS_box_item")(index).id
または
objIE.Document.GetElementsbyClassName("SYS_box_item")(index).getAttribute("id")
で、どうでしょうか?
回答有り難うございます
インデックス番号を付加して行ってみたのですが、両者とも「型が一致しません」というエラーを吐いてしまいました。
そもそも本当に配列なのかをみるために、isArrayを使って調べたら結果はFalseでした。Lengthで要素の数が返ってくるのに、配列ではないということはあるのでしょうか?
色々ハマってしまっている状態で、お知恵を貸していただきたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL VBAで NHK NEWSの NEWSデータ内容取得が できない 1 2023/04/09 12:26
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
XPathで途中に名前空間が設定さ...
-
XML文のid属性とclass属性について
-
VBAでXMLを出力するプログラム...
-
東芝のDynabookなのですがアン...
-
CPUの考え方を教えてください ...
-
excelにてweb関数を使い、webデ...
-
同じタグ名の項目取得
-
バッチファイルでテキストファ...
-
XML同じ名前の要素を自動で集約...
-
昔Winnyってありましたけど、あ...
-
XML、XSLTの適応エラー(IEから...
-
TreeViewの再表示のちらつきを...
-
VB6でXMLを処理するには
-
VB.NETで最後フォのフォ...
-
TreeView の初期表示について
-
Delphiのxmlデータバインディン...
-
xmlファイルが上手にHTMLに変換...
-
head要素
-
SNMP リンクダウンとノードダ...
-
Windowsで見かけるxmlファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
XMLファイル内のデータ(値)を変...
-
XPathで途中に名前空間が設定さ...
-
VBAでXML文書のある特定タグ以...
-
VB6でXMLを作成しているのです...
-
XMLDocumentでスキーマを無視し...
-
XMLの要素の内容の中に要素
-
VBAでXMLを出力するプログラム...
-
C#でXMLファイルの情報にアクセ...
-
VBSでのDOM操作について
-
LoadCML
-
XML文のid属性とclass属性について
-
WebBrowser1.Document.Body.Inn...
-
C# GetElementsByTagNameで取得...
-
ホームページ作成 アンカーと...
-
エクセルVBA ウェブ上のボタ...
-
C#でXMLの読み取り書き取りにつ...
-
xmlでコンテンツを複数表示させ...
-
CPUの考え方を教えてください ...
-
東芝のDynabookなのですがアン...
-
SNMP リンクダウンとノードダ...
おすすめ情報