Dear Icarus, your problem actually starts well before.
The line IE.document.getElementsByTagName("button") 'aciono o botão pesquisar
does absolutely nothing. It neither calls any method, nor instantiates the button on a variable, nor triggers the search button -- including because IE.document.getElementsByTagName("button")
returns a collection of buttons, not a single button. "Peesquisar" button is the 4th of the collection (index 3).
Therefore, to click the search button, you would need to replace the above statement by IE.document.getElementsByTagName("button")(3).Click 'aciono o botão pesquisar
Also, by going to the part you have already highlighted at the end of the code, you are currently clicking on the HTML table cell that contains the link (TD
). This really does not produce any result. You want, yes, click on the link (A
) that is inside the cell.
EDITION: I entered the request part, which you asked for in the comments.
So your final code would look like this:
Sub busca_desc()
Dim ie As InternetExplorer
Dim tbody As HTMLTableSection
Dim req As New XMLHTTP60
Dim respostaJson As String, numOportunidade As String
Dim i As Variant
Range("B3:G3").ClearContents 'limpo o range
numOportunidade = "7003383741" ' Na verdade, toda essa função estará dentro de uma iteração das células com os números de oportunidade que você quer consultar. Aqui, coloquei um valor fixo, mas você provavelmente apontara para o calor contido na célula atual da iteração
Set ie = New InternetExplorer 'crio o objeto IE
ie.navigate "https://www.petronect.com.br/irj/go/km/docs/pccshrcontent/Site%20Content%20(Legacy)/Portal2018/pt/lista_licitacoes_publicadas_ft.html" 'Url do site
ie.Visible = True
Do While ie.Busy And ie.readyState <> "READYSTATE_COMPLETE" ' aguardar a página carregar
DoEvents
Loop
ie.document.getElementsByTagName("input")(3).Value = numOportunidade ' insiro o valor no campo para pesquisa
ie.document.getElementsByTagName("button")(3).Click 'aciono o botão pesquisar
Application.Wait (Now + #12:00:02 AM#)
Do While ie.Busy And ie.readyState <> "READYSTATE_COMPLETE" ' aguardar a página carregar
DoEvents
Loop
Set tbody = ie.document.getElementById("result")
' Aqui provavelmente você vai querer colocar uma estrutura de loop, algo como:
For Each i In tbody.getElementsByTagName("a")
req.Open "GET", "https://www.petronect.com.br/sap/opu/odata/SAP/YPCON_GET_HEADER_INFO_SRV/headerInfoSet('" & numOportunidade & "')?$format=json"
req.send corpoReq
respostaJson = req.responseText
respostaJson = Replace(respostaJson, "\""", """") ' As aspas externas são, no VB, o que delimita uma string. As aspas duplicadas dentro da string são a forma de o VB entender que não se trata da aspa-fim-da-string, e sim de uma aspa dentro do texto da string. Portanto, o que estamos fazendo aí é substituir '\"' por '"'.
' Nesse momento, respostaJson conterá um texto bem longo, e a parte dele que importa para você é algo como:
'"START_DATE":"2020-11-30","START_TIME":"10:00:00","QUOT_DEAD":"2021-02-19","QUOT_DEAD_TIME":"14:00:00","CREATED_AT_DATE":"2020-11-27","CREATED_AT_TIME":"17:19:50","TZONE":"Brasil - Distrito Federal","CURRENCY":"BRL","YPCON_MODALITY":"101","YPCON_MODALITY_NAME":"Licitação, Lei 13.303, Art. 28, CAPUT","PUBL_DOU_DATE":"2020-11-30","DISPUTE_MODE":"02","YPCON_OBJ_CONT_DESC":"Serviço de conceituação, planejamento, criação, manutenção de ambientes digitais que compõem a presença digital da PETROBRAS."
' Prontinho! Agora você vai parsear esse texto, buscando as variáveis que te interessarem.
Next i
'ie.Quit
'Range("A3:g3").WrapText = False
End Sub
P.S.: To enable the classes InternetExplorer
, HTMLTableSection
and others, you need to go to Tools -> References and select the Microsoft HTML Object Library option.
EDITION: To enable the XMLHTTP60 class, you will need to make another reference, this time to "Microsoft XML, v. #.0" (mine is 6.0).
Dear Icarus, I suggest you format the code as a code block (just add four spaces before each line). Also, explain what the mistake is.
– César Rodriguez