Как активировать клик по этой гиперссылке в VBA? - PullRequest
0 голосов
/ 02 мая 2020

После некоторой очень любезной помощи у меня теперь есть небольшой фрагмент кода для перехода на веб-сайт с помощью модуля VBA в Excel. Он выбирает имя лошади в ячейке A2, где у меня есть конь Tiger Roll. Это код:

 Dim objIE As InternetExplorer
    Set objIE = New InternetExplorer
    'make web page visible
    objIE.Visible = True

    'navigate objIE to this web page
    objIE.navigate "https://www.britishhorseracing.com/racing/horses/racehorse-search-results?pagenum=1&q=" & Sheets("Sheet1").Range("A2").Value & "&rated=false"

    'wait here a few seconds while the browser is busy
    Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop

Проблема в том, что я проверил страницу и нашел ссылку, но на всю жизнь Я просто не могу написать правильный код, чтобы активировать ссылку, чтобы углубиться в статистику лошади. Может кто-нибудь помочь и, возможно, объяснить, как это сделать? Большое спасибо заранее,

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

Если в результате поиска только один результат, ссылка на страницу сведений о лошади является содержимым атрибута href единственного элемента с классами "tr link-row". Если в вашем поиске было больше результатов, то для каждого результата поиска был бы один элемент, и вы можете делать с ними то же самое, что хотите, (вы можете оставить первый или l oop через них и c.) .

Просто имейте в виду, что эти элементы не являются частью документа в первый момент, потому что документ будет загружаться с кодом HTML, который содержит сценарии, которые будут загружать другие элементы, поэтому VBA должен ждать Inte rnet Проводник для запуска этих сценариев.

К go до страницы сведений о единственной / первой лошади на странице результатов после вашего кода:

Dim htmlPage As HTMLDocument
Set htmlPage = objIE.Document

'Page is dynamically populated from script. You have to wait when the horse link gets loaded
Do While htmlPage.getElementsByClassName("tr link-row").Length < 1
    DoEvents
Loop

'Get link (href attribute) and navigate to it
objIE.navigate htmlPage.getElementsByClassName("tr link-row").Item(0).href

Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop

Имейте в виду, что в то время как объект InternetExplorer является частью библиотеки Microsoft Internet Controls, HTMLDocument является частью Microsoft HTML Object Library, поэтому добавьте его в ссылки в VBA.

0 голосов
/ 02 мая 2020

Используйте имя класса для результата, чтобы нацелиться на щелчок якоря

objIE.document.querySelector(".link-row").click
...