.NET 5 + Selenium WebDriver: exemplos de extração de dados da Web

Renato Groffe
4 min readJan 31, 2021

--

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:

https://bit.ly/live-ddd-jeito-certo

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:

.NET 5 + Worker Service + Web Scraping + Selenium WebDriver + Firefox + Gecko Driver + MongoDB + Cotações

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:

.NET 5 + Worker Service + Web Scraping + Selenium WebDriver + Remote WebDriver + Firefox + MongoDB + Cotações

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):

https://bit.ly/anp-githubactions-desc-100-blog-groffe

--

--

Renato Groffe
Renato Groffe

Written by Renato Groffe

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker

Responses (1)