VBA Automation с IE застрял на странице входа - PullRequest
1 голос
/ 08 октября 2019

У меня очень простая проблема, которую я слишком долго трачу на ее устранение. До сих пор я думаю, что я потратил всего 3-4 часа.

Сценарий останавливается на

.Submit

Это относится к кнопке отправки на экране входа в систему. Я опытный в VBA, но не использую автоматизированный материал с IE, поэтому терпите меня.

HTML:

<TD background=/frontend/images/greenback.gif width=302><INPUT type=submit value="Login now" name=submit> </TD>

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

 Sub GetTable()

'Kills any open IE windows.
On Error GoTo Ignore
Call IE_Sledgehammer
Ignore:

Dim ieApp As InternetExplorer
Dim ieDoc As Object
Dim ieTable As Object
Dim clip As DataObject
Dim UserName As String, Password As String

'Create anew instance of ie
Set ieApp = New InternetExplorer

'Debugging
ieApp.Visible = True

'Opening this page prompts login screen
ieApp.Navigate "CANNOT SHARE, INTERNAL WORK SITE"

'When busy - wait
Do While ieApp.Busy: DoEvents: Loop
Do Until ieApp.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop

'Pop up window
On Error GoTo skip_Popup
ieApp.Document.all.item("submitBn").Focus
SendKeys "~"
skip_Popup:

'Login script
On Error GoTo Skip_Login
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 = "test1"
.Password.Value = "test2"
.Submit

End With
Do While ieApp.Busy: DoEvents: Loop
Do Until ieApp.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop
Skip_Login:

'Copy page Info
Set ieDoc = ieApp.Document
Set ieTable = ieDoc.all.item

'Copy Paste the page
If Not ieTable Is Nothing Then
Set clip = New DataObject
clip.SetText "" & ieTable.outerHTML & ""
clip.PutInClipboard

'Location of data
Sheets("Raw Data").Range("E2").PasteSpecial "text"
End If

'Delete any form controls that make it into the sheet
Sheets("Raw Data").DrawingObjects.Delete

'Kills ALL IE windows
Call IE_Sledgehammer
Set ieApp = Nothing
End Sub

Также это не критично, однако, если кто-то может мне помочь, просто выберите таблицу на странице, а не все остальное, я был бы очень признателен. У него нет названия, поэтому я тоже застрял с ним.

HTML:

  <table cellspacing="1" cellpadding="2" align="center" border="0" width="400">

Спасибо, Том

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Я проверил ваш код и смог создать проблему.

В качестве альтернативы вы можете попытаться перебрать элементы ввода и попытаться найти отправку и щелкнуть ее.

 Set objCollection = ieApp.document.getElementsByTagName("input")

    i = 0
    While i < objCollection.Length

            If objCollection(i).Type = "submit" And _
               objCollection(i).Name = "submit" Then


                objCollection(i).Click

            End If

        i = i + 1
    Wend
0 голосов
/ 08 октября 2019

Попробуйте использовать атрибут = значение css selector

ie.document.querySelector("[name=submit]").click

Для вашей таблицы лучше всего найти ее по взаимосвязи с другими элементами / атрибутами. Невозможно консультировать дальше, не видя больше HTML. В противном случае, если в этой таблице есть уникальный атрибут или атрибут = значение (отсутствует в других таблицах), объедините его, чтобы идентифицировать таблицу

, например,

ie.document.querySelector("table[width='400']")

Это менее надежноспособ.

...