我迫切需要编写一个宏来帮助我检索"建议"来自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 事件。这是我已经尝试过的,但事实证明这是不成功的:
更改焦点(来回)
使用FireEvent方法:
htmlInput.FireEvent "onkeyup"
使用dispatchEvent
代替FireEvent
Set evt = htmlDoc.createEvent("HTMLEvents")
evt.initEvent "blur", False, False
htmlInput.dispatchEvent evt
执行所有看似相关的脚本:
htmlDoc.parentWindow.execScript "ActiveNGram()", "JavaScript"
htmlDoc.parentWindow.execScript "onClickText(true)", "JavaScript"
htmlDoc.parentWindow.execScript "SearchTextCreateSugg()", "JavaScript"
htmlDoc.parentWindow.execScript "ShowTable()", "JavaScript"
在4中的陈述之前使用Call
也不起作用
请注意,如果不成功,我的意思是宏运行顺利,但目标变量stringresults
将返回为空(如果我手动输入搜索键,它不会提取表格,然后我提取表格宏)。
重新创建表的实际函数位于javascript模块中(我可以手动访问和查看,但我无法自动执行此操作:
<script type="text/javascript" src="/version-201452/Common/Javascript/Search/sugg.js"></script>
此外,我认为没有必要访问该模块:我不需要创建表,我只需要让它出现。
任何帮助将不胜感激,因为现在我失去了,如果需要,我可以提供更多信息和代码。
谢谢!