Вопрос 1: Почему это работает для одного домена, а не для другого?
Чтобы ответить на вопрос 1 (другие вопросы должны быть новыми сообщениями) - HTML не то же самоесовсем.Классы, которые работают для ebay.com, не найдены в ebay.co.uk;Итак, ваш цикл по коллекциям ничего не делает, потому что они имеют длину 0. Вместо этого вам нужен разветвленный код.Установите ваши селекторы на основе домена url.
Я использовал селекторы css, так как это самый простой и быстрый способ выбора необходимых элементов при сохранении гибкости перефакторинга кода для уменьшения количества строк.повторный код.
Примечание:
Если вы не уверены, будет ли ваш метод выбора работать на разных страницах, вы можете сделать по крайней мере две вещи:
Щелкните правой кнопкой мыши> осмотреть элемент> визуально проверить, совпадают ли имена классов для элементов, которые вы пытаетесь сравнить.Итак, если вы смотрите на названия продуктов, одинаковые ли имена классов в html на обеих страницах?
Вы можете использовать средство поиска браузера> вкладка открытых элементов через F12 , затем нажмите Ctrl + F , чтобы открыть окно поиска> введите имя своего класса с первой страницы в это поле на второй странице и нажмите Enter.Вы также можете ввести селекторы CSS здесь и в некоторых случаях регулярное выражение.Вы получите счетчик совпадений, сообщающий вам, сколько совпадений найдено.Вы можете продолжать нажимать клавишу ввода, чтобы циклически проходить матчи, и каждый матч будет выделен в HTML-коде выше, так что вы можете легко сравнить, соответствуют ли результаты ожидаемым.
нажмите на изображение, чтобы увеличить его
![enter image description here](https://i.stack.imgur.com/MWkEx.png)
img url: https://i.stack.imgur.com/MWkEx.png
VBA:
Option Explicit
Public Sub GetData()
Dim htmlDoc As MSHTML.HTMLDocument, ie As SHDocVw.InternetExplorer, ws As Worksheet
Set ie = New SHDocVw.InternetExplorer
Set htmlDoc = New MSHTML.HTMLDocument
Set ws = ThisWorkbook.Worksheets("Sheet1")
With ie
.Visible = True
'.Navigate2 "https://www.ebay.co.uk/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=jackets&_sacat=0"
.Navigate2 "https://www.ebay.com/sch/i.html_from=R40&_nkw=ralph+lauren&_sacat=1059&LH_TitleDesc=0&_dmd=1&rt=nc"
While .Busy Or .readyState <> 4: DoEvents: Wend
Dim index As Long, HTMLItems As Object, rowNum As Long, xCell As Range
Dim cssSelectors(), i As Long
Select Case True
Case InStr(.document.URL, "ebay.co.uk") > 0
cssSelectors = Array(".gvtitle a", ".amt", ".gvtitle a")
Case InStr(.document.URL, "ebay.com") > 0
cssSelectors = Array(".s-item__title", ".s-item__price", ".s-item__link")
End Select
With ws
For i = LBound(cssSelectors) To UBound(cssSelectors)
rowNum = 1
Set HTMLItems = ie.document.querySelectorAll(cssSelectors(i))
For index = 0 To HTMLItems.length - 1
.Cells(rowNum, i + 1).Value = IIf(i = 2, HTMLItems.item(index).getAttribute("href"), HTMLItems.item(index).innerText)
rowNum = rowNum + 1
Next
Next
For Each xCell In .Range("C1:C25000") '<= all these really?
.Hyperlinks.Add Anchor:=xCell, Address:=xCell.Formula
Next xCell
End With
.Quit
End With
End Sub