2017-06-12 58 views
1

我想在Excel中創建一個VBA宏:Excel的VBA:網頁HTML不顯示,當我瀏覽到新的一頁

  1. 導航到網頁
  2. 搜索HTML文檔與所有元素標籤名稱「輸入」
  3. 打印找到的每個元素的屬性(名稱,類型和值)
  4. 單擊網頁上的按鈕以導航到第二個網頁。
  5. 搜索HTML文檔的第二頁上與標記名稱「輸入」
  6. 打印每個元素的屬性中(名稱,類型和值)的所有元素

一切工作發現,直到第5步。當我嘗試搜索HTML文檔時,出於某種原因,它不搜索第二頁的HTML文檔,而是在步驟2中查看初始網頁的HTML,並在步驟3中打印出相同的結果。

請問你們看看我的代碼,看看我做錯了什麼?我在下面列出了我的代碼,並試圖發表評論以使其可讀。

Sub C_R() 

Dim ie As New SHDocVw.InternetExplorer 
Dim HTMLDoc As MSHTML.HTMLDocument 
Dim HTMLInput As MSHTML.IHTMLElement 
Dim HTMLButtons As MSHTML.IHTMLElementCollection 
Dim HTMLButton As MSHTML.IHTMLElement 


'Opens Internet Explorer and navigates to website. 
    ie.Visible = True 
    ie.navigate "http://openaccess.sb-court.org/OpenAccess/" 

     Do While ie.ReadyState <> READYSTATE_COMPLETE 
     Loop 


'Searches HTML(initial page) to find all elements with "input" tag name. 
'Prints attributes of each element (name, type, and value". 

Set HTMLDoc = ie.Document 
Set HTMLButtons = HTMLDoc.getElementsByTagName("input") 

    Debug.Print "Initial Page" 

    For Each HTMLButton In HTMLButtons 
     Debug.Print HTMLButton.getAttribute("name"), HTMLButton.getAttribute("type"), HTMLButton.getAttribute("value") 
    Next HTMLButton 
'Navigates to second page 

    HTMLButtons(1).Click 

    Do While ie.ReadyState <> READYSTATE_COMPLETE 
    Loop 

'Searches HTML(second page) to find all elements with "input" tag name. 
'Prints attributes of each element (name, type, and value". 

Set HTMLDoc = ie.Document 
Set HTMLButtons = HTMLDoc.getElementsByTagName("input") 

    Debug.Print "Second Page" 

    For Each HTMLButton In HTMLButtons 
     Debug.Print HTMLButton.getAttribute("name"), HTMLButton.getAttribute("type"), HTMLButton.getAttribute("value") 
    Next HTMLButton 
End Sub 

任何幫助,您可以提供將不勝感激。非常感謝。

+0

在第一個'HTMLButtons(1).Click'之後,IE改變了頁面嗎?我會使用Firefox和Developer Tools,當你點擊按鈕時,你可以看到HTML代碼的變化。 – PatricK

回答

0

即使網頁尚未完全加載,看起來您的第二個循環仍在繼續。

Do While ie.ReadyState <> READYSTATE_COMPLETE 
    Loop 

要想看到這個,在第二個循環中放置一個斷點,然後等待加載第二個網頁。然後繼續代碼,它應該工作正常。

您需要在循環中添加一個等待時間(可能並不總是有效),或者找到另一種方法來判斷ie.ReadyState是否完整。