0

私は、VBAでJavaScriptによって生成されたHTML要素をターゲティングできるようにする手法について、Googleの検出作業(StackOverflowの検索を含む)を数時間行っています。

例として、私はこれにie.Document.getElementById(id)を使用できません: http ://www.kisfutures.com/electronic.html?page = quote&sym = NGU12&mode = i

ただし、google.comでテストされているように、このメソッドは静的ページ上の要素を見つけることができます。

Document.bodyからすべてのInnerTextを取得し、ファイルを解析して目的のTD値を取得するだけで遊んだのですが、異なる行にある2つの値を分割しようとすると障害が発生しました。例として、Split(..)は次のことを「2040」と理解しました。

20
40

私が理解していることから、g​​etElementById(id)の問題は、ページの読み込み後にWebサイトのテーブルがJavaScriptによって生成されるため、そのJavaScriptによって作成された要素をVBAコードの対象にできないことです。とにかく私のVBAコードにこのJavaScriptで生成されたコンテンツを表示させることはできますか?

ご協力ありがとうございました!

編集

使用されているVBAコード:

Function Quote(Market, Parameter)
    Set ie = CreateObject("InternetExplorer.Application")
    ie.Navigate "http://www.kisfutures.com/electronic.html?page=quote&sym=NGU12&mode=i"
    While ie.Busy
        DoEvents
    Wend
    Dim id As String
    id = "dt1_" & Market & "_" & StrConv(Parameter, vbLowerCase)
    Quote = ie.Document.getElementByID(id).InnerText
    ie.Quit
End Function

基本的に、Marketの列ヘッダーを使用してHTML要素IDを作成しようとしています。したがって、たとえば、市場が「NGU12」で、列ヘッダーが「Open」の場合、構築されるIDは「dt1_NGU12_open」です。これは、市場NGU12の「Open」値を含むTD要素のIDです。

4

1 に答える 1

1

ティムが述べたように、アクセスを試みるとき、静的に生成されたコンテンツと動的に生成されたコンテンツの間に違いはないはずです。これを試して:

Function Quote(Market, Parameter)
    Set ie = CreateObject("InternetExplorer.Application")
    ie.Navigate "http://www.kisfutures.com/electronic.html?page=quote&sym=NGU12&mode=i"
    While ie.Busy
        DoEvents
    Wend
    Application.Wait Now + TimeSerial(0,0,1) 'Pause 1 second, hopefully
                                             'the dynamic content is 
                                             'generated within this 
                                             'time-frame
    Dim id As String
    id = "dt1_" & Market & "_" & StrConv(Parameter, vbLowerCase)
    Quote = ie.Document.getElementByID(id).InnerText
    ie.Quit
End Function 

実行を停止するためのより良い方法がありますが(Windows Sleep APIを参照)、よりきめ細かい制御が必要な場合は、それをお任せします。

また、ページの生成後に特定のIDが存在するかどうかをテストする場合は、ページをIEに手動でロードし、URLとして以下を含むブックマークレットを追加できます。

javascript:void((function() {var a = document.getElementById(prompt('Please enter an id to test','dt1_NGU12_open')); if (a) {alert('Element found');} else {alert('Element not found')};})())
于 2012-08-06T02:13:51.663 に答える