Веб-запрос VBA с логином + паролем
Доброе утро, ребята,
Используя уже отвеченные вопросы здесь, я все еще не могу заставить работать какой-либо код для моего конкретного сайта, к сожалению, так как это внутренний сайт, я не могу предоставить доступ к фактическому сайту.
Сайт представляет собой страницу входа в систему.jsp. Может ли это быть причиной проблемы? Макрос открывает страницу входа в IE, но не вводит никаких пользовательских данных в поля и не отправляет в настоящее время.
Я также получаю сообщение об ошибке "вызванный объект отключился от своих клиентов" после запуска макроса.
Microsoft Internet Controls активен и Forms 2.0 активен в ссылках также
Я довольно новичок в VBA, если я что-то упустил, пожалуйста, дайте мне знать, я также снизил настройки безопасности в IE.
РЕДАКТИРОВАТЬ Я несколько уверен, что это связано с моими идентификаторами формы, но я не могу видеть, где я ошибся?
Sub GetTable()
Dim ieApp As InternetExplorer
Dim ieDoc As Object
Dim ieTable As Object
Dim clip As DataObject
'create a new instance of ie
Set ieApp = New InternetExplorer
'you don’t need this, but it’s good for debugging
ieApp.Visible = True
'assume we’re not logged in and just go directly to the login page
ieApp.Navigate "http://dss-gp-mida-002/MidasDS/login.jsp
Do While ieApp.Busy: DoEvents: Loop
Do Until ieApp.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop
Set ieDoc = ieApp.Document
'fill in the login form – View Source from your browser to get the control names
With ieDoc.forms(0)
.Username.Value = "Carterr"
.Password.Value = "password"
.submit
End With
Do While ieApp.Busy: DoEvents: Loop
Do Until ieApp.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop
'now that we’re in, go to the page we want
ieApp.Navigate "http://dss-gp-mida-002/MidasDS/homepage.jsp"
Do While ieApp.Busy: DoEvents: Loop
Do Until ieApp.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop
'get the table based on the table’s id
Set ieDoc = ieApp.Document
Set ieTable = ieDoc.all.Item("sampletable")
'copy the tables html to the clipboard and paste to teh sheet
If Not ieTable Is Nothing Then
Set clip = New DataObject
clip.SetText "" & ieTable.outerHTML & ""
clip.PutInClipboard
Sheet1.Select
Sheet1.Range("A1").Select
Sheet1.PasteSpecial "Unicode Text"
End If
'close 'er up
ieApp.Quit
Set ieApp = Nothing
End Sub
Исходный текст страницы:
<input type="hidden" name="urlwanted" value=""><input type="hidden" name="sourcePageURL" value=""><input type="hidden" name="ssoiid" value="">
<div>
<div class="form-group">
<label for="username">Username</label><input name="username" id="username" type="text" class="form-control" placeholder="Enter Username">
</div>
<div class="form-group">
<label for="password">Password</label><input name="password" id="password" type="password" class="form-control" placeholder="Enter Password">
</div>
<script>
$("#username").keyup(function(event) {
if (event.which == 13) {
$("#loginform").submit();
}
});
$("#password").keyup(function(event) {
if (event.which == 13) {
$("#loginform").submit();
}
});
</script>
<div class="form-group">
<div class="btn-group-vertical-justified">
<button name="login" type="button" value="Log In" class="btn btn-primary" onclick="document.loginform.ssoiid.value="";document.loginform.submit()">Log In</button>
</div>
1 ответ
Я использовал следующее в чем-то похожем:
Set ie = GetIE("www.url.com")
If Not ie is Nothing Then
ie.navigate (strtarget) 'strtarget is the target url
Do Until ie.ReadyState = 4: DoEvents: Loop
If ie.LocationURL = "www.url.com/loginpage" Then
MsgBox "Login Please!!"
Else
pageText = ie.document.body.innertext
End if
Else
MsgBox "IE not found!!"
End if
Он отобразит окно сообщения, в котором вас попросят войти, если вы попадете на страницу входа. Затем вы входите вручную и снова запускаете скрипт.