pex*_*223 3 html excel vba excel-vba web-scraping
我很难300从名为的输入中检索值points。
这是我的HTML和VBA代码。
HTML:
<td id="myPower_val_9" style="visibility: visible;">
<input type="text" disabled="disabled" value="300" name="points"></input>
</td>
Run Code Online (Sandbox Code Playgroud)
VBA:
Dim ie As Object
Dim myPoints As String
Set ie = CreateObject("InternetExplorer.Application")
With ie
.Visible = 0
.navigate "www.example.com"
While .Busy Or .readyState <> 4
DoEvents
Wend
End With
Dim Doc As HTMLDocument
Set Doc = ie.document
myPoints = Trim(Doc.getElementsByTagName("td")(0).getElementById("myPoints").innerText)
Range("A1").Value = myPoints
Run Code Online (Sandbox Code Playgroud)
我将尝试在网络浏览器中编写可处理javascript中的文档对象模型(DOM)的代码,以便您可以使用更好的基于Web的调试工具。
控制台或调试器可以解决以下几个问题:
myPoints但在HTML中它只是被称为pointsname元素唯一,您就不需要搜索td第一个<input></input>,输入元素没有innerText(内的文本><)。相反,他们有一个value属性.value这是您要执行的操作的javascript示例:
var value = document.getElementsByName("points")[0].value;
console.log(value);Run Code Online (Sandbox Code Playgroud)
<input type="text" disabled="disabled" value="300" name="points" />
Run Code Online (Sandbox Code Playgroud)
打开控制台(F12),您应该看到300
要将其转换为Excel的VBA代码,只需确保()对VB数组使用括号而不[]对JS数组使用方括号:
myPoints = Trim(Doc.getElementsByName("points")(0).Value)
Run Code Online (Sandbox Code Playgroud)
那应该很好。
由于我不确定您在VB上失败了的那一点,因此还要确保在VBA脚本中有适当的Web参考。
转到工具>引用>并添加“ Microsoft HTML对象库”和“ Microsoft Internet控件”:

我在plunker中创建了一个演示,因此会有一个实时站点而不是example.com。
将以下代码粘贴到excel中,一切正常。
Public Sub GetValueFromBrowser()
Dim ie As Object
Dim url As String
Dim myPoints As String
url = "http://run.plnkr.co/plunks/6UTb9kHRZ363Ivhh2BPE/"
Set ie = CreateObject("InternetExplorer.Application")
With ie
.Visible = 0
.navigate url
While .Busy Or .readyState <> 4
DoEvents
Wend
End With
Dim Doc As HTMLDocument
Set Doc = ie.document
myPoints = Trim(Doc.getElementsByName("points")(0).Value)
Range("A1").Value = myPoints
End Sub
Run Code Online (Sandbox Code Playgroud)
输出:

| 归档时间: |
|
| 查看次数: |
39094 次 |
| 最近记录: |