1 (изменено: AleksP, 2023-03-19 21:16:08)

Тема: VBA: Доступ к элементу div страницы на html посредством VBA

Добрый день!

В html коде есть элемент div, к которому необходимо получить доступ посредством VBA


   <div id="tender-card-content">
                    <div id="report-script" class="tender-card-title">
                        <h1 class="tct-tender-number">
                            Закупка <span class="copy-script tender-number-copy">32312204305</span>
                        </h1>
                        <div class="tct-tender-text">[b]Содержимое, которое необходимо скопировать с html страницы через VBA[/b]</div>
...

Получается только через getElementsByTagName("div")(номер элемента).innerText, но номер элемента div может меняться динамически и такой вариант не подходит.
Привожу код, в котором попробовал разные варианты доступа с указанием сообщения о ошибке в комментариях.


Sub test()

sURL = "https://synapsenet.ru/zakupki/fz223/32312204305%231--sanktpeterburg-vipolnenie-rabot-po-obsledovaniyu-stroitelnih"

    Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP")
    With oXMLHTTP
        .Open "GET", sURL, False
        .send
        txt = .responseText
        
        Set pDoc = CreateObject("HTMLFile")
        pDoc.body.innerHTML = txt
   
       .Open "GET", sURL, False: .send
        getHTTP = StrConv(.responseBody, vbUnicode)
        
        MsgBox pDoc.getElementsByTagName("div")(номер элемента).innerText
        'Работает.'

        MsgBox getHTTP.getElementsByTagName("div")(номер элемента).innerText
        'Сообщение об ошибке Object required.'
        
        pDoc.getElementsByClassName ("tct-tender-text")
        'Сообщение об ошибке Object doesn't support this property or method.'
        
       getHTTP.getElementsByClassName ("tct-tender-text")
        'Сообщение об ошибке Object required.'
   
       pDoc.querySelectorAll ("tct-tender-text")
      'Сообщение об ошибке Object doesn't support this property or method.'
      
        getHTTP.querySelectorAll ("tct-tender-text")
        'Сообщение об ошибке Object required.'

    End With
    
    Set oXMLHTTP = Nothing

End Sub

Как нужно исправить код, чтобы получить доступ к нужному элементу?

2

Re: VBA: Доступ к элементу div страницы на html посредством VBA

AleksP, добро пожаловать на форум! Ознакомьтесь, пожалуйста, с Правилами, отредактируйте свой пост. Обратите внимание на оформление кода.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: Xameleon, 2023-03-28 11:51:17)

Re: VBA: Доступ к элементу div страницы на html посредством VBA

AleksP,


Dim sUrl, oHttpRequest, oDocument, oElement
sUrl = "https://synapsenet.ru/zakupki/fz223/32312204305%231--sanktpeterburg-vipolnenie-rabot-po-obsledovaniyu-stroitelnih"
Set oHttpRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
With oHttpRequest
	.Open "GET", sUrl, false
	.Send
	Set oDocument = CreateObject("htmlfile")
	With oDocument
		' Более безопасный парсинг тела документа
		.designMode = "on"
		.open
		.write oHttpRequest.ResponseText
		.close
	End With
	For Each oElement in oDocument.all.tags("div")
		If InStr(1,oElement.className,"tct-tender-text",vbTextCompare) > 0 Then
			MsgBox oElement.innerText
			Exit For
		End if
	Next
End With

Как альтернатива, если на машине точно установлен IE выше семёрки, можно инициализировать документ в режиме более высокой версии и тогда будут доступны методы querySelectorAll и getElementsByClassName

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !