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

Extrair Dados do Site de uma companhia aérea através do Selenium VBA

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.
EvertonJunio
Colaborador
Colaborador
Mensagens: 13
Registrado em: Sex Set 23, 2016 1:13 pm

Extrair Dados do Site de uma companhia aérea através do Selenium VBA

Mensagem por EvertonJunio »

Prezados, boa tarde.

Estou precisando criar uma macro para fazer a seguinte tarefa:
Entrar no site de uma companhia aérea (EX: Latam) e selecionar uma determinada rota (no caso CNF > CGH) informar a data do voo (ida e volta) e submeter a próxima página. Na próxima página, preciso extrair as informações da menor tarifa disponível, bem como informações de hora, numero do voo e etc. Além disso preciso salvar um print da tela para comprovar a menor tarifa.

Estou encontrando dificuldade em selecionar o destino e a origem, pois os sites das cia aéreas tem uma lista definida que deve ser selecionada, mesmo digitando o destino corretamente ele não aceita.
Além disso, não sei como extrair as informações do site, pois não está em formato de tabela.

Por favor, me ajudem.
Preciso muuito dessa macro funcionando.


Código VBA:

Código: Selecionar todos

Public Sub teste_TAM()
  Dim selenium As New SeleniumWrapper.WebDriver
  selenium.Start "chrome", "https://www.latam.com/"

  selenium.Open "/pt_br/"
  selenium.Click "//body[@id='cp-page']/header/div[2]/div[2]/div/div[2]/div/div[2]/button"

'<span class="highlight">Belo Horizonte (BHZ), Confins (CNF), Brasil</span>

  selenium.Click "id=compra-select-origin"
  selenium.Type "id=compra-select-origin", "Belo Horizonte (BHZ), Confins (CNF), Brasil"
  selenium.Click "css=span.highlight"
  selenium.Click "id=ui-id-15"
  selenium.submit "css=span.highlight"
  
  
  MsgBox ("id=compra-select-origin")
  selenium.Type "id=compra-select-destination", "São Paulo (SAO), Congonhas (CGH), Brasil"
  selenium.Click "id=compra-passenger-count-id"
  selenium.Click "id=compra-passenger-count-id"
  selenium.Click "id=compra-passenger-count-id"
  selenium.Click "css=span.input-group-btn.more > button.btn-more-less.NoFocusable"
  selenium.Click "css=button.btn-more-less.NoFocusable"
  
  selenium.Click "id=dp1474592878872"
  selenium.Click "link=28"
  
  selenium.Click "//button[@type='submit']"

MsgBox ("Teste")


' Tirar um PrintScreen da tela

' extrair os dados dos voôs disponíveis
'Preciso filtar apenas o voo de ida e volta mais baratos. Preciso somente da hora do voo, preço de ida e volta



 selenium.stop
End Sub


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.


Avatar do usuário
TARSA
Colaborador
Colaborador
Mensagens: 36
Registrado em: Dom Set 11, 2016 5:04 pm

Re: Extrair Dados do Site de uma companhia aérea através do Selenium VBA

Mensagem por TARSA »

Olá Everton, tudo bem?

Dentro do que foi comentado por você " Entrar no site de uma companhia aérea (EX: Latam) e selecionar uma determinada rota", eu te faço
as seguintes perguntas:

1) Quantas companhias aéreas você gostaria de consultar?

2) Deseja no formato planilha ou algo mais profissional?

Abs;

Tarcísio


EvertonJunio
Colaborador
Colaborador
Mensagens: 13
Registrado em: Sex Set 23, 2016 1:13 pm

Re: Extrair Dados do Site de uma companhia aérea através do Selenium VBA

Mensagem por EvertonJunio »

Tarsa, boa tarde.

Respondendo suas perguntas, segue abaixo:

1) Quantas companhias aéreas você gostaria de consultar?

R: Desejo consultar 3 companhias aéreas: GOL, LATAM e AZUL

2) Deseja no formato planilha ou algo mais profissional?

R: Preciso no formato de planilha.

Att,
Everton Junio


Avatar do usuário
TARSA
Colaborador
Colaborador
Mensagens: 36
Registrado em: Dom Set 11, 2016 5:04 pm

Re: Extrair Dados do Site de uma companhia aérea através do Selenium VBA

Mensagem por TARSA »

Ok, Everton,

Até amanhã darei uma olhada nos sites dessas companhias aéreas e nos falamos. Blz?

Abs;

TARSA


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.


EvertonJunio
Colaborador
Colaborador
Mensagens: 13
Registrado em: Sex Set 23, 2016 1:13 pm

Re: Extrair Dados do Site de uma companhia aérea através do Selenium VBA

Mensagem por EvertonJunio »

Ok!

Ficarei no aguardo...


Avatar do usuário
TARSA
Colaborador
Colaborador
Mensagens: 36
Registrado em: Dom Set 11, 2016 5:04 pm

Re: Extrair Dados do Site de uma companhia aérea através do Selenium VBA

