Как мне сделать так, чтобы мой код парсинга веб-страниц VBA не отставал от нового окна?

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

Я в тупике, это мой код.

<div class = "table-r">
  <table class = "table-c">
    <tbody>
      <tr class = "bg">
        <td class = " np">    <a title = "comm" href = "logcomm-e.asp?id=3" rel = "history">3</a> </td>
        <td class = " np">    <a title = "comm" href = "logcomm-e.asp?id=2" rel = "history">2</a> </td>
        <td class = " np">    <a title = "comm" href = "logcomm-e.asp?id=1" rel = "history">1</a> </td>
      </tr>
    </tbody>
  </table>
</div>

Sub IEScrape()
  Dim IE As Object
  Set IE = New InternetExplorerMedium

    With IE
         .Visible = True
         .Navigate "inhouse web site"

         While IE.readyState <> 4
             DoEvents
         Wend

         .document.querySelector("a[href*='logcomm-e.asp?id=']").Click

         While IE.readyState <> 4
             DoEvents
         Wend

    End With

  Set IE = Nothing
  ActiveWorkbook.Save

End Sub

Я ожидаю, что когда я запускаю элемент get и печатаю его в ячейку, это из новой ссылки href. Я не могу сразу перейти по ссылке, потому что каждый день появляется новая ссылка, и href обновляется. с помощью querySelector он нажимает на последнюю запись. Сейчас в 3, завтра в 4 и так далее.

В качестве обходного пути - можете ли вы получить адрес href нового окна и открыть его через IE.Navigate newAddress? Это должно работать, и я думаю, это будет надежно, если вы правильно управляете закрытием.

Vityata 13.06.2019 19:18

Я не могу, так как он получает последнюю ссылку, и каждый день появляется новая, сегодня №3, завтра №4 и так далее, спасибо за предложение.

ALT613 13.06.2019 19:30

Я не имею в виду «жестко кодировать это», я имел в виду чтение href с открытой страницы, а затем переход туда. См. этот вопрос - stackoverflow.com/questions/32677931/vba-to-get-the-href-value‌​ue

Vityata 13.06.2019 19:32

Не уверен, что вы имеете в виду, если бы вы могли предоставить код, который я мог бы попробовать, тогда это имело бы смысл. Я не думаю, что предоставленная вами ссылка относится к моей.

ALT613 13.06.2019 19:41

Попробуйте получить href из .document.querySelector("a[href*='logcomm-e.asp?id=']"). с чем-то вроде someString = .document.querySelector("a[href*='logcomm-e.asp?id=']").href (не проверял). А потом напишите IE.navigate someString.

Vityata 13.06.2019 19:43

о, хорошо, я пробовал что-то подобное раньше, но это не сработало, но теперь это работает, спасибо!

ALT613 13.06.2019 19:45

Пожалуйста. Я добавил последний комментарий к ответу. Не стесняйтесь редактировать его на код, который работает :)

Vityata 13.06.2019 19:52

да, я только что сделал это .Navigate (.document.querySelector("a[href*='logcomm-e.asp?id=']").hre‌​f) в основном ваше предложение, еще раз спасибо.

ALT613 13.06.2019 20:34
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
2
8
169
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Получение свойства .href объекта querySelector и последующий переход к нему должно работать:

With IE
     Dim hrefString as String
     hrefString = .document.querySelector("a[href*='logcomm-e.asp?id=']").href
     .Navigate = hrefString
End With

немного быстрее было бы использовать селекторы классов и типов (но + к @vityata's), чтобы получить href и перейти к нему. QuerySelector возвращает первое совпадение, которое, по-видимому, будет последним в вашем случае.

ie.Navigate2 .document.querySelector(".table-c a").href

Другие вопросы по теме