使用 VBA 从 Web 文档输入元素中获取值
问题:使用 VBA 从 Web 文档输入元素中获取值 我很难从名为points的输入中检索值300。 这是我的 HTML 和 VBA 代码。 HTML: <td id="myPower_val_9" style="visibility: visible;"> <input type="text" disabled="disabled" value="300" name="points"></inp
问题:使用 VBA 从 Web 文档输入元素中获取值
我很难从名为points
的输入中检索值300
。
这是我的 HTML 和 VBA 代码。
HTML:
<td id="myPower_val_9" style="visibility: visible;">
<input type="text" disabled="disabled" value="300" name="points"></input>
</td>
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
解答
HTML代码
我会尝试在 Web 浏览器中编写在 javascript 中操作文档对象模型 (DOM) 的代码,以便您可以使用更好的基于 Web 的调试工具。
这里有几个问题,控制台或调试器可以帮助解决:
-
您想要获取元素 ID
myPoints
但在 HTML 中它只是称为points
-
您想通过 ID 获取元素,但您只设置了 name 属性 -
-
只要
name
是元素唯一的,就不需要先搜索一个td
-
从
<input></input>
可以看出,输入元素没有innerText
(><
里面的文字)。相反,他们有一个value
属性 -
元素通过对象本身的属性公开它的属性和其他数据。因此,您只需查看
.value
即可检查输入的值
这是您尝试执行的操作的 javascript 示例:
var value = document.getElementsByName("points")[0].value;
console.log(value);
<input type="text" disabled="disabled" value="300" name="points" />
打开控制台(F12),你应该看到300
VBA
要将其转换为 Excel 的 VBA 代码,只需确保对 VB 数组使用括号()
而不是对 JS 数组使用方括号[]
:
myPoints = Trim(Doc.getElementsByName("points")(0).Value)
那应该工作得很好。
参考文献
由于我不确定您在 VB 中失败的时间点,因此还要确保您的 VBA 脚本中有所有正确的 Web 引用。
转到工具 > 参考 > 并添加“Microsoft HTML 对象库”和“Microsoft Internet 控件”:
演示
我在 plunker 中创建了一个**demo **所以会有一个实时站点来代替 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
输出:
更多推荐
所有评论(0)