Página 1 de 1

Selenium Basic VBA - Obter dados de uma tabela com varias páginas com XPath e inserir os dados na planilha

Enviado: Seg Out 23, 2017 10:19 pm
por ednaldosdl
Bom noite, galera
primeiramente gostaria de parabenizá-los e agradecer por partilhar essas ideias incríveis do Selenium vba e todas as outras. sem mais delongas, Tentei usar a duvida do nosso amigo leandrosantto com o seguinte tópico que encontra-se resolvido. Titulo:[RESOLVIDO] Pequisa de preço Selenium Basic VBA.
Fiz todos os passos do vídeo que o Tomas Vasquez postou para sanar a duvida do nosso amigo sitado a cima e ocorreu tudo certo, porem o site que estou tentando obter os dados a tabela tem varias paginas e só obtêm os dados da primeira pagina e só mostrar os dados na Msgbox. só que eu gostaria de inserir para uma célula da planilha no lugar de mostrar na Msgbox, como eu poderia fazer isso?

segue abaixo o código que tentei:

Obs: Os dados que preciso está na tabela chamada cruzamento do site sitado abaixo como exemplo. Espero que todos consiga entender minha explicação para tentar sanar minhas duvidas

Dim driver As webdriver
Sub ExtrairTabelaDaPagina()

Set driver = New ChromeDriver
driver.Get "http://www.loteriacomj.com.br/loto/mega ... a-sena.php"
Dim tabela As WebElement
Set tabela = driver.FindElementByXPath("//*[@id=""id-tabela-cruzamento""]")

As formas que obtive exito. São as duas primeiras.
1.:
MsgBox tabela.Text 'Funcionou perfeitamente (Só que obtive os dados de apenas uma pagina)
------------------------------------------------------------------------------------------

2.:
If tabela Is Nothing Then
MsgBox "Elemento não encontrado"
Else
MsgBox "Elemento encontrado!" 'Funcionou perfeitamente

------------------------------------------------------------------------------------------

As formas que tentei inserir os dados na planilha, mas não obtive exito.

destino.Value = Worksheets("Cruzamento").Cell("A1") 'Tentativa sem exito
Destination = Sheets("Cruzamento").Range("A1") 'Tentativa sem exito (Não aconteceu nada)
Destination = Worksheets("Cruzamento").Range("A1") 'Tentativa sem exito (Não aconteceu nada)
Destination = sht_Cruzamento.Range("A1") 'Tentativa sem exito (Não aconteceu nada)

End If

driver.Quit
MsgBox "Dados transferido com sucesso!"
End Sub

Re: Selenium Basic VBA - Obter dados de uma tabela com varias páginas com XPath e inserir os dados na planilha

Enviado: Ter Out 31, 2017 7:31 am
por Mikel Silveira Fraga
Ednaldo, bom dia.

Cara, veja se esse post do Tomás no Blog, não lhe auxilia nessa tarefa:
- EXTRAINDO TABELAS DE PÁGINAS WEB COM O SELENIUM BASIC (Tomás Blog)

Maiores dúvidas, a disposição.

Re: Selenium Basic VBA - Obter dados de uma tabela com varias páginas com XPath e inserir os dados na planilha

Enviado: Qui Nov 30, 2017 2:45 pm
por Cabelo175
Boa tarde Mikel,

Para não criar outro tópico falando sobre o mesmo assunto vou aproveitar esse.
Preciso de uma ajuda por favor, pois usei o código do Tomas na minha aplicação web, onde retiro informações por CNPJ de cada cliente que tenho, porém ao fazer loop o campo destino sempre mantem o mesmo.
Set destino = ThisWorkbook.Worksheets("Plan2").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)

Precisava que sempre que for recomeçar o loop, o destino seja alterado para primeira celula vazia da coluna A.
Existe alguma forma de fazer isso?

Re: Selenium Basic VBA - Obter dados de uma tabela com varias páginas com XPath e inserir os dados na planilha

Enviado: Qui Nov 30, 2017 9:44 pm
por Mikel Silveira Fraga
Cabelo, boa noite e seja bem vindo ao fórum.

Cara, não sei se entendi direito, mas você em um loop e quer que toda vez que se iniciar, irá Setar o objeto destino com a última célula vazia.

Confesso que não gosto de utilizar o comando Offset, como ocorre no seu código, mas poderia ser feito algo um pouco diferente. Segue uma sugestão parecida com o que você planeja:

Código: Selecionar todos

Set destino = ThisWorkbook.Worksheets("Plan2").Cells(Rows.Count + 1, "A")
A cada vez que uma linha for preenchida e um novo loop for iniciado, o objeto destino assumirá a última célula preenchida.

