Как нажать кнопку js в IE с помощью Excel VBA?

#excel #vba #internet-explorer #web-scraping

#excel #vba #internet-explorer #очистка веб-страниц

Вопрос:

Я хочу создать код в 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)’ Ошибка автоматизации Вызванный объект отключился от своих клиентов.

Вот HTML-код для этой кнопки с изображением js

 <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;">
  

Ответ №1:

Ваша .Click строка мне кажется нормальной. Использовали ли вы ie.Quit до End Sub для закрытия экземпляров каждый раз, когда запускаете свой код? Проверьте, сколько InternetExplorer экземпляров у вас запущено для начала.

Используйте правильное ожидание загрузки страницы из:

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

Тогда вы также могли бы попробовать

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

Или просто повторите существующую строку.

Ответ №2:

Вы можете попробовать создать и установить объект 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: вызванный объект отключился от своих клиентов