続・「QUICK 自動更新」にプログラムからアクセス
id:unibon:20050904:p3 id:unibon:20050904:p5 の続き。なんかすごくあいだがあいたなあ。
Option Explicit Private Sub Command2_Click() Call wb.Navigate("https://ot1.qweb.ne.jp/xxxxxx/st01/QS01.cgi?F=QStreamer&KOZ_STS=1&XID=xxxxxx") End Sub Private Sub Command3_Click() Dim o As Object Set o = wb.Document Dim h As MSHTML.HTMLDocument Set h = wb.Document Dim s As String s = h.body.innerHTML Dim hfe As HTMLFormElement Set hfe = h.activeElement.children(0) Set hfe = h.body.children(0) Dim i As Long For i = 0 To hfe.elements.length - 1 Dim t As String t = hfe.elements(i).Value If InStr(1, t, "成行") >= 1 Then MsgBox "na" End If ' Debug.Print i & " " & t Next Dim hde As HTMLDivElement Set hde = hfe.elements.children(5) Dim htc As HTMLTableCell Set htc = hde.childNodes(0).cells(4) TextBox1.Text = htc.innerHTML End Sub
これを拡張していけば、なんとなく株価の数値にアクセスできそうな感じ。
以下、トピックス(愚痴)。
- div タグに動的に value を設定しているらしいので、HTML のソースを見ても HTML 自体には株価などの値が入っていない。HTML で div の name などは分かるので、それで「地図」を作ると良い。値は VB やスクリプトでオブジェクトにアクセスしてみないことには分からない。この時に「地図」が役立つはず。
- VB のウォッチウィンドウでコレクションの要素に Item 1, Item 2 などの名称が付けられているがこれは VB が勝手に付けているのか?1オリジンになっているのは VB の中だけらしい。コレクションは0オリジンでアクセスするのか?(というかコレクションのオブジェクトのオリジン次第になるようだ。)
- ポーリングで株価にアクセスできそうだが、株価が変化した場合のイベントはどう取得できるのか?
- VB(VB5) のウォッチウィンドウはコレクションが256個程度までしか出てこないし、長い文字列が表示できない。クリップボードにコピーしてもダメ。コピーしても階層情報までコピーしてくれない。
- でもVBはブレークポイントで止めている最中でも、スタック変数を Dim で新しく定義できてそれにインスタンスを代入して使えるので便利。これがウォッチウィンドウの機能の低さを補ってくれる。
- MSHTML の children と childNodes の違いが良く分からん。同じ要素が入っていそうな時と、そうでない時がある。