VBA IE自动化 - 模拟ctrl +单击

时间:2018-04-05 17:25:16

标签: javascript excel vba internet-explorer browser-automation

我在网站上有一个名单列表,可以通过 CTRL +点击它们进行多选。然后,第二个按钮将加载所有选定名称的数据。通常单击名称会加载仅单击名称的数据。我试图在Excel中使用VBA自动执行此控制点击过程。各个可点击元素的HTML结构如下:

<a onkeydown="ps.onKeyDown(this);" onclick="return false;" href="#r9">
<span>Doe, John</span>
<label class="hidden-label" name="SelectInfo"></label>

我假设onkeydown="ps.onKeyDown(this);"部分是神奇发生的地方。我试图使用以下代码在VBA中调用此函数:

js = Array( _
    "var input = document.getElementsByTagName('iframe')(0).contentDocument.getElementsByTagName('iframe')(0).contentDocument.getElementById('psLIST_TBL_NAME').getElementsByTagName('a')(" & AgentIndex & ");", _
    "ps.onKeyDown(input);" _
)

Call IE.Document.parentWindow.execScript(Join(js, vbNewLine))

运行此代码时,我收到错误&#39; ps&#39;在Internet Explorer控制台中未定义。有没有其他方法可以模拟页面中各个元素的控件点击?

编辑:我找到了实际的onKeyDown函数,它让我比以前更加困惑。没有引用 CTRL 键,只有 space

/**
* Handles onKeyDown event, this is for keyboard accessibility, code 508 compliance
* If SPACE is pressed, invoke onSelect (TR onClick)
* If -> is pressed, invoke onToggle (Norgie onClick)
*
* @param eSender - element that received onKeyDown event
*/
function onKeyDown( eSender ) {
    var key = Event.keyCode;
    if (key == 32) {
        //this.onSelect( sItemID );
        eSender = getParentByTagName(eSender, "TR");
        if (eSender && eSender.onclick)
            eSender.onclick.apply(eSender);//call TR onclick if applicable
    } else if (key == 39) {
        //this.onToggle( sItemID );
        eSender = getParentByTagName(eSender, "TR");
        if (!eSender)
            return;
        eSender = DOM2.getElementById(eSender.id+"Norg")
        if (eSender && eSender.onclick)
            eSender.onclick.apply(eSender);//call Norgie onclick if applicable
    }
}

0 个答案:

没有答案