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.

[RESOLVIDO]Lentidão para acessar e coletar dados na web

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.
Wagner.cwb
Manda bem
Manda bem
Mensagens: 168
Registrado em: Sáb Set 24, 2016 4:48 pm

[RESOLVIDO]Lentidão para acessar e coletar dados na web

Mensagem por Wagner.cwb » Sex Nov 16, 2018 4:32 pm

Olá Amigos,

eu consegui criar um script que acessa o site do clima tempo e coleta a informação da condição do vento do momento.
É um código bem simples, pois o site não requer autenticação, porém estou achando muito lento, digo isso, pois é mais rápido o usuário fazer a coleta dos dados manualmente do que o próprio script rs
ah também está "esgotando" a máquina, pois depois de 10 processamentos, simplesmente trava tudo.

Por favor, podem me ajudar a melhorá-lo para deixá-lo mais eficiente?

Código: Selecionar todos

Sub climatempo()

'http://www.tomasvasquez.com.br/blog/microsoft-office/vba/vba-ocultando-o-navegador-no-selenium/

Set driver = New ChromeDriver

driver.AddArgument ("--headless")

driver.get "https://www.climatempo.com.br/vento/cidade/271/curitiba-pr"
Application.Wait Now + TimeValue("00:00:01")

Set Label_vento_CTA = driver.FindElementById("momento-vento")

Worksheets("Plan1").Range("AC2") = Label_vento_CTA.Text

driver.get "https://www.climatempo.com.br/previsao-do-tempo/cidade/268/cascavel-pr"
Application.Wait Now + TimeValue("00:00:01")

Set Label_vento_CEL = driver.FindElementById("momento-vento")
Worksheets("Plan1").Range("AC3") = Label_vento_CEL.Text

driver.get "https://www.climatempo.com.br/previsao-do-tempo/cidade/277/londrina-pr"
Application.Wait Now + TimeValue("00:00:01")

Set Label_vento_LNA = driver.FindElementById("momento-vento")

Worksheets("Plan1").Range("AC4") = Label_vento_LNA.Text

driver.get "https://www.climatempo.com.br/previsao-do-tempo/cidade/278/maringa-pr"
Application.Wait Now + TimeValue("00:00:01")

Set Label_vento_MGA = driver.FindElementById("momento-vento")
Worksheets("Plan1").Range("AC5") = Label_vento_MGA.Text

driver.get "https://www.climatempo.com.br/previsao-do-tempo/cidade/279/pontagrossa-pr"
Application.Wait Now + TimeValue("00:00:01")


Set Label_vento_PGO = driver.FindElementById("momento-vento")
Worksheets("Plan1").Range("AC6") = Label_vento_PGO.Text

Set Label_Atualizacao = driver.FindElementById("momento-atualizacao")
Worksheets("Plan1").Range("AC7") = Label_Atualizacao.Text

driver.Quit


End Sub
Vou deixar em anexo a planilha para facilitar o entendimento.

abraços!
Anexos
Climatempo.zip
(15.24 KiB) Baixado 84 vezes
Editado pela última vez por Wagner.cwb em Seg Dez 03, 2018 9:39 pm, em um total de 1 vez.



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
webmaster
Administrador
Mensagens: 2790
Registrado em: Sex Jul 24, 2009 2:44 pm
Contato:

Re: Lentidão para acessar e coletar dados na web

Mensagem por webmaster » Sex Nov 16, 2018 8:16 pm

Primeiro, o Selenium espera a página terminar de carregar quando você utiliza um Get. Portanto, o Application.Wait depois de cada Get é desnecessário.

Tirando isso, não tem muito o que fazer. Pelo que vi, você está só extraindo dados da página, sem navegação. Nesse caso, acho melhor usar HttpReq e fazer o parse do HTML em memória. Aqui um exemplo:

https://stackoverflow.com/a/17063741/1209721


Tomás
https://www.tomasvasquez.com.br/blog
https://www.tomasvasquez.com.br/cursocsharp
https://twitter.com/tomamais
Se sua dúvida foi solucionada, acrescente [RESOLVIDO] ao título.

Avatar do usuário
webmaster
Administrador
Mensagens: 2790
Registrado em: Sex Jul 24, 2009 2:44 pm
Contato:

Re: Lentidão para acessar e coletar dados na web

Mensagem por webmaster » Sex Nov 16, 2018 8:18 pm

Acabo de ver que o ClimaTempo tem API Rest. Acredito ser uma alternativa melhor:

https://advisor.climatempo.com.br/

Aqui um exemplo de como consumir uma API Rest no VBA:

https://stackoverflow.com/a/38258514/1209721

Você provavelmente precisará de credenciais. Aí só seguir a documentação do próprio site.


Tomás
https://www.tomasvasquez.com.br/blog
https://www.tomasvasquez.com.br/cursocsharp
https://twitter.com/tomamais
Se sua dúvida foi solucionada, acrescente [RESOLVIDO] ao título.

Wagner.cwb
Manda bem
Manda bem
Mensagens: 168
Registrado em: Sáb Set 24, 2016 4:48 pm

Re: Lentidão para acessar e coletar dados na web

Mensagem por Wagner.cwb » Sáb Nov 17, 2018 4:23 pm

Obrigado Amigo, sempre trazendo opções.

Vou estudar mais a respeito e trago aqui os resultados.

abs!



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.


Wagner.cwb
Manda bem
Manda bem
Mensagens: 168
Registrado em: Sáb Set 24, 2016 4:48 pm

Re: Lentidão para acessar e coletar dados na web

