VBA调用IE爬取地址时谷歌搜索按钮Click方法失效如何解决
可行解决方案
方案1:输入完成后直接模拟回车键(最简便,无需定位按钮)
谷歌搜索输入完内容后按下回车键即可触发搜索,可避开定位点击按钮的所有问题,代码实现最简单:
在你给搜索框赋值的代码之后新增一行:
elm1(n).Value = endCell.End(xlUp).Offset(1, -1).Value & " Map" ' 新增下面这行,模拟回车提交 Application.SendKeys "{ENTER}", True
如果担心SendKeys不稳定,可使用下面的方案。
方案2:触发表单提交,无需点击按钮
搜索框本身属于搜索表单的子元素,直接调用所属表单的submit方法即可触发搜索:
' 定位到搜索框后,直接获取所属表单提交 Set searchForm = elm1(n).form searchForm.submit
方案3:修复按钮点击失效问题
如果一定要通过点击按钮实现,点击失效的核心原因大概率是普通.Click方法没有触发按钮绑定的事件,换成FireEvent即可,同时确保你定位到的是正确的submit按钮:
' 用选择器直接定位type为submit的搜索按钮 Set searchBtn = ie.document.querySelector("input[type='submit'][value='Google Search']") If Not searchBtn Is Nothing Then ' 先触发聚焦,再触发点击事件 searchBtn.Focus searchBtn.FireEvent ("onclick") End If
如果以上选择器定位不到按钮,也可以根据你提到的类名嵌套定位:
Set objLSBB = ie.document.getElementsByClassName("lsbb")(0) Set searchBtn = objLSBB.querySelector("input[type='submit']") If Not searchBtn Is Nothing Then searchBtn.Focus searchBtn.FireEvent ("onclick") End If
优化提示
原有等待页面加载的代码可以优化,除了ReadyState判断,最好再加ie.Busy = False判断,避免动态元素还没渲染完成就执行后续操作:
Do While ie.Busy Or ie.ReadyState <> 4: DoEvents: Loop
如果出现按钮被搜索联想下拉框遮挡导致点击失效的情况,可以在给搜索框赋值之后加1秒左右的延迟,等下拉框消失再执行点击操作。
内容的提问来源于stack exchange,提问作者zborch
相关产品推荐
相关产品推荐

