Как нажать кнопку JS в IE с помощью Excel VBA? - PullRequest
0 голосов
/ 04 апреля 2019

Я хочу создать код в Excel Vba , чтобы помочь мне нажать кнопку js image на веб-сайте.

Вот что я попробовал.

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

Когда я запускаю код, он говорит:

RunTime Error '-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;">

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

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

0 голосов
/ 04 апреля 2019

Ваша .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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...