2017-04-14 127 views
1

我想從這個網站源代碼的價值:VBA獲得價值從HTML

K<sub>C</sub> [ksi&#8730in]:<br> 
 
<input class="test1" type="text" name="fKC" value=""> 
 
<br>

這裏是我使用,但不工作的代碼:

Sub test1() 
 

 
Dim IE As Object 
 

 
'=========Load Page 
 
Set IE = CreateObject("internetexplorer.application") 
 
IE.Visible = True 
 
IE.navigate "\\gsrv03\FDT_FractureToughness.html" 
 
Do While IE.readyState <> 4 Or IE.Busy = True 
 
    DoEvents 
 
Loop 
 

 
'========Submitting Job 
 
Set submit = IE.document.getElementById("isubmit") 
 
submit.FireEvent "onclick" 
 

 
Dim kfc As String 
 
kfc = IE.document.getElementsByClassName("test1").innerText 
 

 
MsgBox kfc 
 

 
End Sub

運行上面的代碼我得到了一個錯誤消息運行時錯誤'438'。有人可以幫忙嗎?

感謝,

+0

你有什麼問題? – IvenBach

+0

提供的HTML示例的預期輸出是什麼? – omegastripes

+0

IvenBach,導致問題的行是「kfc = IE.document.getElementsByClassName(」test1「)。innerText」 – tvu

回答

0

我也想知道這是錯誤彈出的線。但我也看到了其他一些問題。

錯誤是這裏的一個問題,一旦修復,您的下一個問題將是一個空值。 Vba不會停止IE來填充任何與JavaScript相關的功能,這意味着一旦onclick甚至被解僱,vba將嘗試立即獲取數據,並且很可能不會從中獲取任何信息。做一個DoEvents循環,無論您需要什麼時間爲網站填充數據然後抓取它。

我也將innerText更改爲值,因爲它是一個輸入,您從中獲取信息,從輸入中獲取值,innerText也可能不返回任何內容。

+0

得到它與上面顯示的代碼一起工作。感謝里卡多答覆 – tvu

1

我敢肯定,一個更優雅的解決方案會出現,但這應該做的伎倆。將下面的代碼代替肯德基= IE.document.getElementsByClassName(「測試1」)。innerText屬性

Dim oHTML_Element As IHTMLElement 
    For Each oHTML_Element In IE.Document.getElementsByTagName("input") 
     If oHTML_Element.ClassName = "test1" Then 
      kfc = oHTML_Element.Value 
     End If 
    Next 

此外,作爲電大指出的那樣,你需要一個做過了一會ie.readystate環onclick fireevent並提防空值,可能是先將kfc設置爲空字符串。

祝你好運!

+1

這實際上吐出了一個值。它運作良好。非常感謝你。 – tvu