从HTML页面获取元素时遇到问题
我所做的是导航到某个网站然后我想找到一个名为“jobId”的元素
Dim inputs
Set IE = WScript.CreateObject("InternetExplorer.Application")
IE.Visible = 1
IE.Navigate "SOME SITE"
然后我想遍历网站(HTML CODE)
Set inputs = IE.Document.GetElementsByName("input")
x = msgbox(inputs)
x = msgbox(inputs.Length)
For each Z in inputs
x = msgbox("Item = "+Z,64, "input")
next
在第一个msgbox上我收到一个错误的未指定的NULL错误
元素在iFrame中(我不知道它是否影响了一些)
当我使用ViewSource时,这是我想要使用的元素:
<input type="hidden" name="videoUrl" value="https://vid-uss2.sundaysky.com:443/v1/w38/flvstreamer?jobId=5850f72f-46e1-49e1-953b-2a9acdf6dd01&authToken=d88fc69cea0c48769c3cd42e8481cd47&videoId=default"></input>
<input type="hidden" name="videoSessionId" value=""></input>
<input type="hidden" name="displaySurvey" value="true"></input>
<input type="hidden" name="isFlashPlayer" value="true"></input>
<input type="hidden" name="posterLocation" value="http://d21o24qxwf7uku.cloudfront.net/customers/att/attlogoinvitation.png"></input>
<input type="hidden" name="jobId" value="5850f72f-46e1-49e1-953b-2a9acdf6dd01"></input>
<input type="hidden" name="sundayskyBaseUri" value="https://att.web.sundaysky.com/"></input>
<input type="hidden" name="oldBucketMode" value="false"></input>
之后是我之前的帖子Here
按照你的指示,我达到了这一点:
Dim jobId
Set IE = WScript.CreateObject("InternetExplorer.Application")
IE.Visible = 1
IE.Navigate "https://att.web.sundaysky.com/viewbill?bk=dNEdk01ykHC72rQil7D_iTzfjn7Qj4FN6fvJ_YE-ndY"
x = msgbox("Wait for page to load",64, "Job ID")
set jobId = IE.document.getElementsByName("jobId")
x = msgbox(jobId,64, "Job ID")
这就是我得到的(这是我最好的)
请帮忙 谢谢!!
答案 0 :(得分:1)
当您真正想要使用getElementsByName
时,您正在使用getElementsByTagName
。前者根据属性 name
的值返回元素:
<input name="videoUrl" ...>
而后者根据标签的名称返回元素:
<input name="videoUrl" ...>
编辑:我注意到的另外两件事:
您似乎没有等待IE完成加载页面(这可能解释了为什么您获得Null
结果)。 Navigate
方法立即返回,因此您必须等待页面完成加载:
Do
WScript.Sleep 100
Loop Until IE.ReadyState = 4
inputs
包含DispHTMLElementCollection
,而不是字符串,因此尝试使用MsgBox
显示它会产生类型错误。该系列的成员也是如此。如果要以字符串形式显示标记,请使用对象“outerHtml
属性:
For Each Z In inputs
MsgBox "Item = " & Z.outerHtml, 64, "input"
Next
Edit2 :要获取value
属性值为name
的元素的属性jobId
的值,您可以使用此代码:
For Each jobId In IE.document.getElementsByName("jobId")
WScript.Echo jobId.value
Next
编辑3:您尝试处理的网页包含iframe
(抱歉,我之前没有注意到)。这是阻止您的代码工作的原因。像getElementsByName
或getElementsByTagName
这样的元素getter方法不能跨帧边界工作,因此您需要在iframe
的内容上运行这些方法。这应该有效:
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.Navigate "http://..."
Do
WScript.Sleep 100
Loop Until ie.ReadyState = 4
'get the content of the iframe
Set iframe = ie.document.getElementsByTagName("iframe")(0).contentWindow
'get the jobId input element inside the iframe
For Each jobId In iframe.document.getElementsByName("jobId")
MsgBox jobId.value, 64, "Job ID"
Next