Página 1 de 1

AJUDA SELENIUM + VBA - FindElementsByTag [RESOLVIDO]

Enviado: Qui Jul 16, 2020 5:42 pm
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 8229 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?

Re: AJUDA SELENIUM + VBA - FindElementsByTag

Enviado: Qui Jul 16, 2020 6:33 pm
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

Re: AJUDA SELENIUM + VBA - FindElementsByTag

Enviado: Sex Jul 17, 2020 1:35 pm
por vba_jp2000
codigo.jpg
codigo.jpg (169.41 KiB) Exibido 8034 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.

Re: AJUDA SELENIUM + VBA - FindElementsByTag

Enviado: Sex Jul 17, 2020 1:50 pm
por Raygsson
O "title" está na Tag "img", tenta fazer um loop nessas Tags.

Re: AJUDA SELENIUM + VBA - FindElementsByTag

Enviado: Sex Jul 17, 2020 6:29 pm
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 7998 vezes

Re: AJUDA SELENIUM + VBA - FindElementsByTag

Enviado: Sex Jul 17, 2020 7:23 pm
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:

Re: AJUDA SELENIUM + VBA - FindElementsByTag

Enviado: Qui Jul 23, 2020 10:40 am
por vba_jp2000
Estava fazendo outra atividade, testei hoje com uma adaptação em sua dica e deu certo. Muito obrigado.