#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 -> вкладка Дополнительно -> Раздел Безопасность — отключите «включить расширенный защищенный режим».
Ссылка: