2011-04-26 199 views
3

使用以下代码,我可以打开Internet Explorer窗口并导航到网站。我希望能够通过其中一个链接(例如“拳击/ UFC”)点击代码来进一步深入。如何使用VBA访问网页(IHTMLDocument?)

Sub Run() 
Set IE = CreateObject("InternetExplorer.Application") 
With IE 
    .Visible = True 
    .Navigate2 "http://www.bet365.com" 
    Do Until .ReadyState = 4: DoEvents: Loop 
    .Quit 
End With 

因为该链接指向一个Javascript onclick事件(onclick="gS(1020,9);return false;")你可以建议的代码,我可以使用,这将使VBA一旦VBA宏通过运行没有用户的干涉该链接点击?

回答

2

在Internet Explorer中,您只需单击通过DOM API的链接即可。

检索您感兴趣的DOM节点(A),并对其调用click()。这也会触发所有关联的事件处理程序。


编辑:在你的情况下,VBA,这样做(未经测试,我没有VBA这里)

Dim sideNav As IHTMLElement 
Dim navLinks As IHTMLElementCollection 
Dim currLink As IHTMLElement 

Set sideNav = IE.document.getElementByID("sln") 
Set navLinks = sideNav.all.tags("A") 

For Each currLink In navLinks 
    If Trim(currLink.innerText) = "Boxing/UFC" Then 
    currLink.Click 
    End If 
Next currLink 
+0

托默勒格你好,请原谅我,我是一个小白,当谈到使用VBA和DOM节点(虽然我已经研究这一点,它已经被提及。)你能更详细地说明这个好吗?我会使用什么代码? – Jason 2011-04-26 05:52:54

+0

@Jason见编辑。我现在无法对其进行测试。它应该仍然让你知道该怎么做。无论是广泛使用VBA调试器还是提及[MSDN上的文档](http://msdn.microsoft.com/en-us/library/aa752541%28v=vs.85%29.aspx)强烈建议 – Tomalak 2011-04-26 10:10:25

+0

嗨Tomalak,感谢代码示例。我设置了一个手表,SideNav代码似乎没有检索到值,所以NavLinks没有任何标签。我正在尝试引用MSDN文档,因此我将继续此操作,但是如果您有任何其他建议,那将非常棒。谢谢 – Jason 2011-04-26 19:28:52

0

您将需要查询的HTML文档,检索采集。一旦你检索到集合,你需要遍历元素并点击它。

我正在粘贴代码片段(click here for the entire code)。这是在c + +中,但我认为它也必须是相同的VB。

  IHTMLElementCollection *spCollectEmbed; 
      spDocument->get_links(&spCollectEmbed); 
      if(spCollectEmbed) 
      { 
      // get all the links 
      long lLen; 
      spCollectEmbed->get_length(&lLen); 
      for (long i = 0; i < lLen; i++) 
      { 
       IDispatch *ppvdispOption; 
       IHTMLElement *interfaceHTMLElement; 
       VARIANT index; 
       index.vt = VT_I4; 
       index.lVal = i; 

     // get the item from the document 
       HRESULT hResult = spCollectEmbed->item(index, index, &ppvdispOption); 
       if(SUCCEEDED(hResult)) 
       { 
     // query for the element 
     hResult = ppvdispOption->QueryInterface(IID_IHTMLElement, 
     (void **) &interfaceHTMLElement); 
     if(SUCCEEDED(hResult)) 
     { 
     BSTR innerhtml; 
     interfaceHTMLElement->get_innerHTML(&innerhtml); 
     // click the links 
     interfaceHTMLElement->click(); 
     Sleep(2000); 
     }