Boa noite povo do Fórum. Espero que estejam todos bem.
Pessoal, gostaria de uma sugestão de vocês. Estou produzindo uma Classe (Módulo de Classe), que irá utilizar o Selenium como base, pois se trata de um processo de WebScraping, que poderá ser reaproveitado em outros projetos, se Deus abençoar.
Sobre o desenvolvimento da Classe, não tenho nenhum problema, mas estou pretendendo adicionar uma validação, logo que a Classe for Instanciada, ou seja, convertida em objeto. Essa validação, consiste em verificar se o Selenium Basic esta instalado no PC, impedindo a conclusão do processo de criação da instância, caso o Selenium não esteja instalado localmente.
Ai vem minha dúvida, a qual gostaria da opinião dos que mais entendem. Qual o melhor caminho para validar essa instalação:
- [b]Através da referência do GUID, no próprio VBE?[/b] Se estiver instalado, vai estar ali. Porém, todos os códigos que vi sobre GUID, precisam que a referência esteja marcada.
- [b]Através da pasta de instalação?[/b] Na instalação do Selenium Basic, o diretório de instalação é padrão, sendo alterado apenas a pasta correspondente ao usuário logado no PC. O interessante desse código que, mesmo utilizando uma classe, que será utilizada em PCs diferentes e com usuários diferentes, posso utilizar a Função Environ, para capturar o usuário logado no PC.
- [b]Através do registro do Windows?[/b] Essa, tem a vantagem de que após a instalação, o diretório do Selenium estará registrada no Path da Máquina, podendo ser validada via Registro ou pelo próprio Environ.
Qual melhor caminho utilizar para essa validação?
Gostaria muito da opinião dos amigos. Fico no aguardo.
Abraço a todos e excelente final de semana.
Esclareceu suas dúvidas? Acrescente ao título do tópico a expressão: [RESOLVIDO].
Mikel Silveira Fraga
E-mail: mikel-sf@hotmail.com
Skype: mikelsf
Bom dia, amigo @mikel-silveira-fraga
Vc poderia fazer um teste simples de funcionalidade, por exemplo:
Function SeleniumIsReady() As Boolean
On Error Resume Next
SeleniumIsReady = IsObject(CreateObject("Selenium.Application"))
On Error GoTo 0
End Function
Se estiver instalado e funcionando, a função retornaria obrigatoriamente True.
Em relação às alternativas que vc discutiu, penso eu que usar o GUID é muito mais garantido que o Path, principalmente pq teu público-alvo por natureza é usuário avançado e, apesar de raro, têm potencial de alterar diretórios de instalação de programas e nesses casos o uso de Environ não seria muito seguro. Mesmo assim, buscar o GUID ou o Path através do registry ou o Path através do Environ não é nada confiável, pois ambos podem ainda existir como lixo após o usuário ter (mal) instalado/desinstalado a biblioteca.
Fiz um teste de simulação forçado aqui (código abaixo) antes e depois de desinstalar o Selenium e realmente isso ocorreu pq o caminho permaneceu (lixo de desinstalação):
Function SeleniumIsReady2() As Boolean SeleniumIsReady2 = Dir(Environ("LOCALAPPDATA") & "\SeleniumBasic\", vbDirectory) <> vbNullString End Function
Através da referência do GUID...
..., precisam que a referência esteja marcada.
Logicamente vc poderia adicionar a referência on the fly usando o GUID por exemplo no Initialize da classe só pra testar se a biblioteca está presente e operante como abaixo, mas um agravante é que precisa saber a versão da biblioteca que está instalada (Major/Minor, no caso versão 2.0).
Function SeleniumIsReady3() As Boolean On Error Resume Next ThisWorkbook.VBProject.References.AddFromGuid GUID:="{0277FC34-FD1B-4616-BB19-A9AABCAF2A70}", Major:=2, Minor:=0 If Err.Number = 0 Or Err.Number = 32813 Then SeleniumIsReady3 = True On Error GoTo 0 End Function
Ou usar WMI... ou Shell... mas acho que seria adicionar complexidade desnecessária ao seu projeto.
Enfim, em minha opinião ainda ficaria com o primeiro, apesar de não tão elegante.
@edsonbr, bom dia.
Adorei seus comentários. Entendi todos os pontos e, realmente, considerações como o caso da opção 2, eu não havia observado.
Sobre a mudança do Selenium de lugar no PC, realmente se for um usuário avançado, pode ocorrer, mas para usuários com pouco conhecimento não. A instalação do Selenium não permite alteração do destino. Mas, se no PC tiver mais de um usuário configurado, já pode ocorrer algum erro.
Gostei muito da primeira opção, pois foi simples e direta. Se me permitir, vou consumir essa solução, deixando no código os devidos créditos.
Muito obrigado mais uma vez e excelente restante de semana.
Esclareceu suas dúvidas? Acrescente ao título do tópico a expressão: [RESOLVIDO].
Mikel Silveira Fraga
E-mail: mikel-sf@hotmail.com
Skype: mikelsf
Se me permitir, vou consumir essa solução, deixando no código os devidos créditos...
...Muito obrigado mais uma vez...
Eu é que agradeço, pois já aprendi muito com suas dicas de Webscraping nas suas postagens principalmente no Tomás, com suas explicações do uso do Selenium ou mesmo de interpretação de elementos de HTML/Java, etc.
Aliás, se um dia vc dispor de algum tempo entre um projeto e outro, que tal um tutorial ou uma série de vídeos levando em conta usuários avançados de Excel que não manjam nada de HTML, JS (tô nesse time, hehehe), etc.? Em como usar e o que dá pra fazer com a ferramenta de desenvolvedor que está presente em todos os navegadores, ajudar a entender um pouco, como usar e o que dá pra extrair das sopas de letrinhas (GET, POST, XPath, Div's, etc., etc...)...
Tem uma lacuna bem grande nesse segmento. Os cursos que por aí existem são focados quase que exclusivamente no desenvolvimento de páginas Web.
Links "peneirados" já serviriam e seriam muito bem vindos. 👍
Eita @edsonbr, assim fico sem graça.
É muito bom ver esse tipo de comentário. Eu tive sorte em me desenvolver bem no quesito Web Scraping, isso por que eu trabalhei muito com HTML, sem nenhuma IDE ou Framework, no final na década de 90 (olha eu entregando a idade). Por essa familiaridade com as Tags, não tive tanta dificuldade no aprendizado.
Além disso, não gosto de ficar preso em apenas uma metodologia. Como você disse, o aprendizado de um determinado assunto, é restrito a uma coisa única. Eu gosto de explorar outras linguagens (PHP, JS, Python, etc) e métodos (UML, Scrum, CRUD, etc), para trazê-los para o ambiente VBA. Isso faz com que melhoremos muito o raciocínio, além de aprendermos a pensar fora da caixa.
Olha, como deve ter percebido, estou bem sumido das redes sociais e fóruns, pelo menos nos dois últimos anos. Porém, estou pensando mesmo em retornar com mais publicações (fóruns e youtube). Estou apenas colocando algumas coisas em ordem e devo começar a gravar umas coisas novas. Essa é uma ideia interessante para se explorar. Acredito que será bem interessante sim.
Mais uma vez obrigado pelo reconhecimento e a ajuda no tópico.
Esclareceu suas dúvidas? Acrescente ao título do tópico a expressão: [RESOLVIDO].
Mikel Silveira Fraga
E-mail: mikel-sf@hotmail.com
Skype: mikelsf