使用以下代码,我可以打开Internet Explorer窗口并导航到该网站。我想通过其中一个链接(例如“Boxing / UFC”)点击代码来进一步发展。
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宏时无需用户干扰即可点击该链接?
答案 0 :(得分: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
答案 1 :(得分: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);
}