Веб-запрос VBA с логином+паролем

Доброе утро, ребята,

Используя уже отвеченные вопросы здесь, я все еще не могу заставить какой-либо код работать для моего конкретного сайта, к сожалению, поскольку это внутренний веб-сайт, я не могу поделиться фактическим сайтом.

Сайт представляет собой страницу входа в систему .jsp, может ли это быть причиной проблемы? Макрос открывает страницу входа в IE, но не вводит никаких пользовательских данных в поля и не отправляет в данный момент.

Я также получаю сообщение об ошибке «вызванный объект отключился от своих клиентов» после запуска макроса.

Microsoft Internet Controls активен, а Forms 2.0 также активен в ссылках

Я новичок в VBA, и если я упустил что-то очевидное, сообщите мне, я также снизил настройки безопасности в IE.

EDIT Я уверен, что это связано с моими идентификаторами форм, но я не вижу, где я ошибся?

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=&quot;&quot;;document.loginform.submit()">Log In</button>
</div>

person Ryan Carter    schedule 08.03.2017    source источник
comment
В зависимости от того, как часто вам придется входить в систему / запускать макрос, вы можете в качестве первого шага проверить, вошли ли вы в систему. Если нет, сделайте это вручную, а затем запустите остальную часть макроса.   -  person Luuklag    schedule 08.03.2017
comment
@Luuklag система всегда будет выходить из системы и не сохранять логины пользователей, как было настроено на веб-сайте.   -  person Ryan Carter    schedule 08.03.2017
comment
У меня когда-то было что-то похожее. У меня был код, открывающий веб-сайт, вход в систему вручную и запуск остального кода. Пока код работал, он оставался в системе. Что-то вроде этого может работать, если вам нужно запускать свой код только изредка.   -  person Luuklag    schedule 08.03.2017
comment
@Luuklag это именно то, что я хочу, все, что он делает, это извлекает список пользователей с веб-сайта для запуска отчетов KPI.   -  person Ryan Carter    schedule 08.03.2017


Ответы (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

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

person Luuklag    schedule 08.03.2017