为什么不这样......如果.Document.getElementById(“”)=“”然后......工作?

时间:2013-05-15 23:30:55

标签: vbscript getelementbyid

这基本上就是我要做的事情,我只是想在该网站上的用户创建一个项目/图像时发出警报,它会通过一条消息提醒我。

所以我抓住这些元素,但似乎没有任何帮助?

Id=114613970
Do
  WScript.Sleep 1100
  frame.Visible = True
  frame.Navigate ("http://www.roblox.com/Item.aspx?ID=" & Id)
  WScript.Sleep 100
  set item = frame.Document.getElementByID("ctl00_cphRoblox_CreatorHyperLink")
  if frame.Document.getElementByID("ctl00_cphRoblox_CreatorHyperLink") = "<a    id='ctl00_cphRoblox_CreatorHyperLink' class='stat notranslate' href='User.aspx?ID=10744036'>"  & thexmarcoxz & "</a>" Then
    WScript.Echo "ROBLOX: ASSET DECAL"
  End if
  Id = Id + 1
Loop

我还是新手,但谢谢!

2 个答案:

答案 0 :(得分:1)

getElementById()返回一个对象(DOM树中的选定节点)。虽然此对象表示HTML标记,但它与带有HTML标记的字符串不同。但是,您可以通过对象的outerHtml属性检索该字符串。试试这个:

set item = frame.Document.getElementByID("ctl00_cphRoblox_CreatorHyperLink")
if item.outerHtml = "<a    id='ctl00_cphRoblox_CreatorHyperLink' class='stat notranslate' href='User.aspx?ID=10744036'>" & thexmarcoxz & "</a>" Then
  WScript.Echo "ROBLOX: ASSET DECAL"
End if

另一个问题是你的循环是无限的,即它没有终止条件会导致循环在某个时刻结束。因此,它将继续无休止地增加Id。如果您希望在找到第一个匹配项时终止循环,则需要执行以下操作:

Id=114613970
Do
  WScript.Sleep 1100
  frame.Visible = True
  frame.Navigate ("http://www.roblox.com/Item.aspx?ID=" & Id)
  WScript.Sleep 100
  set item = frame.Document.getElementByID("ctl00_cphRoblox_CreatorHyperLink")
  Id = Id + 1
Loop Until item.outerHtml = "<a    id='ctl00_cphRoblox_CreatorHyperLink' class='stat notranslate' href='User.aspx?ID=10744036'>" & thexmarcoxz & "</a>"
WScript.Echo "ROBLOX: ASSET DECAL"

我刚注意到的另一件事,navigate异步运行,所以你必须等待操作完成:

frame.Navigate ("http://www.roblox.com/Item.aspx?ID=" & Id)
While frame.Busy : WScript.Sleep 100 : Wend

答案 1 :(得分:0)

不是正面,但“文档”通常是小写:document.getElementById https://developer.mozilla.org/en-US/docs/DOM/document.getElementById