По данной ссылке пытаюсь получить стоимость товара ($99.97). Т.к сначала необходимо дождаться срабатывания всех скриптов, то делаю это через IE. Однако, несмотря на
Код
While ie.ReadyState <> 4
DoEvents
Wend
Страница все равно не успевает прогрузиться (как мне кажется) и получается, что невозможно вытянуть цену. Весь код предельно прост:
Код
Sub ImportData()
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
sURL = "https://www.walmart.ca/en/ip/coffee-table-rustic-oak/6000199108427"
ie.Navigate sURL
While ie.ReadyState <> 4
DoEvents
Wend
Strh = ie.Document.body.innerText
Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.Global = True
objRegExp.Pattern = "(<span class=""css-2vqe5n esdkp3p0"".*?>)(.*?)(</span>)"
If objRegExp.Execute(Strh).Count <> 0 Then
MsgBox objRegExp.Execute(Strh).Item(0).submatches.Item(1)
End If
End Sub
В принципе там есть POST-запрос на прайс можно через него тянуть. Проверил некоторые коды, но надо тестировать.
Код
Sub PictureInternet()
Dim XMLHTTP As Object
Dim Myurl$, Txt$, Artikul$
Artikul = "6000198185490"
Myurl = "https://www.walmart.ca/api/product-page/price-offer"
Set XMLHTTP = CreateObject("MSXML2.XMLHTTP")
XMLHTTP.Open "POST", Myurl, False
XMLHTTP.send "{""availabilityStoreId"":""3124"",""fsa"":""P7B"",""experience"":""whiteGM"",""products"":[{""productId"":""" & Artikul & """,""skuIds"":[""" & Mid(Artikul, 1, Len(Artikul) - 1) & CInt(Right(Artikul, 1)) + 1 & """]}],""lang"":""en""}"
If XMLHTTP.Status = 200 Then
Txt = XMLHTTP.responseText
Debug.Print Txt
Else
MsgBox "Отсутствует соединение..."
End If
Set XMLHTTP = Nothing
End Sub
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок. А в том, чтобы писать программы, работающие при любом количестве ошибок.
Sub ImportData()
Dim s As String
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
sURL = "https://www.walmart.ca/en/ip/coffee-table-rustic-oak/6000199108427"
IE.Navigate sURL
Application.Wait (Now() + TimeValue("00:00:05"))
t = IE.document.body.innerHTML
Dim REGEXP As Object
Set REGEXP = CreateObject("VBScript.RegExp")
REGEXP.IgnoreCase = True
REGEXP.Global = False
REGEXP.MultiLine = True
REGEXP.Pattern = "\$[\d.]*"
If REGEXP.test(t) Then
Cells(1, 1) = REGEXP.Execute(t)(0)
End If
End Sub