我很难从名为300
的输入中检索值points
。
这是我的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
答案 0 :(得分:4)
我尝试在Web浏览器中编写用于在javascript中操作文档对象模型(DOM)的代码,以便您可以使用更好的基于Web的调试工具。
这里有几个问题,控制台或调试器可以提供帮助:
myPoints
,但在HTML中,它只是名为points
name
对于元素而言是唯一的,您就不需要首先搜索td
<input></input>
可以看出,输入元素没有innerText
(><
内的文字)。相反,他们有一个value
属性.value
以下是您尝试做的一个javascript示例:
var value = document.getElementsByName("points")[0].value;
console.log(value);
&#13;
<input type="text" disabled="disabled" value="300" name="points" />
&#13;
打开控制台( F12 ),你应该看到300
要将其转换为Excel的VBA代码,只需确保对VB数组使用括号()
而不是JS数组的方括号[]
:
myPoints = Trim(Doc.getElementsByName("points")(0).Value)
这应该可以正常工作。
由于我不确定您在VB中失败了什么时候,还要确保您的VBA脚本中有适当的Web引用。
转到工具&gt;参考文献&gt;并添加&#34; Microsoft HTML Object Library&#34;和#34; Microsoft Internet Controls&#34;:
我创建了一个demo in 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
<强>输出强>:
答案 1 :(得分:1)
CSS选择器:
使用CSS选择器获取input[name='points']
的元素
您没有显示足够的HTML来知道这是否是页面上唯一的。上面说的是带有input
标签的元素,其属性为name
,其值为'points'
CSS查询:
VBA:
您可以通过.querySelector
的{{1}}方法将CSS选择器应用于单个元素; document
代表所有匹配元素中的.querySelectorAll
,也就是说,如果页面上有多个元素,并且您按索引得到了一个感兴趣的元素。
nodeList
答案 2 :(得分:0)
您需要使用.getAttribute("name of attribute")
来获取属性值。在您的情况下,.getAttribute("value")
将返回300。
Dim ie As Object
Dim myPoints As String
Set ie = CreateObject("InternetExplorer.Application")
With ie
.Visible = 1
.navigate "website URL"
While .Busy Or .readyState <> 4
DoEvents
Wend
End With
Dim Doc As HTMLDocument
Set Doc = ie.document
myPoints = Trim(Doc.getElementsByTagName("td")(0).getElementsByTagName("input")(0).getAttribute("value"))
Range("A1").Value = myPoints
只是旁注。我不太了解HTML,也许有人可以详细说明这一点。但是如果你想测试你需要在&lt;中添加的HTML代码。表&gt; &LT; TR&GT;标签。
这样的事情:
<table>
<tr>
<td id="myPower_val_9" style="visibility: visible;">
<input type="text" disabled="disabled" value="300" name="points"></input>
</td>
</tr>
</table>