Mensagem por TARSA »

Boa tarde Everton,

Hoje tive um pouco de tempo e resolvi comprar o seu desafio.

Muito bem, realmente o maior problema são as arquiteturas do software da empresa exemplificada por você, que a cada opção na origem e destino que você insere ele já cria opções pré-estabelecidas.
Ainda não desisti, mas já tentei algumas formas que até achei que fossem funcionar, mas nada.
Dando uma olhada em sites de vendas de passagens que não são as companhias aéreas, achei alguns que ficariam muito mais fácil de
realizar esse código. Todavia se a política da sua empresa for comprar direto das companhias, acho que está encrencado.
Bom Everton como gostei do desafio vou continuar tentando sempre que tiver um tempo, caso consiga antes que eu jogue o pano, mande uma mensagem para que eu possa entender como isso foi solucionado.

Abs;

TARSA


EvertonJunio
Colaborador
Colaborador
Mensagens: 13
Registrado em: Sex Set 23, 2016 1:13 pm

Re: Extrair Dados do Site de uma companhia aérea através do Selenium VBA

Mensagem por EvertonJunio »

Tarsa,

Realmente eu soube escolher muito bem um desafio. O código fonte dos sites da companhia aérea são bem complexos.
Até o momento, acho que o site da Latam o mais difícil! No site da Azul, consegui automatizar as entradas do destino, origem e tipo de viagem. Entretanto, a data de ida e volta do vôo é O problema. Ela está em dropdown e por causa disso não consegui selecionar a data livremente.
Já no site da Gol, consegui inserir todas as informações que preciso, porém o botao submeter que está fazendo gracinha.
Na Latam, não sai do lugar... simplesmente abri a página e não sei o que fazer... o HTML parece até aleatório pra mim as vezes. Hehe

Eu agradeço imensamente seu esforço e dedicação em encontrar a solução. Eu também não desisti ainda! Estou buscando novas alternativas a cada dia. Se vc quiser, posso mostra o que fiz até agora. Quem sabe vc não encontre a solução a partir do que ja fiz?!

Então fica aí o desafio!!! Será que há alguém vai conseguir resolve lo???


Avatar do usuário
TARSA
Colaborador
Colaborador
Mensagens: 36
Registrado em: Dom Set 11, 2016 5:04 pm

Re: Extrair Dados do Site de uma companhia aérea através do Selenium VBA

Mensagem por TARSA »

Boa noite Everton,

O site da que o botão submit está te causando problemas comigo funcionou numa boa, as tabelas que aparecem
com as opções de vôos é que são loucas.
Qual comando você usa para enviar as palavras para o textbox dos sites?
No caso desse site eu enviei pelo comando "Sendkeys", já usou?

Tarsa


EvertonJunio
Colaborador
Colaborador
Mensagens: 13
Registrado em: Sex Set 23, 2016 1:13 pm

Re: Extrair Dados do Site de uma companhia aérea através do Selenium VBA

Mensagem por EvertonJunio »

Caro Tarsa, boa noite!

