Это было забавное испытание. Некоторые моменты, на которые стоит обратить внимание:
- Похоже, что страница не загружается в Internet Explorer (по крайней мере, для меня) - это может быть из-за того, что устаревшие браузеры не поддерживаются. Поэтому было необходимо переключиться на Selenium basic и Chrome. После загрузки и установки selenium basic вам, возможно, придется поменять
ChromeDriver.exe
в папке selenium для latest . Затем вам нужно перейти VBE> Инструменты> Ссылки> Добавить ссылку на Selenium Type Library
.
- Страница загружается динамически с помощью ajax в пакетах по 12 записей. Вам нужно прокрутить страницу, пока не появятся все результаты.
- Вы не можете получить счетчик результатов так же, как вы показываете, поскольку возвращаемая строка имеет другой, и, возможно, переменный формат. Вместо этого вы можете получить сумму от элемента, который хранит это число.
- Чтобы продолжить использовать синтаксис для записи, вам нужно перевести html-страницу в переменную HTMLDocument, а затем работать с этим.
VBA:
Option Explicit
Public Sub Loiça()
Dim d As WebDriver, t As Date, i As Long, data As Object, div As Object, item As Object, r As Long, c As Long
Dim numResults As Long, html As HTMLDocument
Const MAX_WAIT_SEC As Long = 600
Const URL As String = "https://www.radiopopular.pt/categoria/maquina-de-lavar-louca/"
Set d = New ChromeDriver
With d
.Start "Chrome"
.get URL
Worksheets("Loiça").Range("A:A,Z:Z").EntireColumn.Delete
numResults = .FindElementByCss("#total").Text
t = Timer
Do
.ExecuteScript "window.scrollBy(0, window.innerHeight);", "javascript"
If Timer - t > MAX_WAIT_SEC Then Exit Do
Loop Until .FindElementByCss("#products").Text = numResults
Set html = New HTMLDocument
html.body.innerHTML = .PageSource
Set data = html.getElementsByClassName("data")
For Each item In data
r = r + 1: c = 1
For Each div In item.getElementsByTagName("div")
With ThisWorkbook.Worksheets("Loiça")
.Cells(r, c) = div.innerText
End With
c = c + 1
Next
Next
.Quit
End With
End Sub