VBA Webscrape: ссылка на всплывающую вкладку веб-страницы - PullRequest
0 голосов
/ 26 апреля 2018

Я провел приличную часть поисков в Интернете, чтобы найти ответ на мой вопрос, хотя это было напрасно. Я довольно плохо знаком с VBA Webscraping, поэтому я прошу прощения, если мой вопрос довольно прост. При этом, позвольте мне объяснить:

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

Я пытался использовать innerText, чтобы посмотреть, смогу ли я получить URL-адрес непосредственно из HTML, хотя, похоже, он не находится в HTML. Кроме того, я не могу создать другое «то есть», чтобы указать новый URL-адрес, поскольку URL-адрес новой вкладки является динамическим и основан на результатах поиска. Поэтому единственная возможность, которую я оставил, это переключение вкладок, и я не смог найти никакой информации о том, как это сделать.

Если кто-нибудь сможет решить эту дилемму, я знаю, что это будут кодирующие боги StackOverflow.

Option Explicit
Sub Atlas_Search()

    Dim SearchString As String
    SearchString = Range("A1")

    Dim ie As Object
    Dim ie2 As Object
    Dim form As Object
    Dim form2 As Object
    Dim form3 As Object
    Dim button As Variant
    Dim var1 As Object

    Set ie = New InternetExplorerMedium
    With ie
    ie.Visible = True
    ie.Navigate 
    "www.google.com"
    With CreateObject("Shell.Application").Windows
    Set ie = .Item(.Count - 1)
    End With
    End With


   ie.document.getelementsbytagname("input")(10).Value = SearchString
   Set form = ie.document.getelementbyid("MainContent_btnSearchFullText")
   form.Click
   Set form2 = 
   ie.document.getelementbyid("MainContent_rptrSearchResults_lnkApplicationid_0")
   form2.Click
   Set form3 = ie2.document.getelementsbyclassname("nav2link")(9)
   form3.Click

End Sub

1 Ответ

0 голосов
/ 27 апреля 2018

Каждая вкладка, открытая в окне IE, создается в отдельном совершенно новом экземпляре IE, но, поскольку все эти вкладки принадлежат единственному окну IE, они имеют тот же HWND, что и окно.

Таким образом, вы можете условно подсчитать количество вкладок в окне IE в цикле, увеличив счетчик только для окон, HWND которых соответствует цели.

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

Это отказоустойчивый и надежный способ получения нового экземпляра IE с вкладками, даже если в настоящий момент открываются несколько других окон проводника HWND. Взгляните на этот ответ , который показывает подход.

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