Как можно нажать на кнопку, присутствующую во вновь открытой вкладке в Internet Explorer, используя VBA? - PullRequest
0 голосов
/ 17 июня 2019

Вот код, который я написал.

Option Explicit

Public Sub Press_Button()

Dim objIE As SHDocVw.InternetExplorer 'microsoft internet controls (shdocvw.dll)
Dim htmlDoc As MSHTML.HTMLDocument 'Microsoft HTML Object Library
Dim htmlInput As MSHTML.HTMLInputElement
Dim htmlColl As MSHTML.IHTMLElementCollection
Dim the_input_elements As MSHTML.IHTMLElementCollection
Dim input_element As MSHTML.HTMLInputElement
Dim IeDoc As MSHTML.HTMLDocument
Dim IeDoc2 As MSHTML.HTMLDocument
Dim input_element2 As MSHTML.HTMLInputElement
Dim the_input_elements2 As MSHTML.IHTMLElementCollection

Set objIE = New SHDocVw.InternetExplorer

With objIE
    .Navigate "https://www.ndexsystems.com/fengine/fullservice/en/kerrfinancialsalogin.go?fromLogoff=true" ' Main page

    .Visible = 1
    Do While .readyState <> 4: DoEvents: Loop
    Application.Wait (Now + TimeValue("0:00:02"))

    'PART 1: set user name and password
    Set htmlDoc = .document
    Set htmlColl = htmlDoc.getElementsByTagName("INPUT")
    Do While htmlDoc.readyState <> "complete": DoEvents: Loop
    For Each htmlInput In htmlColl
       If htmlInput.Name = "textbox_password" Then
            htmlInput.Value = "***"
        Else
            If htmlInput.Name = "textbox_id" Then
                htmlInput.Value = "***"
            End If
        End If
    Next htmlInput

    'PART 2: click login
    Set htmlDoc = .document
    Set htmlColl = htmlDoc.getElementsByTagName("input")
    Do While htmlDoc.readyState <> "complete": DoEvents: Loop
    For Each htmlInput In htmlColl
        If Trim(htmlInput.Type) = "submit" Then
            htmlInput.Click
            Exit For
        End If
   Next htmlInput

   'PART 3: Clicks on portfolio management button 
   Do While .Busy: DoEvents: Loop
   Do Until .readyState = READYSTATE_COMPLETE: DoEvents: Loop
            Set IeDoc = .document
            Set the_input_elements = IeDoc.getElementsByClassName("big_button")
            For Each input_element In the_input_elements
                If input_element.href = "javascript:changePageToFrontdoor(false);" Then
                    input_element.Click
                    Exit For
                End If
            Next input_element

    'PART 4: Clicks on the 'Advanced search' button
    Do While .Busy: DoEvents: Loop
    Do Until .readyState = READYSTATE_COMPLETE: DoEvents: Loop
    Set IeDoc2 = .document
    Set the_input_elements2 = IeDoc2.getElementsByClassName("parent-item")
    For Each input_element2 In the_input_elements2
    If input_element2.href = "javascript:directToSearch()" Then
    input_element2.Click
    Exit For
    End If
    Next input_element2



End With

End Sub

Части 1, 2 и 3 работают отлично.Когда я запускаю этот макрос, он на самом деле регистрируется на сайте с моими учетными данными.В третьей части он также нажимает на кнопку «Управление порфолио».Однако, нажав кнопку «Управление портфелем», открывается новая вкладка с другой страницей того же сайта.На этой недавно открытой странице есть кнопка «Расширенный поиск», которую я хочу нажать.Вот HTML-код кнопки.enter image description here

Часть 4 не работает с этим кодом.Это не дает мне никакой ошибки, просто ничего не делает.Я не знаю, где моя ошибка, потому что я написал часть 4 с точно таким же синтаксисом, что и часть 3, и только часть 3 фактически работает и дает правильный результат (нажав на кнопку).

Может быть, тот факт, что часть 3 открывает новую вкладку этого сайта, должен означать дополнительный шаг, который я не выполнил на шаге 4?Так как я больше не работаю с той же вкладкой ...

Может кто-нибудь помочь мне найти ошибку?

Спасибо :)

1 Ответ

0 голосов
/ 20 июня 2019

Если URL-адрес каждый раз отличается, и вы не можете использовать этот URL-адрес, чем вы можете попытаться сослаться на шаги ниже.

(1) создайте объект приложения Shell.

(2) Чем пытаться считать окна IE и проходить через него.

(3) После этого сопоставьте заголовок страницы со всеми вкладками, найдите нужную вкладку и назначьте ее объекту IE, а затемвы можете попытаться взаимодействовать с этой страницей.

Пример:

Set objShell = CreateObject("Shell.Application")
IE_count = objShell.Windows.Count
For x = 0 To (IE_count - 1)
    On Error Resume Next    ' sometimes more web pages are counted than are open
    my_url = objShell.Windows(x).Document.Location
    my_title = objShell.Windows(x).Document.Title

 'find the desired page
    If my_title Like "Put something from your IE page title here" & "*" Then
        Set ie = objShell.Windows(x)
        Exit For
    Else
    End If
Next

Вы можете изменить приведенный выше код в соответствии с вашими требованиями.

Для получения дополнительной информации вы можете обратитьсяссылка ниже.

VBA-Excel: Получить ВСЕ Открытый Internet Explorer (IE) с использованием Microsoft Excel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...