Я использую функцию getHTTP (URL) с этого форума ( Получение исходного кода HTML с помощью Excel-VBA ), чтобы скопировать HTML-код в строку. Это прекрасно работает с URL-адресами без аутентификации пользователя и пароля. Теперь я хочу скопировать HTML-код со страниц с аутентификацией пользователя / пароля. Как я могу это сделать?
например, я пытаюсь скопировать html-код заметки SAP со следующей страницы: https://launchpad.support.sap.com/#/notes/2793351
При вызове этого URL-адреса напрямую запрашивается аутентификация пользователя / пароля (илис помощью ранее установленного частного сертификата).
При вызове из сценария Excel-VBA в html-коде отображается следующая ошибка:
Примечание. Ваш браузер не поддерживает JavaScript или он включенвыкл. Нажмите кнопку для продолжения.
С помощью кнопки «продолжить» я могу вызвать страницу после аутентификации.
Пример: B2.Value = "https://launchpad.support.sap.com/#/notes/2793351"
Код VBA:
Sub download_sapnote()
' Set name and path of workbook
WB_Name = ThisWorkbook.Name
WB_Path = ThisWorkbook.Path
' Set main worksheet
Set main_ws1 = ThisWorkbook.Sheets(1)
' Start always with sheet 1
Workbooks(WB_Name).Activate
main_ws1.Select
With main_ws1
lastrow_ws1 = .Cells(.Rows.Count, "A").End(xlUp).Row
End With
For i = 2 To lastrow_ws1
url2download = CStr(main_ws1.Cells(i, 2).Value)
html_code = getHTTP(url2download)
dfile = CStr(main_ws1.Cells(i, 1).Value) & ".html"
Set Fileout = fso.CreateTextFile(dfile, True, True)
Fileout.Write html_code
Fileout.Close
Next i
End Sub
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
Результат в 2793351.html:
<html>
<head>
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="pragma" content="no-cache" />
</head>
<body style="background-color:#FFFFFF" onload="var url=window.location.hash;if(url&&0!==url.length){document.cookie='oucrsfyugkfxzkrqcxusrqugg_anchor="'+encodeURIComponent(url) + '"';}document.forms[0].submit()">
<p><script language="javascript">document.write("Please wait ...");</script></p>
<noscript><p>Note: Your browser does not support JavaScript or it is turned off. Press the button to proceed.</p></noscript>
<form method="post" action="https://authn.hana.ondemand.com/saml2/sp/mds">
<input type="hidden" name="tenantId" value="NzkwZmJmMjgtMjMxMC00M2E5LWI1NzEtN2MwYzliODg2ZTll"/>
<input type="hidden" name="idpName" value="YWNjb3VudHMuc2FwLmNvbQ=="/>
<input type="hidden" name="requestUrl" value="aHR0cHM6Ly9sYXVuY2hwYWQuc3VwcG9ydC5zYXAuY29tLyUyMy9ub3Rlcy8yNzkzMzUx"/>
<input type="hidden" name="requestId" value="UzJiZjU2NDAzLWM4ZDUtNGQzYy1iNTJjLTFhNTMzMDhjMDRlNC04N20yRWdQYzlzblN3eTlYOU5jbEJaWFdwbWhPVnF0Uk9aUDdHbU5VWEpj"/>
<input type="hidden" name="relayState" value="b3VjcnNmeXVna2Z4emtycWN4dXNycXVnZw=="/>
<input type="hidden" name="action" value="sso"/>
<input type="hidden" name="signature" value="Lfc/yXeaHnU7CLAHs4ktFA42IPKkhCwzsmWAHw3Sz/Yr0V0xOLp4v25+vQVTTXW+WFk9zZ+Gnh4YgDMClbFwbLMDa2YbvwRRAAF+V1wSmMYvveAYsh0EbHyWXwQHk9o+qOqh7v5oKGjoV9HGBclO6dS3Hx5d1u7cOnGnDoSoomkp4x7yvANEYHFyEiAabl+JRHu/O8LVyz4ckVPrBtUWaQhRcb9n4ojaMSjFVQdLBhKJNdip2f8rxEBqY9kgNNkQ+O5OdidhBEnBek6j3QSIE4732yseAYjppp2Wjeb9l9tQ3OGCKWX7GvSPRpm6018clDDGjXGYoIwW56VAht4S0w=="/>
<noscript><input type="submit" value="Continue"/></noscript>
</form>
</body>
</html>