Meu conhecimento em linguagem de programação é bem básico e tudo o que fiz até agora foi lendo o forum.
Tenho uma planilha que preenche um ficha e os dados dessa ficha é retirado de um site da intranet.
Devido a grandes erros de digitação a solução seria coletar esses dados automaticamente.
Então, seguindo os passos eu fiz assim:
Peguei o nome dos elementos contido no site:
Código: Selecionar todos
<td class="ParamLabelCell"><label for="ReportViewerControl_ctl04_ctl03_txtValue"><span>Lançamento</span></label></td>
<td class="ParamEntryCell" style="padding-right: 0px;">
<div id="ReportViewerControl_ctl04_ctl03" data-parametername="order"> <input name="ReportViewerControl$ctl04$ctl03$txtValue" class="null" id="ReportViewerControl_ctl04_ctl03_txtValue" type="text" size="30" value="">
</div>
</td>
Código: Selecionar todos
Sub BuscaDados()
Dim IE As Object
Dim iLin As Long
Dim sTabela As String
Dim Lanc As String
Dim Fase As String
iLin = 2
'referenciando a célula que eu vou pegar os dados
Lance = Range("A1").Value
Fase = Range("A2").Value
'acessando o site
Set IE = CreateObject("internetexplorer.application")
IE.Visible = false
IE.navigate "http://br001vs01081/Report/Pages/ReportViewer.aspx?%2fSC%2fACU%2fFAB%2fTechnical_Data&rs:Command=Render"
Do Until IE.readyState = READYSTATE_COMPLETE
Loop
'preenchendo os campos do site com os valores das células
IE.document.all("ReportViewerControl$ctl04$ctl03$txtValue").innerText = Lance
IE.document.all("ReportViewerControl$ctl04$ctl05$txtValue").innerText = Fase
IE.document.all("ReportViewerControl_ctl04_ctl00").form.all("ReportViewerControl_ctl04_ctl00").Click
Até essa parte tudo ok!
Coleta as informações digitada na planilha e envia para o site.
Agora vem a parte complicada que não estou conseguindo.
Inspecionando o elemento que foi dado o resultado eis que eu tenho:
Código: Selecionar todos
<tr valign="top">
'Primeiro elemento com o resultado que eu quero que é nesse caso (ST15253418)
<td class="Ab5f8c21a956e4f86accf3fbbc45669fc353c" style="height: 12mm;">
<div style="width: 30.24mm; overflow: hidden; min-width: 30.24mm;">
<div class="Pc4f57b4673144034b0d9648d1fb3cf85_1_r17 tdResizable" lang="en-US" style="width: 100%; display: flex; -webkit-flex-flow: row;">
<div class="Ab5f8c21a956e4f86accf3fbbc45669fc353 cannotGrowTextBoxInTablix cannotShrinkTextBoxInTablix" id="Pc4f57b4673144034b0d9648d1fb3cf85_1_356iT0R0x0_aria" style="position: relative; max-width: 30.24mm; justify-content: flex-start; -webkit-justify-content: flex-start;">
<div style="width: 30.24mm; min-width: 30.24mm;">ST15253418</div>
</div>
</div>
</div>
</td>
'Segundo elemento que tem o resultado (SF53001E1)
<td class="Ab5f8c21a956e4f86accf3fbbc45669fc357c">
<div style="width: 30.24mm; overflow: hidden; min-width: 30.24mm;">
<div class="Pc4f57b4673144034b0d9648d1fb3cf85_1_r17 tdResizable" lang="en-US" style="width: 100%; display: flex; -webkit-flex-flow: row;">
<div class="Ab5f8c21a956e4f86accf3fbbc45669fc357 cannotGrowTextBoxInTablix cannotShrinkTextBoxInTablix" id="Pc4f57b4673144034b0d9648d1fb3cf85_1_360iT0R0x0_aria" style="position: relative; max-width: 30.24mm; justify-content: flex-start; -webkit-justify-content: flex-start;">
<div style="width: 30.24mm; min-width: 30.24mm;">SF53001E1</div>
</div>
</div>
</div>
</td>
Com esses dados em mãos eu fiz o seguinte:
Código: Selecionar todos
'buscando as informações no site
Set tabela = IE.document.all.tags("tr")
For i = 0 To tabela.Length - 1
sTabela = Replace(tabela.Item(i).innerText, Chr(10), "")
If Not IsNumeric(Left(sTabela, 1)) Then
If sTabela <> "" Then
Cells(iLin, "A").Value = sTabela
iLin = iLin + 1
End If
End If
Next
Tentei também:
Código: Selecionar todos
For Each htmlEle In ieObj.Document.getElementsByClassName("Afcb84803ac6f40feb09f4c14372db9b3111c")(0).getElementsByTagName("div")
With ActiveSheet
.rang("L" & i).Value = htmlEle.Children(0).textContent
.rang("M" & i).Value = htmlEle.Children(1).textContent
.rang("N" & i).Value = htmlEle.Children(2).textContent
.rang("O" & i).Value = htmlEle.Children(3).textContent
.rang("P" & i).Value = htmlEle.Children(4).textContent
.rang("Q" & i).Value = htmlEle.Children(5).textContent
End With
i = i + 1
Next htmlEle
End Sub
ai eu pergunto, onde eu estou errando?
Será que eu não consigo buscar os dados pq essa página contém frame? (eu acho)
quando uso um tipo de busca ele me apresenta o resultado dos nome dos elementos onde eu preencho o valor no inicio da página e não me mostra o resultado da busca e nem o que está preenchido na busca.
Alguem poderia me dar essa consultoria?
lembrando que até pensei em pesquisar para fazer em selenium, porém essa planilha será compartilhada aqui no trabalho e não tenho permissão de instalar nada na máquina.
Quem puder me ajudar eu agradeço
22-998565002 Gustavo.