.NET 5 + Selenium WebDriver: exemplos de extração de dados da Web
Quem acompanha este blog sabe que há algum tempo venho produzindo conteúdos sobre o uso de Selenium Web Driver em diferentes cenários, sempre combinando o mesmo a projetos construídos sob a plataforma .NET (importante ressaltar que o Selenium pode ser utilizado em conjunto com as principais tecnologias de desenvolvimento do mercado). Muitos dos exemplos que apresentei aqui focaram em como automatizar testes de sites/Web Apps, mas também abordei o Selenium como meio para simplificar a extração de dados de páginas Web - técnica esta conhecida como Web Scraping.
Diversas são as motivações que podem levar Desenvolvedores a implementar aplicações para Web Scraping. A ausência de APIs REST quando da necessidade de integrações entre sistemas ou, até mesmo, a inexistência de meios para consumir de maneira descomplicada dados públicos constituem boas razões para isto.
O link a seguir traz um dos últimos conteúdos que produzi sobre Web Scraping, com diversos exemplos em .NET Core 3.0:
.NET Core 3.0 + Selenium WebDriver: exemplos de extração de dados da Web
Neste novo artigo apresento novos exemplos implementando Web Scraping, desta vez utilizando o .NET 5 em projetos baseados em Chrome Driver, Gecko Driver (Firefox) e Remote WebDriver.
E aproveito este espaço para um convite…
No dia 03/02/2021 (quarta) às 21:00 - horário de Brasília — teremos mais um evento online e gratuito no Canal .NET.
Desta vez uma apresentação com os MVPs André Secco e Thiago Bertuzzi sobre o Domain-Driven Design (DDD) visto de outro ângulo: saiba quais devem ser suas motivações ao considerar a abordagem do DDD e os erros mais comuns cometidos por profissionais e empresas na concepção de suas soluções!
Para participar faça sua inscrição no link a seguir, a transmissão acontecerá via YouTube:
Site utilizado para Web Scraping
Nos exemplos que trago neste artigo fiz uso de um site estático com informações sobre moedas estrangeiras e Bitcoin, sendo que disponibilizei o mesmo como uma imagem chamada renatogroffe/site-indicadores-economia-2021 no Docker Hub.
No print a seguir é possível observar tal site:
Disponibilizei também o site como um repositório do GitHub:
Site Estático + Dockerfile + NGINX + Cotações de Moedas
Os exemplos indicados nas próximas seções foram descritos em detalhes em uma live recente do Canal .NET e que está disponível no YouTube:
Implementações com Chrome, Firefox e Remote WebDriver
Em todos os exemplos que disponibilizo neste post fiz uso do package Selenium.WebDriver.
Para a aplicação que extrai dados via Google Chrome utilizei o Chrome Driver, que poderá ser baixado através deste link. Na classe PaginaCotacoes está a implementação para a extração dos dados, empregando para isso os tipos IWebDriver (namespace OpenQA.Selenium), ChromeDriver e ChromeOptions (estes 2 últimos localizados no namespace OpenQA.Selenium.Chrome):
A seguir está o link para o repositório com esse exemplo no GitHub:
.NET 5 + Worker Service + Web Scraping + Selenium WebDriver + Chrome Driver + MongoDB + Cotações
A implementação equivalente com Firefox + Gecko Driver em pouco difere do exemplo anterior, uma vez que muitas das implementações com Selenium WebDriver são baseadas em interfaces e classes básicas. Na próxima listagem é possível notar agora a presença dos tipos FirefoxDriver e FirefoxOptions (ambos situados no namespace OpenQA.Selenium.Firefox):
Esse segundo exemplo também está no GitHub:
E por fim chegamos ao exemplo envolvendo o uso de Selenium + Remote WebDriver.
Nesta implementação empreguei uma imagem Docker para execução do Firefox em modo standalone, com toda a configuração para relativa ao Gecko Driver e recursos do próprio browser já embutidos. Trata-se de uma alternativa bastante interessante também para cenários envolvendo a automação de testes, descomplicando ao máximo a utilização do Selenium.
Para maiores detalhes sobre a execução do Selenium em standalone acesse o repositório do projeto no GitHub (atualmente as opções disponíveis são Firefox, Chrome e Opera):
https://github.com/SeleniumHQ/docker-selenium
O código-fonte deste último exemplo foi disponibilizado como um repositório no GitHub:
Para a criação do container para testes com o Selenium executei o comando:
docker run --name selenium-standalone-firefox -d -p 4444:4444 --shm-size 2g selenium/standalone-firefox:4.0.0-beta-1-prerelease-20210106
Ao acessar o Selenium via Remote WebDriver tomar como base o seguinte endpoint (levando em conta a porta especificada na criação do container):
http://localhost:4444/wd/hub
Mais uma vez chegamos a uma implementação bem similar àquelas dos exemplos com as classes FirefoxDriver e ChromeDriver. Desta vez foi utilizada uma instância do tipo RemoteWebDriver, especificando no construtor o endpoint do Selenium + Firefox em modo standalone (porta 4444, item de configuração UrlRemoteWebDriver) e uma referência de FirefoxOptions:
E termino este post com mais um convite…
Que tal participar do treinamento online pioneiro no Brasil sobre GitHub Actions e promovido pelo Azure na Prática, agora com diversas aulas já gravadas?
Acompanhe com comodidade e a qualquer tempo os diversos módulos deste treinamento, em que serão cobertas boas práticas + estratégias de build/deployment e o uso desta solução de automação com tecnologias como o próprio Selenium WebDriver, Docker, Kubernetes, Azure App Service, Azure Functions e outros serviços da nuvem Microsoft!
Acesse então o link a seguir para efetuar sua inscrição com um desconto especial de R$ 100,00 (inclui certificado e grupo para resolução de dúvidas durante e após o curso):