Невозможно избавиться от появления пустого экрана при очистке содержимого - PullRequest
0 голосов
/ 02 марта 2019

Я создал макрос для анализа названий разных фильмов, проходящих через несколько страниц с торрент-сайта.Я использовал InternetExplorer в сочетании с Html.body.innerHTML парсером (обычно используется с запросами xmlhttp), чтобы ускорить выполнение.Хотя содержимое этого сайта не является динамическим, я использовал IE, чтобы посмотреть, как он себя ведет, когда выполняет очистку в сочетании с Html.body.innerHTML .

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

Как избавиться от проблем с пустым экраном?

Мой сценарий (нет проблем при использовании Html.body.innerHTML вв сочетании с Chrome Driver):

Sub FetchContent()
    Const link = "https://yts.am/browse-movies/0/all/action/0/latest?page="
    Dim driver As New ChromeDriver, Html As New HTMLDocument, genre$
    Dim post As HTMLDivElement, I&, R&

    For I = 1 To 3
        With driver
            .AddArgument "--headless"
            .get link & I
            Html.body.innerHTML = .ExecuteScript("return document.documentElement.outerHTML")
        End With
        For Each post In Html.getElementsByClassName("browse-movie-bottom")
            R = R + 1: Sheets(1).Cells(R, 1) = post.getElementsByClassName("browse-movie-title")(0).innerText
        Next post
    Next I
    driver.Quit
End Sub

Я хотел бы получить то же поведение, когда я пытаюсь использовать Html.body.innerHTML в сочетании с IE, но он дает пустые экраны вместе с желаемым результатом:

Sub FetchContent()
    Const link = "https://yts.am/browse-movies/0/all/action/0/latest?page="
    Dim IE As New InternetExplorer, Html As New HTMLDocument, genre$
    Dim post As HTMLDivElement, I&, R&

    For I = 1 To 4
        With IE
            .Visible = False
            .navigate link & I
            While .Busy Or .readyState < 4: DoEvents: Wend
            Html.body.innerHTML = .document.DocumentElement.outerHTML
        End With
        For Each post In Html.getElementsByClassName("browse-movie-bottom")
            R = R + 1: Sheets(1).Cells(R, 1) = post.getElementsByClassName("browse-movie-title")(0).innerText
        Next post
    Next I
    IE.Quit
End Sub

Пустой экран, который появляется на каждой нумерации страниц в случае комбинации IE с Html.body.innerHTML:

enter image description here

1 Ответ

0 голосов
/ 04 марта 2019

Я пытаюсь протестировать ваш код с помощью IE и обнаружил, что могу создать проблему.

Я обнаружил, что причиной этой проблемы является строка ниже.

Html.body.innerHTML = .document.DocumentElement.outerHTML

Ниже приведена измененная версия кода, в которой устранена эта проблема.

Sub FetchContent1()
    Const link = "https://yts.am/browse-movies/0/all/action/0/latest?page="
    Dim IE As New InternetExplorer, Html As New HTMLDocument, genre$
    Dim post As HTMLDivElement, I&, R&

    For I = 1 To 4
        With IE
            .Visible = False
            .navigate link & I
            While .Busy Or .readyState < 4: DoEvents: Wend

            For Each post In .document.getElementsByClassName("browse-movie-bottom")
            R = R + 1: Sheets(1).Cells(R, 1) = post.getElementsByClassName("browse-movie-title")(0).innerText
        Next post
        End With

    Next I
    IE.Quit
End Sub

Вывод в IE 11:

enter image description here

Теперь в IE не будет открыта пустая страница.

...