VBA导航IE javascript链接

时间:2014-08-04 18:33:01

标签: javascript excel vba excel-vba

第一篇文章。不知道怎么做。 以前从未从网站检索过数据。 可以通过VBA导航到包含打开报告选项的页面,但此时所有内容都从html转到Javascript以打开报告。我该如何打开报告?导航到页面或从表中删除数据没有问题

<div id='delivery_reports' class='menu' onMouseover='aMenu(this);'>
<table>

<tr>
<td nowrap><a href="javascript:handleHyperlink('finish.do')"
class="mainSubLink">finish Report</a></td>
</tr>


<tr>
<td nowrap><a href="javascript:handleHyperlink('start.do')"
class="mainSubLink">start Report</a></td>
</tr>


<tr>
<td nowrap><a href="javascript:handleHyperlink('control.do')"
class="mainSubLink">control report</a></td>
</tr>


<tr>
<td nowrap><a href="javascript:handleHyperlink('data_start.do')"
class="mainSubLink">data start Report</a></td>
</tr>

</table>
</div>

例如,我如何导航到控制报告?

任何帮助表示感谢,谢谢你

1 个答案:

答案 0 :(得分:4)

您可以使用IE.Navigate方法(假设此处IE是您的InternetExplorer对象)。您可以执行IE.Navigate "javascript:handleHyperlink('control.do')"

之类的操作

重要的是要注意页面的HTML文档将被重新加载(或者更确切地说,这是我需要使用它的一次),因此您在页面上引用HTML元素的任何变量都是如此在使用Navigate方法后,必须重新分配。

更完整的例子:

Sub Test()
    Dim ie As InternetExplorer
    Dim doc As HTMLDocument

    Set ie = New InternetExplorer

    ie.Navigate "http://www.yoururl.com"

    'Wait for page to load
    Do While ie.Busy Or Not ie.ReadyState = READYSTATE_COMPLETE
        DoEvents
    Loop

    Set doc = ie.document

    'Do whatever manipulation of the HTML document you need

    ie.Navigate "javascript:handleHyperlink('control.do')"

    'Wait for page to load
    Do While ie.Busy Or Not ie.ReadyState = READYSTATE_COMPLETE
        DoEvents
    Loop

    'Reassign document
    Set doc = ie.document

    'Further manipulation

End Sub

这就是我发现基于使一些代码适合我自己需要的方式。可能有更好的方法。

附录

您可以使用两种方法(我知道)来执行JavaScript函数。第一个是execScript,另一个是FireEvent。请注意,IE是您的InternetExplorer对象。

<强> EXECSCRIPT

IE.document.all.Item 
Call IE.document.parentWindow.execScript("handleShowAllLines()", "JavaScript")

此外,由于js代码与按钮绑定,您也可以使用 FireEvent

IE.Document.GetElementsByTagName("showAllLinesButton").Item(0).FireEvent("onclick")

此方法假设只有一个名为&#34; showAllLinesButton&#34;的按钮。如果不是这种情况,您必须将.Item(0)中的索引0调整为需要点击的正确按钮的索引。

我没有测试任何一种方法,而且我不完全确定一种方法相对于另一种方法的优点/缺点。