按标签名称获取元素

时间:2014-03-09 18:37:37

标签: html vbscript getelementsbyname

从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")

这就是我得到的(这是我最好的) enter image description here

请帮忙 谢谢!!

1 个答案:

答案 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(抱歉,我之前没有注意到)。这是阻止您的代码工作的原因。像getElementsByNamegetElementsByTagName这样的元素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