Макрос VBA для Internet Explorer - код хорошо работает при отладке 1: 1, но не работает, если я запускаю всю программу - PullRequest
0 голосов
/ 31 октября 2019

Я новичок в VBA Macro, использующем для автоматизации Internet Explorer.

Я использовал его для создания бота, чтобы следовать за другим последователем покупок в Интернете (электронная коммерция). На самом деле код работает хорошо, если я использую команду отладки 1 на 1, и это работает (может сделать следующее). Но если я запускаю всю программу, код просто работает, может быть, несколькими командами и останавливается (но это не ошибка).

Я использовал его для электронной коммерции (sho.ee). Шаг:

  • открыть IE для других подписчиков магазина
  • захватить всю ссылку
  • открыть новую ссылку в новом IE
  • следуйте за ними, закройте новый IE и зацикливайтесь.

Если я запускаю шаг за шагом, это работает. Надеюсь, вы, ребята, могли бы помочь мне, что не так с кодом.

Вот код => я изменил название магазина на ххх

Sub Followers()

    Dim objIE As InternetExplorer
    Dim ieAnchors As Object
    Dim Anchor As Object


    Set objIE = New InternetExplorer

    objIE.Visible = True
    objIE.Navigate "https://shopee.co.id/shop/xxx/followers/"

    Do While objIE.Busy = True Or objIE.ReadyState <> 4: DoEvents: Loop
    Set ieAnchors = objIE.Document.getElementsByClassName("shop-href")

   For Each Anchor In ieAnchors

        result = Anchor

        If result <> result_prev Then

           Dim objIE_1 As InternetExplorer
           Dim ieBtn As Object
           Dim Btn As Object

           Set objIE_1 = New InternetExplorer
           objIE_1.Visible = True
           objIE_1.Navigate Anchor

           Do While objIE_1.Busy = True Or objIE_1.ReadyState <> 4: DoEvents: Loop

           Set ieBtn = objIE_1.Document.getElementsByClassName("shopee-button-outline shopee-button-outline--complement shopee-button-outline--fill ")

                      For Each Btn In ieBtn
                      Btn.Click
                      Next Btn

           objIE_1.Quit

        result_prev = Anchor

        End If

   Next Anchor

End Sub

1 Ответ

0 голосов
/ 31 октября 2019

Иногда страницы загружаются по частям, регистрируются как завершенные до загрузки всех элементов. В этих случаях я использую application.Wait, чтобы заставить программу ждать установленное количество времени для загрузки страницы:

'wait five seconds
Application.Wait (Now + TimeValue("0:00:05"))

Если это простая страница, у меня будет цикл Do, проверяющий ReadyState наизбегайте ненужного замедления программы:

'wait for page to load
Do Until ie.ReadyState = READYSTATE_COMPLETE or ie.ReadyState = 4
    DoEvents
Loop
...