在搜索输入上显示Javascript建议框

时间:2014-05-07 16:27:08

标签: javascript excel vba excel-vba onkeyup

我迫切需要编写一个宏来帮助我检索"建议"来自javascript搜索框的结果。我有一个很长的名单和一些不可读的字符(我已经转换为星号),并且在将这些名称提交给这样的引擎时,我经常得到相关的" clean"名称。

网页上有很多javascript代码,所以我的任务最终在于指示excel控制Internet Explorer,就像我手动操作一样。出于版权原因,我无法发布此网页的完整来源,但我已经确定了我需要控制的两个主要元素。首先,有一个输入框,我需要输入搜索键:

<div class="quickSearchCriteria">
<input name="SearchText" type="text" id="SearchText_08"
class="quickSearchCriteriaInput" maxlength="150" value="Enter a name" 
onkeyup="onClickText(true);GrayOkQuick();if(event.keyCode==13)
{doOkOnEnterForMozilla();return true;}" onblur="onClickText(false);GrayOkQuick();"
onmouseup="onClickText(true);" style="color:gray;" />

我发现在此框中输入搜索键非常简单:

Set objIE = CreateObject("InternetExplorer.Application")

With objIE
    .navigate "%%%"
    .Visible = 0

    Do While .Busy: DoEvents:   Loop
    Do While .readyState <> 4: DoEvents: Loop

    Set htmlDoc = .Document

    Set htmlColl = htmlDoc.getElementsByName("SearchText")

    For Each htmlInput In htmlColl
        htmlInput.Focus
        htmlInput.Value = "Tryme"
    Next htmlInput

手动输入名称后,我可以触发建议框的详细说明,该表格将以表格的形式显示:

<table class="sugg_m" cellspacing="0" cellpadding="0" style="visibility: visible; left: 23px; top: 92px; width: 342px;">

我也完全能够使用:

导入(并可能解析)
Set htmlsugg = htmltabs.getElementsByClassName("sugg_m")
stringresults = Trim(htmlsugg.item(, 1).outerText)

我缺少的是这两者之间的联系。我无法从输入框中触发 onkeyup 事件。这是我已经尝试过的,但事实证明这是不成功的:

  1. 更改焦点(来回)

  2. 使用FireEvent方法: htmlInput.FireEvent "onkeyup"

  3. 使用dispatchEvent代替FireEvent

    Set evt = htmlDoc.createEvent("HTMLEvents") evt.initEvent "blur", False, False htmlInput.dispatchEvent evt

  4. 执行所有看似相关的脚本:

    htmlDoc.parentWindow.execScript "ActiveNGram()", "JavaScript" htmlDoc.parentWindow.execScript "onClickText(true)", "JavaScript" htmlDoc.parentWindow.execScript "SearchTextCreateSugg()", "JavaScript" htmlDoc.parentWindow.execScript "ShowTable()", "JavaScript"

  5. 在4中的陈述之前使用Call也不起作用

  6. 请注意,如果不成功,我的意思是宏运行顺利,但目标变量stringresults将返回为空(如果我手动输入搜索键,它不会提取表格,然后我提取表格宏)。

    重新创建表的实际函数位于javascript模块中(我可以手动访问和查看,但我无法自动执行此操作:

    <script type="text/javascript" src="/version-201452/Common/Javascript/Search/sugg.js"></script>
    

    此外,我认为没有必要访问该模块:我不需要创建表,我只需要让它出现。

    任何帮助将不胜感激,因为现在我失去了,如果需要,我可以提供更多信息和代码。

    谢谢!

0 个答案:

没有答案