Então, no início do sistema estava utilizando o "innertext", depois tentei o "sendkeys", mas não obtive resultado satisfatório.
A partir daí, tomei conhecimento do Selenium IDE (que é quase um assistente de gravar macro do excel, mas só que no firefox) e comecei a utilizar o VBA com extensão do Selenium. Nessa linguagem, utilizo o Selenium.Type. (no fundo faz a mesma coisa que o "sendkeys".

Veja o script da GOL abaixo. Ele foi o mais próximo de um resultado que cheguei! O problema que estou encontrando é para submeter a página para visualizar os vôos disponíveis.

Código: Selecionar todos

Public Sub Teste_Gol()
  Dim selenium As New SeleniumWrapper.WebDriver
  selenium.Start "chrome", "http://www.voegol.com.br/"

  selenium.Open "/pt-br/Paginas/default.aspx"
  selenium.Click "css=a.modal-btn-fechar"
  selenium.Click "id=ctl00_PlaceHolderMain_origem"
  selenium.Click "id=ctl00_PlaceHolderMain_origem"
  selenium.Click "id=ctl00_PlaceHolderMain_origem"
  selenium.Click "id=ctl00_PlaceHolderMain_origem"
  selenium.Click "id=ctl00_PlaceHolderMain_origem"
  selenium.Type "id=ctl00_PlaceHolderMain_origem", "Belo Horizonte - Confins (CNF)"
  selenium.Click "id=ctl00_PlaceHolderMain_para"
  selenium.Type "id=ctl00_PlaceHolderMain_para", "São Paulo - Congonhas (CGH)"
  selenium.Click "id=ida"
  selenium.Type "id=ida", "10/10/2016"
  selenium.Click "id=volta"
  selenium.Type "id=volta", "10/10/2016"
  selenium.Click "id=adultos"
  selenium.Click "id=bt-disparo"
  MsgBox ("Saco!")
  selenium.stop
End Sub

Já o código da Azul, estou com problemas na seleção da data de ida e volta, em função do dropdown.
Veja o código:

Código: Selecionar todos

Public Sub ExtracaoDados()
  Dim selenium As New SeleniumWrapper.WebDriver
  
'abrir o site https://viajemais.voeazul.com.br/Search2.aspx
  
  selenium.Start "chrome", "https://viajemais.voeazul.com.br"
  selenium.Open "/Search2.aspx"
  
'Selecionando o Tipo de Viagem: IDA e VOLTA
  
  selenium.Click "//div[@id='travelOptions']/span[1]/a"
  selenium.Click "css=a.jqTransformRadio"
  
'Inserindo Origem e Destino

  selenium.Type "id=ControlGroupSearchView2_AvailabilitySearchInputSearchView2_TextBoxMarketOrigin1", "Belo Horizonte - Confins (CNF)"
  selenium.Type "id=ControlGroupSearchView2_AvailabilitySearchInputSearchView2_TextBoxMarketDestination1", "São Paulo - Congonhas (CGH)"

'seleciona o dropdown da data de ida
selenium.Click "css=div.jqTransformSelectWrapper > div > span "


        'Funciona quando é visível o numero do dropdown
     
         selenium.Click "//div[@id='marketDate_1']/div[2]/div/ul/li[2]/a"
         selenium.Click "link=30"

    'Não funciona quando seleciono o dia 30 de primeira

    'selenium.Click "//div[@id='marketDate_1']/div[2]/div/ul/li[2]/a"
    'selenium.Click "link=30"
  
  
  'Outra forma de selecionar a data, mas também não funciona adequadamente.
  
  'selenium.Click "css=div.diaIda.hoverBlue > div.jqTransformSelectWrapper > div > a.jqTransformSelectOpen"
  'selenium.Click ("link=29")
  
  
  
  'Restante do código para selecionar o mês de ida, data de volta (dia/mês/ano), selecionar "data flexível" e 1 adulto
    
  selenium.Click "css=div.mesIda.hoverBlue > div.jqTransformSelectWrapper > div > a.jqTransformSelectOpen"
  selenium.Click "link=out 16"
  selenium.Click "css=#marketDate_2 > div.diaIda.hoverBlue > div.jqTransformSelectWrapper > div > a.jqTransformSelectOpen"
  selenium.Click "xpath=(//a[contains(text(),'30')])[2]"
  selenium.Click "css=#marketDate_2 > div.mesIda.hoverBlue > div.jqTransformSelectWrapper > div > a.jqTransformSelectOpen"
  selenium.Click "xpath=(//a[contains(text(),'out 16')])[2]"
  selenium.Click "css=div.searchButtonPrice > span.jqTransformCheckboxWrapper > a.jqTransformCheckbox"
  selenium.Click "id=priceSearchCheck"
  selenium.Click "css=div.item.hoverBlue > div.jqTransformSelectWrapper > div > span"
  selenium.Click "xpath=(//a[contains(text(),'1')])[53]"
  selenium.clickAndWait "id=ControlGroupSearchView2_LinkButtonSubmit"
  selenium.Click "id=ControlGroupScheduleSelectView_AvailabilityInputScheduleSelectView1_RadioButtonMkt1Fare5"
  selenium.Click "id=ControlGroupScheduleSelectView_AvailabilityInputScheduleSelectView1_RadioButtonMkt2Fare23"
  selenium.Click "css=div.radioArea > span.jqTransformRadioWrapper > a.jqTransformRadio"
  selenium.Click "id=ControlGroupScheduleSelectView_AvailabilityInputScheduleSelectView1_RadioButtonMkt1Fare4"
  selenium.Click "id=ControlGroupScheduleSelectView_AvailabilityInputScheduleSelectView1_RadioButtonMkt1Fare4"
  selenium.Click "css=#BackPrices > div.tab-content > table.info-table > tbody > tr.flightInfo > td.fareCol1.promo > div.radioArea > span.jqTransformRadioWrapper > a.jqTransformRadio"
  selenium.Click "id=ControlGroupScheduleSelectView_AvailabilityInputScheduleSelectView1_RadioButtonMkt2Fare22"
  selenium.Click "id=ControlGroupScheduleSelectView_AvailabilityInputScheduleSelectView1_RadioButtonMkt2Fare22"
  selenium.Click "css=#BackPrices > div.tab-content > table.info-table > tbody > tr.flightInfo > td.fareCol1.promo > div.radioArea > span.jqTransformRadioWrapper > a.jqTransformRadio.jqTransformChecked"
  selenium.Click "id=ControlGroupScheduleSelectView_AvailabilityInputScheduleSelectView1_RadioButtonMkt2Fare22"
  selenium.Click "id=ControlGroupScheduleSelectView_AvailabilityInputScheduleSelectView1_RadioButtonMkt2Fare22"

  selenium.stop
End Sub

Obs: Para usar a "extensão" Selenium, basta baixa da internet: Selenium Wrapper type library.

Abraços


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