続・「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 の違いが良く分からん。同じ要素が入っていそうな時と、そうでない時がある。