Mesmo objetivo do seu comando, mas uma lógica diferente.

Caso não dê certo, tente compartilhar sua planilha ou mande o código completo do que esta tentando fazer.

Fico no aguardo. Abraços!!!!

Re: Selenium Basic VBA - Obter dados de uma tabela com varias páginas com XPath e inserir os dados na planilha

Enviado: Sex Dez 01, 2017 9:00 am
por Cabelo175
Bom dia Mikel,

obrigado pela resposta...
Tentei usar o código que me informou porém deu Erro de definição de aplicativo ou definição de objeto. Estou disponibilizando a planilha, porém como é acesso ao e-CAC, utilizei certificado de um procurador e autoit para automatizar a escolha do certificado. O arquivo (Certificado Ecac.exe) seleciona o segundo certificado da lista.

OBS. O código começa a ser executado e o destino encontra a primeira celula vazia e continua até salvar a tabela na Plan2, quando ele inicia o loop novamente, a variável destino não muda o valor e salva a segunda tabela por cima da primeira.
Teste ecac.zip
Teste e-CAC
(18.67 KiB) Baixado 495 vezes

Re: Selenium Basic VBA - Obter dados de uma tabela com varias páginas com XPath e inserir os dados na planilha

Enviado: Sáb Dez 02, 2017 11:52 am
por Mikel Silveira Fraga
Cabelo, boa tarde.

Cara, dei uma olhada no seu código e, mesmo sem conseguir testar, acho que as modificações abaixo podem lhe ajudar.

Faça o seguinte, mude a posição da linha abaixo:

Código: Selecionar todos

    Set destino = ThisWorkbook.Worksheets("Plan2").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
Para o seguinte local:

Código: Selecionar todos

    Set destino = ThisWorkbook.Worksheets("Plan2").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
    tabela.AsTable.ToExcel destino
    Set destino = Nothing 'Adicione essa linha, para limpar a variável da memória.
Acredito que essa alteração deva resolver seu problema.

Teste e nos retorne o resultado.

Abraços e excelente final de semana.

Re: Selenium Basic VBA - Obter dados de uma tabela com varias páginas com XPath e inserir os dados na planilha

Enviado: Seg Dez 04, 2017 7:18 am
por Cabelo175
Bom dia Mikel,

Muito obrigado pela ajuda...
o código funcionou perfeitamente, era exatamente isso que estava precisando.

obrigado mesmo.

Re: Selenium Basic VBA - Obter dados de uma tabela com varias páginas com XPath e inserir os dados na planilha

Enviado: Qui Mai 09, 2019 9:12 pm
por fnpereira
Olá amigos !!!
Tenho lido muitos topicos aqui neste forum sobre o selenium vba e tenho aprendido muito!
Porém estou tendo dificuldades em obter dados de uma tabela e copiar estes dados para o Excel.
Já consegui realizar o acesso ao site e aplicar todos os filtros para gerar a tabela, mas já fiz inúmeras tentativas de pegar estes dados e sem sucesso. Peço ajuda para concluir este processo. segue abaixo codigo vba desenvolvido. Já agradeço todo conhecimento que obtive neste forum.


Public Sub EBEC()
Dim selenium As New SeleniumWrapper.WebDriver
selenium.addArgument ("--headless")
selenium.Start "chrome", "http://centraldetransporte.ebec-sa.com.br/"

Dim destino As Range
Dim tabela As WebElement

selenium.Open "/autenticacao"
selenium.Wait 20000
selenium.findElementById("login").Click
selenium.findElementById("login").Clear
selenium.findElementById("login").SendKeys "******"
selenium.findElementById("password").Click
selenium.findElementById("password").Clear
selenium.findElementById("password").SendKeys "****"
selenium.findElementByXPath("//button[@type='submit']").Click
selenium.Wait 15000
selenium.Select "id=time", "label=Não filtrar"
selenium.Click "id=status"
selenium.Click "xpath=(//button[@type='button'])[3]"
selenium.Click "xpath=(//button[@type='button'])[4]"
selenium.Click "xpath=(//button[@type='button'])[7]"
selenium.Click "//button[@type='submit']"
selenium.Select "name=rows", "label=100"
selenium.Wait 7000

Set tabela = selenium.findElementByXPath("//div[2]/table") --->tabela encontrada com Selenium IDE 2.91

Set destino = Range("A1")

If tabela Is Nothing Then
MsgBox "Elemento não Encontrato"
Else
MsgBox "Tabela Encontrada"
tabela.AsTable.ToExcel destino
End If

selenium.stop

End Sub