Internet explorer 如何使用VBA访问网页(IHTMLDocument?)

Internet explorer 如何使用VBA访问网页(IHTMLDocument?),internet-explorer,vba,excel,automation,Internet Explorer,Vba,Excel,Automation,使用以下代码,我可以打开Internet Explorer窗口并导航到该网站。我想更进一步,通过一个链接(比如“Boxing/UFC”)进行代码点击 由于该链接会导致Javascriptonclick事件(onclick=“gS(1020,9);return false;”“),因此您能否建议我使用代码,使VBA能够在VBA宏运行后在不受用户干扰的情况下单击该链接?在Internet Explorer中,您只需通过DOM API单击链接即可 检索您感兴趣的DOM节点(A),并在其上调用click

使用以下代码,我可以打开Internet Explorer窗口并导航到该网站。我想更进一步,通过一个链接(比如“Boxing/UFC”)进行代码点击


由于该链接会导致Javascript
onclick
事件(
onclick=“gS(1020,9);return false;”“
),因此您能否建议我使用代码,使VBA能够在VBA宏运行后在不受用户干扰的情况下单击该链接?

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

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


编辑:在您的情况下,使用VBA,执行类似的操作(未测试,我这里没有VBA)


您需要查询html文档并检索集合。一旦检索到集合,就需要遍历元素并单击它

我在这里粘贴一段代码()。这是在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);
        }
IHTMLElementCollection*spcollectionembed;
spDocument->get_链接(&spCollectEmbed);
如果(SPD)
{
//获取所有链接
朗伦;
spcollected->get_length(&lLen);
for(长i=0;iitem(索引、索引和ppvdispOption);
如果(成功(hResult))
{
//查询元素
hResult=ppvdispOption->QueryInterface(IID_IHTMlement,
(无效**)和接口限制);
如果(成功(hResult))
{
BSTR-innerhtml;
interfaceHTMLElement->get_innerHTML(&innerHTML);
//点击链接
interfaceHTMLElement->单击();
睡眠(2000年);
}

Hi Tomalak,请原谅,在使用VBA和DOM节点时,我是一个noob(尽管我已经对此进行了研究,并且已经提到过)你能详细说明一下吗?我会使用什么代码?@Jason请看编辑。我现在没有办法测试它。它仍然会让你知道该怎么做。无论是广泛使用VBA调试器还是参考都强烈建议DHI Tomalak,感谢示例代码。我设置了一个手表,SideNav代码似乎没有检索到值,因此NavLinks没有任何标记。我正在尝试参考MSDN文档,因此我将继续进行此操作,但如果您有任何其他建议,那将非常好。谢谢
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
            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);
        }