ATENÇÃO NOVOS USUÁRIOS

Se registrou recentemente? Seu cadastro será avaliado e mendiante aprovação, a conta será ativada e você poderá usufruir do fórum. O tempo de avaliação gira em torno de 24 a 48 horas.

Esqueceu sua senha?

Você pode usar o mecanismo de lembrete neste link: Recuperar senha

Você receberá um link de reativação no email cadastrado.

Não recebeu o email? Lembre-se checar o Lixo Eletrônico.

AJUDA SELENIUM + VBA - FindElementsByTag

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: 4
Registrado em: Seg Jul 13, 2020 7:01 pm

AJUDA SELENIUM + VBA - FindElementsByTag

Mensagem por vba_jp2000 » Qui Jul 16, 2020 5:42 pm

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 2796 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
Colaborador
Colaborador
Mensagens: 59
Registrado em: Sex Jan 31, 2020 8:06 pm

Re: AJUDA SELENIUM + VBA - FindElementsByTag

Mensagem por Raygsson » Qui Jul 16, 2020 6:33 pm

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: 4
Registrado em: Seg Jul 13, 2020 7:01 pm

Re: AJUDA SELENIUM + VBA - FindElementsByTag

Mensagem por vba_jp2000 » Sex Jul 17, 2020 1:35 pm

codigo.jpg
codigo.jpg (169.41 KiB) Exibido 2601 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
Colaborador
Colaborador
Mensagens: 59
Registrado em: Sex Jan 31, 2020 8:06 pm

Re: AJUDA SELENIUM + VBA - FindElementsByTag

Mensagem por Raygsson » Sex Jul 17, 2020 1:50 pm

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: 4
Registrado em: Seg Jul 13, 2020 7:01 pm

Re: AJUDA SELENIUM + VBA - FindElementsByTag

Mensagem por vba_jp2000 » Sex Jul 17, 2020 6:29 pm

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 2565 vezes



Raygsson
Colaborador
Colaborador
Mensagens: 59
Registrado em: Sex Jan 31, 2020 8:06 pm

Re: AJUDA SELENIUM + VBA - FindElementsByTag

Mensagem por Raygsson » Sex Jul 17, 2020 7:23 pm

é 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 2493 vezes
img.JPG
img.JPG (46.16 KiB) Exibido 2495 vezes



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

Re: AJUDA SELENIUM + VBA - FindElementsByTag

Mensagem por vba_jp2000 » Qui Jul 23, 2020 10:40 am

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