Невозможно установить параметр тайм-аута в моем скребке, чтобы сохранить его от бесконечного зацикливания - PullRequest
0 голосов
/ 16 мая 2018

Я написал скрипт в vba, используя IE, чтобы инициировать поиск по веб-странице в окне поиска, чтобы заполнить результат в соответствии с поиском, нажав кнопку поиска. Веб-страница загружается через searchbox несколько секунд, после чего она открывается. Тем не менее, мой скрипт ниже может справиться с этим барьером и правильно выполнить поиск.

Теперь у меня есть немного другой вопрос: предположим, что я определил неправильное ID имя или Нет таких ID на этой веб-странице, тогда способ, которым я написал свой сценарий, будет повторяться вечно , Это, безусловно, серьезная проблема.

Как я могу изменить свой скрипт, поместив некоторую опцию timeout в цикл так, чтобы скребок некоторое время ждал появления элемента, а если элемент не присутствует в течение этого времени, то он выйдет из цикла и выйдет браузер. Заранее спасибо.

Вот мой сценарий:

Sub GetItems()
    Dim HTML As HTMLDocument, post As Object

    With New InternetExplorer
        .Visible = True
        .navigate "https://torrentz2.eu/"
        While .Busy Or .ReadyState < 4: DoEvents: Wend
        Set HTML = .Document

        With HTML
            Do     ''Wish to set timeout options within this loop to save it from infinite looping
                Set post = .getElementById("thesearchbox")
                DoEvents
            Loop While post Is Nothing

            post.innerText = "Udemy"

            .getElementById("thesearchbutton").Click
        End With
        .Quit
    End With
End Sub

1 Ответ

0 голосов
/ 16 мая 2018

Попробуйте заменить:

    With HTML
        Do     ''Wish to set timeout options within this loop to save it from infinite looping
            Set post = .getElementById("thesearchbox")
            DoEvents
        Loop While post Is Nothing

        post.innerText = "Udemy"

        .getElementById("thesearchbutton").Click
    End With

с

Dim dTime as Single ' as pointed out by @Mathieu Guindon in comments
'____________________________

dTime = Timer

With HTML
    Do     ''Wish to set timeout options within this loop to save it from infinite looping
        Set post = .getElementById("thesearchbox")
        If Timer - dTime > 60 Then Exit Do ' 60: num of seconds, equal 1 min
        DoEvents
    Loop While post Is Nothing

    post.innerText = "Udemy"

    .getElementById("thesearchbutton").Click
End With
...