A Web está aí, não há como negar. Ela é onipresente em praticamente toda operação eletrônica realizada nos dias de hoje. Como não podia ser diferente, o Excel, ferramenta máxima para analistas e profissionais das mais diversas áreas do mercado precisa estar alinhado com esta necesssidade. E ele está! Neste forum, o debate é focado em expor dúvidas, sugestões, modelos de código e exemplos de uso do Excel na Integração com tecnologias Web.
Tenho que buscar dados de um site. Mas as informações que preciso ficam dentro de uma div filho da div pai "divdocumentos". O problemas que de acordo com a informação enviada para o formulário a quantidade de filhos é diferente. A única identificação que tenho é uma imagem que fica na div filho que preciso da informação e ela é dinâmica, as vezes é a primeira, a segunda, ou até mais dependendo da quantidade de documentos cadastrados, o id das tags também sempre mudam. Como fazer para percorrer as Tags até encontrar a referida div (da imagem) e pegar os dados para uma planilha do excel. Abaixo o código da pagina (nesse caso está na terceira div)
codigo pagina.jpg (115.27 KiB) Exibido 8230 vezes
Eu tinha uma macro que pegava essas informações usando o IE mas o sistema não funciona mais nesse navegador por isso estou migrando para o selenium. O código era o seguinte:
Dim Produtos As WebElements
Set Produtos = Firefox.FindElementsByXPath("//*[contains(@Class,'results-item')]")
For Each Produto In Produtos
If Produto.FindElementByClass("main-title").Text = "descricão" Then
Plan1.Cells(lin, "A") = Produto.FindElementByClass("main-title").Text
Plan1.Cells(lin, "B") = Produto.FindElementByTag("a").Attribute("href")
Exit for
End If
Next
Consegui evoluir. O For Each está passando pelas 16 "div" que tem nesse exemplo. Só que não consigo fazer ele parar na que tem a imagem com title "Documento Principal" e a partir dai pegar os dados das 4 div seguintes. Como faço localizar a imagem com esse titulo? Lembrando que a quantidade de div modifica de acordo com o numero de documentos cadastrados. Os Ids sempre são gerados com numeros diferentes.
'captura documentos
Dim docs As WebElements
Set docs = driver.FindElementById("divDocumentos").FindElementsByTag("div")
Debug.Print docs.Count
For Each doc In docs
' //*[@id="j_idt429"]/div[1]/img xpath do elemento
'If doc.FindElementByXPath("// img ").Attribute(Title) = "Documento Principal" Then (pecorre as 16 div mas não localiza o título)
If doc.FindElementByTag("img").Attribute(Title) = "Documento Principal" Then '(por tag erro não encontra o elemento)
Cells(linha + 4, 13) = Replace(Trim(Mid(doc.FindElementByTag("div")(1).Text, 6)), Chr(10), "")
Cells(linha + 4, 14) = Replace(Trim(Mid(doc.FindElementByTag("div")(2).Text, 7)), Chr(10), "")
Cells(linha + 4, 15) = Replace(Trim(Mid(doc.FindElementByTag("div")(3).Text, 11)), Chr(10), "")
Cells(linha + 4, 16) = Replace(Trim(Mid(doc.FindElementByTag("div")(4).Text, 9)), Chr(10), "")
Exit For
End If
Next
outra imagem com a estrutura da página. Pode ver que a cada consulta o id em vermelho muda (o inicio é sempre igual "j_idt". Nesse exemplo o cpf possui 4 documentos (as vezes mais ou menos). Preciso pegar os dados do documento principal (As setas em azul) A unica coisa que identifica é essa imagem que fica no inicio da cadeia do documento (seta verde). Confesso que não tenho mais nem ideia de como fazer. Se algum puder me ajudar nesse código agradeço muito.