如何使用Excel VBA在IE中单击js按钮?

时间:2019-04-04 03:17:27

标签: excel vba internet-explorer web-scraping

我想在 Excel Vba 中创建一个代码,以帮助我单击一个 js图像按钮 网站。

这是我尝试过的。

Sub test()
Dim ie As Object
Set ie = New InternetExplorer
WebPage = "http://myweb.com"    'a makeup link, not really my site
ie.Visible = True
ie.Navigate WebPage
Application.Wait (Now() + TimeValue("00:00:05"))
ie.Document.getElementById("ctl00_ContentPlaceHolder1_tcSearchRoute_tabSearchRoute2_ibtnSearchR2").Click
End Sub

运行代码时,它会显示

运行时错误'-2147217848(80010108)' 自动化错误 调用的对象已与其客户端断开连接。

这是该js图片按钮的html代码

<input type="image" name="ctl00$ContentPlaceHolder1$tcSearchRoute$tabSearchRoute2$ibtnSearchR2" id="ctl00_ContentPlaceHolder1_tcSearchRoute_tabSearchRoute2_ibtnSearchR2" src="../Images/button/btn_searchAccount.png" alt="Search Account" style="border-width:0px;">

2 个答案:

答案 0 :(得分:0)

您的.Click行对我来说似乎还可以。在ie.Quit之前,您是否一直在使用End Sub在每次运行代码时关闭实例?检查您为初学者正在运行的InternetExplorer个实例。

使用以下适当的页面加载等待时间:

While ie.Busy Or ie.readyState < 4: DoEvents: Wend

那么您也可以尝试

ie.Navigate2 "http://myweb.com" & ie.Document.querySelector("#ctl00_ContentPlaceHolder1_tcSearchRoute_tabSearchRoute2_ibtnSearchR2").src
While ie.Busy Or ie.readyState < 4: DoEvents: Wend

或者只是重试您现有的线路。

答案 1 :(得分:0)

您可以尝试如下创建和设置IE对象。

 Set ie = CreateObject("InternetExplorer.Application")

    or try

 Dim ie As SHDocVw.InternetExplorer
 Set ie = New InternetExplorerMedium

        or try

 Set ie = GetObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}")

您可以在设置IE对象之后或IE页面更改/刷新时尝试添加这些等待循环之一。

Set ie = CreateObject("InternetExplorer.Application")
 Do While ie.readyState <> READYSTATE_COMPLETE
 DoEvents
 Loop

While ie.busy
 DoEvents
 Wend

Do While IE.ReadyState = 4: DoEvents: Loop
Do Until IE.ReadyState = 4: DoEvents: Loop

此外,您可以尝试在IE设置中禁用启用增强的受保护模式选项。

  

转到“工具”->“ IE选项”->“高级”选项卡->“安全性”部分-禁用   “启用增强的保护模式”。

参考:

VBA Error: The object invoked has disconnected from its clients