Página 1 de 1

[RESOLVIDO] - combobox dependente

Enviado: Dom Fev 21, 2016 8:47 pm
por aecduarte
Prezados,

Estou montando uma macro para extrair dados da web. Nesse sentido, para extrair tais dados, é necessário:
1- Entrar no site "x" (etapa ok)
2- Selecionar dados em 5 combobox (parcial)
A macro está selecionado o dado na combobox mas há um problema: em uma delas há um evento onchange que está resolvido, no entanto, há algum evento ou função adicional que, ainda, não identifiquei.
Eu seleciono o dado da combobox nº 2 mas não atualiza a lista da combobox nº 3.

Alguma sugestão?

Sub x()
Dim ie As InternetExplorer
Dim C
redo:


Set ie = New InternetExplorer
ie.Visible = True
ie.Navigate "http://www.aneel.gov.br/aplicacoes/indi ... ?regiao=SU"

Do Until ie.ReadyState = READYSTATE_COMPLETE
Loop


ie.Document.all("tipo").Value = "d" 'Dados

ie.Document.all("tipoE").Value = "c" 'Concessionárias
ie.Document.all("tipoE").FireEvent ("onchange")

ie.Document.all("distribuidora").Value = "396" 'seleciona a distribuidora
ie.Document.all("periodo").Value = "2015"
'ie.Document.All.Item("distribuidora").Item(1).Selected = True

ie.Document.getElementById("submit_obter_dados").Click

Set ie = Nothing

Att.,
Alberto - Extrair dados web.rar
macro
(13.61 KiB) Baixado 368 vezes

Re: Web - combobox dependente

Enviado: Qui Mar 03, 2016 2:34 pm
por webmaster
Alberto,

Olhei muito por cima, mas, a simples mudanca no combo deveria disparar o onchange, sem a necessidade faze-lo manualmente. Pode ser um problema do site.

Tentou o Selenium?

Att

Re: Web - combobox dependente

Enviado: Sex Mar 04, 2016 4:02 pm
por Mikel Silveira Fraga
Boa tarde a todos.

Tomás, a alguns dias atrás eu havia trocado uma MP com o Duarte sobre este problema. Já tinha passado pelo mesmo em um trabalho que fiz no ano passado, para uma empresa de Revenda da Telefonia e Internet.

Eu fiz um outro teste que foi atribuir o Elemento Select para um Objeto HtmlSelectElement da biblioteca Microsoft HTML Object, mas nesse caso me deparei com alguns erros de versão do Internet Explorer, onde alguns métodos funcionam em versões anteriores ao IE11.


Duarte, como disse o Tomás, acredito que utilizar o Selenium VBA seria a melhor opção. Veja as possibilidades do uso deste nas máquinas onde precisa rodar a rotina e nos retorne.

Se precisar de ajuda, estou no aguardo.

Re: Web - combobox dependente

Enviado: Sex Mar 11, 2016 1:52 pm
por Mikel Silveira Fraga
Boa tarde a todos.

Tomás, bingo. Sua sugestão estava certíssima. Montei a rotina e nem tive trabalho.

Duarte, utilizando o Selenium VBA, o acesso a esta rotina funcionou perfeitamente. Segue o código abaixo:

Código: Selecionar todos

Option Explicit

Dim swdBrowser As New SeleniumWrapper.WebDriver
Dim swsElement As SeleniumWrapper.Select

Sub x()

    With swdBrowser
    
        .Start "chrome", "http://www.aneel.gov.br/"
        .Open "aplicacoes/indicadores_de_qualidade/pesquisa.cfm?regiao=SU"
        
        .setImplicitWait 5000
        
        Set swsElement = .findElementByName("tipo")
        swsElement.selectByValue "d"
        .setImplicitWait 5000
        
        Set swsElement = .findElementByName("tipoE")
        swsElement.selectByValue "c"
        .setImplicitWait 5000
        
        Set swsElement = .findElementByName("distribuidora")
        swsElement.selectByValue "396"
        .setImplicitWait 5000
        
        Set swsElement = .findElementByName("periodo")
        swsElement.selectByValue "0"
        .setImplicitWait 5000
        
        Set swsElement = .findElementByName("ano")
        swsElement.selectByValue "2014"
        .setImplicitWait 5000

        .findElementById("submit_obter_dados").Click
        
    End With

End Sub
Para utilizar o Selenium, é interessantes dar uma olhada nos vídeos postados pelo Tomás sobre o uso dessa biblioteca. Seguem links abaixo:
- Fórum: viewtopic.php?f=23&t=4161
- Blog: http://www.tomasvasquez.com.br/blog/mic ... -webdriver
- YouTube: https://www.youtube.com/watch?v=hk-65p2 ... e=youtu.be

Veja se essa solução irá atender suas necessidades.

Qualquer dúvida, a disposição.

Abraços.

Re: Web - combobox dependente

Enviado: Sex Mar 25, 2016 3:44 pm
por aecduarte
Muito obrigado Tomás e Mikel. Me ajudaram muito.
Realmente, a biblioteca do ie no vba não funciona muito bem e o Selenium é a saída. Muito bom o material do site sobre o selenium.
Pena que o plugin VBA/VBS Formatters parou de funcionar.

Duvida: Eu tive problema com a combobox "periodo". Aqui, ele não consegue selecionar a combobox com value=0, que é o caso do período. Em outras palavras, nesse caso, a combobox fica igual "escolha um periodo". Alguma sugestão? é possível selecionar pelo nome do Label? exemplo label=Anual;

Grato

Re: [RESOLVIDO] - combobox dependente

Enviado: Sáb Mar 26, 2016 10:28 am
por Mikel Silveira Fraga
Duarte, bom dia.

Cara, é possível sim selecionar a opção via o Texto/Label desejado.

Para fazer isso, substitua o comando swsElement.selectByValue, pelo comando swsElement.selectByText, e informe o texto desejado.

Teste e nos retorne com o resultado.

Excelente final de semana e Feliz Páscoa.

Re: [RESOLVIDO] - combobox dependente

Enviado: Sáb Mar 26, 2016 12:27 pm
por aecduarte
Perfeito! funcionou

Agora, travei na extração dos dados pelo selenium.

Tentei abrir a planilha "Selenium VBA - Busca CEP" mas retornou o seguinte erro " Não foi possível carregar um objeto porque ele não está disponivel nesta maquina"

Existe algum comando para retornar o conteúdo inteiro da página(nesse caso da popup que será aberta) e jogar direto no excel?

grato

Re: [RESOLVIDO] - combobox dependente

Enviado: Sáb Mar 26, 2016 12:37 pm
por Mikel Silveira Fraga
Duarte, boa tarde.

Dê uma olhada no tópico abaixo:
Office 32bits no Windows 64bits

Dúvidas, a disposição.

Abraços.