Mensagem por Wagner.cwb » Sáb Nov 17, 2018 5:28 pm

webmaster escreveu:
Sex Nov 16, 2018 8:16 pm
Primeiro, o Selenium espera a página terminar de carregar quando você utiliza um Get. Portanto, o Application.Wait depois de cada Get é desnecessário.

Tirando isso, não tem muito o que fazer. Pelo que vi, você está só extraindo dados da página, sem navegação. Nesse caso, acho melhor usar HttpReq e fazer o parse do HTML em memória. Aqui um exemplo:

https://stackoverflow.com/a/17063741/1209721
Fiquei bastante curioso com esta sugestão que você passou.
Por favor, você pode me ajudar na minha aplicação?

cod original

Código: Selecionar todos

TargetURL = "https://www.mysite.co.uk/app/api/v1/test"
Set HTTPReq = CreateObject("WinHttp.WinHttpRequest.5.1")
HTTPReq.Option(4) = 13056 '
HTTPReq.Open "PUT", TargetURL, False
HTTPReq.SetCredentials "user", "password", 0
HTTPReq.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
HTTPReq.send ("test[status]=" & Forms!curl!Text0.Value & "&test2[status]=" & Text2.Value)
MsgBox (HTTPReq.responseText)
No exemplo do site, eu tentei modificar para a minha realidade da seguinte forma:

Eu eliminei a linha - HTTPReq.SetCredentials "user", "password", 0 (pois não preciso autenticar)

Código: Selecionar todos

Sub AlertaTemporal()

Set driver = New ChromeDriver

TargetURL = "https://www.climatempo.com.br/vento/cidade/271/curitiba-pr"
Set HTTPReq = CreateObject("WinHttp.WinHttpRequest.5.1")
HTTPReq.Option(4) = 13056
HTTPReq.Open "PUT", TargetURL, False

HTTPReq.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
HTTPReq.send ("test[status]=" & forms!curl!Text0.Value & "&test2[status]=" & Text2.Value)
MsgBox (HTTPReq.responseText)
End sub

Não tive sucesso... erro 424 - o objeto é obrigatório >

HTTPReq.send ("test[status]=" & forms!curl!Text0.Value & "&test2[status]=" & Text2.Value)

tá na cara que eu não entendi o código rs



Avatar do usuário
webmaster
Administrador
Mensagens: 2790
Registrado em: Sex Jul 24, 2009 2:44 pm
Contato:

Re: Lentidão para acessar e coletar dados na web

Mensagem por webmaster » Ter Nov 20, 2018 11:43 am

Wagner,

Perdoe. Não está sobrando muito tempo para colocar um código de exemplo. Só quero adiantar que o WinHTTPRequest vale a pena para fazer extração de dados de página sem muita navegação. Se precisar navegar para algum lugar da página, você terá que simular toda a submissão HTTP (POST/PUT/PATCH).

Como no seu código só vi simples acessos a páginas, imaginei que o WinHTTPRequest fosse a melhor alternativa. Ele te devolverá todo o HTML para você fazer o que quiser.

Vou tentar (sem promessas) faz um exemplo aqui depois.


Tomás
https://www.tomasvasquez.com.br/blog
https://www.tomasvasquez.com.br/cursocsharp
https://twitter.com/tomamais
Se sua dúvida foi solucionada, acrescente [RESOLVIDO] ao título.

Wagner.cwb
Manda bem
Manda bem
Mensagens: 168
Registrado em: Sáb Set 24, 2016 4:48 pm

Re: Lentidão para acessar e coletar dados na web

Mensagem por Wagner.cwb » Qui Nov 22, 2018 8:12 pm

Obrigado meu caro!

Fiquei muito curioso com esta opção, fico aguardando, mesmo não sendo uma promessa rs
Nesse intervalo irei buscar informações.



Avatar do usuário
webmaster
Administrador
Mensagens: 2790
Registrado em: Sex Jul 24, 2009 2:44 pm
Contato:

Re: Lentidão para acessar e coletar dados na web

Mensagem por webmaster » Sex Nov 23, 2018 2:23 am

Obrigado pela paciência. Consertei o texto acima. Quando o li novamente, percebi que estava quando ininteligível. Perdoe.


Tomás
https://www.tomasvasquez.com.br/blog
https://www.tomasvasquez.com.br/cursocsharp
https://twitter.com/tomamais
Se sua dúvida foi solucionada, acrescente [RESOLVIDO] ao título.

Wagner.cwb
Manda bem
Manda bem
Mensagens: 168
Registrado em: Sáb Set 24, 2016 4:48 pm

Re: Lentidão para acessar e coletar dados na web

Mensagem por Wagner.cwb » Seg Dez 03, 2018 9:38 pm

Tranquilo amigo!
suas considerações foram importantes e realizei algumas mudanças e avancei bastante.
Eu vou criar outro post sobre outro desafio que encontrei aqui.

Obrigado pela paciência e pelo tempo que você se dedica em ajudar os outros.



Wagner.cwb
Manda bem
Manda bem
Mensagens: 168
Registrado em: Sáb Set 24, 2016 4:48 pm

Re: [RESOLVIDO]Lentidão para acessar e coletar dados na web

Mensagem por Wagner.cwb » Seg Dez 03, 2018 9:41 pm

Eu estudei outros artigos do blog Tomás e passei a usar a exportação de tabelas.

http://www.tomasvasquez.com.br/blog/tag/seleniumbasic/

Para quem tiver curiosidade para saber qual foi a solução.
Eu mudei a minha fonte de dados para o site https://www.windy.com/
e passei a usar a exportação de tabelas via selenium.

abs!



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