2017-04-14 102 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