Vídeo recomendado
https://youtu.be/diWPPPhW-9E

AJUDA SELENIUM + VBA - FindElementsByTag [RESOLVIDO]

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.
vba_jp2000
Acabou de chegar
Acabou de chegar
Mensagens: 6
Registrado em: Seg Jul 13, 2020 7:01 pm

AJUDA SELENIUM + VBA - FindElementsByTag [RESOLVIDO]

Mensagem por vba_jp2000 »

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
codigo pagina.jpg (115.27 KiB) Exibido 8103 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:

Código: Selecionar todos

For Each div In doc.getElementById("divDocumentos").getElementsByTagName("div")
                    If InStr(div.innerHTML, "Documento Principal") > 0 Then
                        Cells(linha + 4, 12) = Replace(Trim(Mid(div.getElementsByTagName("div")(0).innerText, 6)), Chr(10), "")
                        Cells(linha + 4, 13) = Replace(Trim(Mid(div.getElementsByTagName("div")(1).innerText, 7)), Chr(10), "")
                        Cells(linha + 4, 14) = Replace(Trim(Mid(div.getElementsByTagName("div")(2).innerText, 11)), Chr(10), "")
                        Cells(linha + 4, 15) = Replace(Trim(Mid(div.getElementsByTagName("div")(3).innerText, 9)), Chr(10), "")
                        Exit For
                    End If
                Next
Como fazer esse mesmo código no selenium?


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Raygsson
Manda bem
Manda bem
Mensagens: 118
Registrado em: Sex Jan 31, 2020 8:06 pm

Re: AJUDA SELENIUM + VBA - FindElementsByTag

Mensagem por Raygsson »

No exemplo estava fazendo um loop nas classes que contém "results-item".
Algo neste sentido deve resolver

Código: Selecionar todos

			     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


vba_jp2000
Acabou de chegar
Acabou de chegar
Mensagens: 6
Registrado em: Seg Jul 13, 2020 7:01 pm

Re: AJUDA SELENIUM + VBA - FindElementsByTag

Mensagem por vba_jp2000 »

codigo.jpg
codigo.jpg (169.41 KiB) Exibido 7908 vezes
Muito Obrigado!

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.


Raygsson
Manda bem
Manda bem
Mensagens: 118
Registrado em: Sex Jan 31, 2020 8:06 pm

Re: AJUDA SELENIUM + VBA - FindElementsByTag

Mensagem por Raygsson »

O "title" está na Tag "img", tenta fazer um loop nessas Tags.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


vba_jp2000
Acabou de chegar
Acabou de chegar
Mensagens: 6
Registrado em: Seg Jul 13, 2020 7:01 pm

Re: AJUDA SELENIUM + VBA - FindElementsByTag

Mensagem por vba_jp2000 »

tentei fazer o loop com "img" de duas formas mas não consegui. descrição no comentário do código.

Código: Selecionar todos

                '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.
codigo.jpg
codigo.jpg (104.32 KiB) Exibido 7872 vezes


Raygsson
Manda bem
Manda bem
Mensagens: 118
Registrado em: Sex Jan 31, 2020 8:06 pm

Re: AJUDA SELENIUM + VBA - FindElementsByTag

Mensagem por Raygsson »

é mais facil do que voce esta pensando, olha este exemplo prático que fiz capturando o endereço de uma "img" com "title" neste topico do forum:
Anexos
img2.JPG
img2.JPG (97.33 KiB) Exibido 7800 vezes
img.JPG
img.JPG (46.16 KiB) Exibido 7802 vezes


vba_jp2000
Acabou de chegar
Acabou de chegar
Mensagens: 6
Registrado em: Seg Jul 13, 2020 7:01 pm

Re: AJUDA SELENIUM + VBA - FindElementsByTag

Mensagem por vba_jp2000 »

Estava fazendo outra atividade, testei hoje com uma adaptação em sua dica e deu certo. Muito obrigado.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder