尝试通过Excel VBA点击网页上的搜索按钮时遇到问题。实际上,我的真正问题是要处理特定网页,而不是看到我在搜索框中输入内容。点击网页上的搜索按钮后,当搜索框中已有内容时,我会收到“提供要搜索的号码或公司名称”的消息。
在将文本输入搜索框之前:
将文本输入搜索框&单击“搜索”按钮:
以下是HTML源代码中存在按钮(和onclick
事件)的部分。按钮的具体行是
<a href="#" class="add-on" data-bind="click: performSupplierSearch"><i class="icon-search">
<div class="row-fluid">
<div class="span6">
<h4>Search for the supplier you wish to Log in as:</h4>
<span class="helpText-SearchSupplier">Search by name or number</span>
</div>
</div>
<div class="row-fluid block">
<div class="span4 input-append pull-left">
<input id="supplierSearchTextBox" data-bind="value: searchQuery, valueUpdate: 'afterkeydown', onEnter: performSupplierSearch" type="text" class="input-xlarge" autocomplete="off" placeholder="Search Suppliers" />
<a href="#" class="add-on" data-bind="click: performSupplierSearch"><i class="icon-search"></i></a>
</div>
</div>
<div class="row-fluid" data-bind="visible: searched() && supplierSearchResults().length == 0">
<div class="span12">
<div class="alert ">
<strong><i class="icon-warning-sign"></i> 0 results returned </strong>
</div>
</div>
</div>
<div class="row-fluid" data-bind="visible: (searchMessage().length > 0)">
<div class="span12">
<div class="alert ">
<strong><i class="icon-warning-sign"></i><span data-bind="text: searchMessage"></span></strong>
</div>
</div>
</div>
当我检查HTML的元素并单击“搜索”按钮时,它会调用y.handle
,我将其跟踪到jquery文件,并找到提及y
(p=y.events)||(p=y.events={})
在jquery文件中的这个函数
add:function(n,r,u,f,e){var b,p,k,w,c,l,a,v,h,d,g,y=i._data(n);if(y){for(u.handler&&(w=u,u=w.handler,e=w.selector),u.guid||(u.guid=i.guid++),(p=y.events)||(p=y.events={}),(l=y.handle)||(l=y.handle=function(n){return typeof i===o||n&&i.event.triggered===n.type?t:i.event.dispatch.apply(l.elem,arguments)},l.elem=n),r=(r||"").match(s)||[""],k=r.length;k--;)b=sr.exec(r[k])||[],h=g=b[1],d=(b[2]||"").split(".").sort(),c=i.event.special[h]||{},h=(e?c.delegateType:c.bindType)||h,c=i.event.special[h]||{},a=i.extend({type:h,origType:g,data:f,handler:u,guid:u.guid,selector:e,needsContext:e&&i.expr.match.needsContext.test(e),namespace:d.join(".")},w),(v=p[h])||(v=p[h]=[],v.delegateCount=0,c.setup&&c.setup.call(n,f,d,l)!==!1||(n.addEventListener?n.addEventListener(h,l,!1):n.attachEvent&&n.attachEvent("on"+h,l))),c.add&&(c.add.call(n,a),a.handler.guid||(a.handler.guid=u.guid)),e?v.splice(v.delegateCount++,0,a):v.push(a),i.event.global[h]=!0;n=null}},remove:function(n,t,r,u,f)
我不知道jquery代码是否会有所帮助,但我认为提供尽可能多的信息可以增加至少一个人能够帮我解决这个问题的几率。
这是我的代码中我试图输入文本并单击按钮
的部分'Select Search Box
IE.document.GetElementByID("supplierSearchTextBox").Focus
'Fill in Search Box
IE.document.GetElementByID("supplierSearchTextBox").Value = "Test"
delay 3
'Click Search button
Dim searchButton As Object
'6th a tag so index 5
Set searchButton = IE.document.GetElementsByTagName("a")(5)
searchButton.Click
我是以错误的方式/使用错误的方法输入值,还是与附加到搜索按钮的onclick事件有关?如何让代码正常工作?
答案 0 :(得分:2)
经过几个小时的搜索,搜索每一段代码,并在无数的论坛上挖掘,我终于找到了一个可能在将来帮助其他人的解决方案。我意识到我的问题必须处理值/文本框更新的方式(使用valueUpdate: 'afterkeydown'
,这意味着代码正在寻找实际的按键事件,这就是为什么我插入它时不会看到字符串的原因通过vba代码进入文本字段。由于我发现.fireEvent()
不适用于较新版本的Internet Explorer,我觉得所有内容都丢失了,我不得不恢复到不可靠的Sendkeys()
每个人都说要避免的方法。但是,就在我即将放弃的那一天晚上,我遇到了这个小gem,其中用户 dyanisis2 在长期搜索之后提供了这种方法问题产生了这个解决方案
Set evt = ie.Document.createEvent("keyboardevent")
evt.initEvent "change", True, False
PW.all(0).dispatchEvent evt
将 PW 替换为您的对象。
在需要检测按键的字段中输入值后放置此位代码将模拟按键事件,因此更新文本字段中的值并允许代码识别字段中存在某些内容。 / p>
答案 1 :(得分:1)
只想确认这对我有用。 刚刚在最后一行替换了PW.all。(0)。
IE.Document.forms(0).getElementsByTagName("select")(1).dispatchEvent evt