Здравствуйте, после восстановления сайта парсер перестал работать. Помогите пожалуйста. Файл на гул-диске и на яндекс-диске(размер файла больше допустимого).
Кусок сода
Код
Option Explicit
'http://lavka.pochaev.org.ua/ 'старый адресс(ЗАБЛОКИРОВАН!)
Const myLink As String = "https://lavka.pochaevlavra.org/"
Sub UpdatePrise()
Dim xmlRequest As New MSXML2.XMLHTTP60, htmlDocument As New MSHTML.htmlDocument
Dim CatalogBookList As MSHTML.IHTMLElement
Dim CatalogBooks As MSHTML.IHTMLElementCollection
Dim CatalogBook As MSHTML.IHTMLElement
Dim CatalogBookID As Integer
Dim NextHref As String, NextURL As String
Dim t As Date
Call A_RemoveOldPrice4
t = Now
xmlRequest.Open "GET", myLink, False
'ЗАГОЛОВКИ пишутся между коммандами OPEN и SEND
xmlRequest.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0"
xmlRequest.setRequestHeader "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"
xmlRequest.setRequestHeader "Accept-Encoding", "gzip, deflate"
xmlRequest.setRequestHeader "Content-Type", "text/html; charset=WINDOWS-1251"
xmlRequest.send
If xmlRequest.Status <> 200 Then
MsgBox "Some error" & vbCrLf & "or no connection!" & _
vbCrLf & "xmlRequest.Status is " & xmlRequest.Status
Exit Sub
End If
Application.ScreenUpdating = False
' Application.EnableEvents = False
htmlDocument.body.innerHTML = xmlRequest.responseText
Set xmlRequest = Nothing
Set CatalogBookList = htmlDocument.getElementsByClassName("list-group")(1)
Set CatalogBooks = CatalogBookList.getElementsByTagName("a")
frmUpDatePoces.Show 0
' Debug.Print CatalogBooks.Length
For CatalogBookID = 0 To 62 Step 2 'CatalogBooks.Length - 1
DoEvents
frmUpDatePoces.Caption = "Progress of updating... " & Format(Now - t, "hh:mm:ss")
frmUpDatePoces.Repaint
frmUpDatePoces.lblGreen.Width = 200 / 100 * Int(CatalogBookID / 62 * 100)
frmUpDatePoces.lblGreen.Caption = Int(CatalogBookID / 62 * 100) & "%"
Set CatalogBook = CatalogBooks(CatalogBookID)
If Not CatalogBook Is Nothing Then '===============================
NextHref = CatalogBook.getAttribute("href")
NextURL = myLink & Mid(NextHref, 8)
' Debug.Print NextURL 'CatalogBook.innerText,
Call GetOneCatalog(NextURL)
End If
Next CatalogBookID
Range("A2").CurrentRegion.WrapText = False
Call PreparePriceList
Unload frmUpDatePoces
' Application.EnableEvents = True
'MsgBox "Готово! " & Format(Now - t, "hh:mm:ss") ' & Format(Now - t, "ss")
End Sub
UPD: Игорь, спасибо большое за помощь, но в процессе выскочила другая ошибка, завтра поиграюсь попробую решить задачу самостоятельно.
Изменено: DANIKOLA - 29.03.2022 21:56:51(Добавлен ответ Игорю)
Для этого сайта нужно считывать не ResponseText из ответа сайта, а .ResponseBody (и обрабатывать его)
Вам поможет дополнительная функция:
Код
Function GetResponse(ByRef BytesArr, ByVal Encoding$) As String
On Error Resume Next
Dim ResponseFilename$
Set ADODBStream = CreateObject("ADODB.Stream")
With ADODBStream
ResponseFilename$ = Environ("tmp") & "\response.txt"
If Len(Encoding$) Then .Charset = Encoding$
.Type = 1 ' adTypeBinary:
.Open: .Write BytesArr
.SaveToFile ResponseFilename$, 2
.Type = 2 'adTypeText
.LoadFromFile ResponseFilename$
GetResponse = .ReadText
.Close
Kill ResponseFilename$
End With
Set ADODBStream = Nothing
End Function
Игорь, спасибо еще раз за помощь, все получилось, изменил только кодировку на WINDOWS-1251(с utf-8 не работало), так-как с сайта ответ приходил именно в этой кодировке, смотрел заголовки.