Получение HTML исходного кода с помощью Excel-VBA - всплывающее окно - PullRequest
1 голос
/ 18 июня 2020

В сообщении ниже описан метод извлечения HTML URL-адреса с помощью следующего кода.

Получение HTML исходного кода с помощью Excel-VBA

    Public Function getHTTP(ByVal url As String) As String
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", url, False: .Send
        getHTTP = StrConv(.responseBody, vbUnicode)
    End With
End Function

Код работает отлично, но моя проблема в том, что на моем веб-сайте (внутреннем) появляется всплывающее окно при первом входе в него. Таким образом, доступ через этот метод дает мне HTML всплывающего окна. Как мне выйти за пределы этого окна?

enter image description here

When operating the website manually, the first time I access the web page, the pop-up appears for a few seconds then it disappears and I have click on a button to login.


Update: Taking a deeper dive, the html returned is the login window for the site. Normally on this intranet based site, my first access in the day, I click a 'continue' button (no username/password) and it auto logs me in. And any time I access the site moving forward I can go directly to parts of the site without re-logging in. The link that I am using as my url is a direct link to a certain page on the site. Curious on how to get XMLHTTP logged into the site...

введите описание изображения здесь

Вот логин - это не стандартный логин и пароль. Это имя пользователя, пароль, отдел и город. Также имеется переключатель для переключения между двумя настройками. Затем я нажимал на логин.

1 Ответ

0 голосов
/ 18 июня 2020

Я бы сначала попробовал эту небольшую модификацию, чтобы точно получить responseBody промежуточной страницы (только один раз):

Public Function getHTTP(ByVal url As String) As String
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", url, False: .send
        Debug.print StrConv(.responseBody, vbUnicode):getHTTP = ""
    End With
End Function

И затем я скопировал бы ответ из Immediate Window и используйте следующий адаптированный код:

Public Function getHTTP(ByVal url As String) As String
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", url, False: .send

        Do While StrConv(.responseBody, vbUnicode) = "the copied text from Immediate Window"
            DoEvents
        Loop
        getHTTP = StrConv(.responseBody, vbUnicode)
    End With
End Function

Или, если ответ слишком длинный, используйте Left("the text in discussion", 10) = "Whatever x"

Отредактировано: попробуйте преобразовать исходную функцию следующим образом, чтобы включить аутентификация:

Public Function getHTTP(ByVal url As String) As String
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", url, False: .Send
        .setRequestHeader "Authorization", "Basic " & Base64Encode(Your_User & ":" & password)
        getHTTP = StrConv(.responseBody, vbUnicode)
    End With
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...