Scraping de sites com Python e Selenium: fundamentos e automação
Hoje, a importância da informação atingiu seu auge, e a capacidade de extrair e analisar dados de recursos da internet tornou-se extremamente importante e muito procurada. Neste artigo, vamos abordar os fundamentos do web scraping utilizando Python e Selenium, além de discutir como a tecnologia CapMonster Cloud ajuda a superar dificuldades com diferentes tipos de CAPTCHAs. Você aprenderá como essas ferramentas podem melhorar significativamente sua capacidade de obter e processar dados da internet, abrindo novos horizontes para pesquisas, análise de dados e automação de processos.
O que é web scraping? Etapas do processo
Web scraping é o processo de extração de dados de páginas da web. Esse processo geralmente envolve o uso de um programa ou scripts que coletam informações apresentadas em sites, as quais podem ser utilizadas em diversas áreas e para diferentes finalidades. Por exemplo, para comparação de preços e serviços de concorrentes, análise de preferências dos consumidores, monitoramento de notícias e eventos, entre outros.
As etapas do web scraping incluem:
Definição dos objetivos: na primeira etapa é necessário entender quais informações devem ser extraídas e de quais sites.
Análise da estrutura da página-alvo: estudo do código HTML das páginas para entender onde e como as informações estão armazenadas. Identificação de elementos como tags, IDs, classes e outros.
Desenvolvimento do script para coleta de dados: escrita de código (por exemplo, em Python com a biblioteca Selenium para automação de ações no navegador), que acessa páginas da web, extrai os dados necessários e os salva em formato estruturado.
Processamento de dados: os dados extraídos frequentemente precisam ser transformados para uso posterior. Isso pode incluir remoção de duplicatas, correção de formatos, filtragem de dados desnecessários, entre outros.
Armazenamento de dados: salvar os dados extraídos e processados em um formato conveniente, como CSV, JSON, banco de dados, entre outros.
Também é importante acompanhar as mudanças no site-alvo para atualizar o script sempre que necessário.
Trabalhando com Python e Selenium
Por que Python e Selenium são convenientes para web scraping?
A linguagem de programação Python e a biblioteca Selenium são frequentemente usadas para web scraping pelos seguintes motivos:
Facilidade de uso: Python é simples de usar e possui muitas bibliotecas para web scraping.
Emulação de ações e acesso a conteúdo dinâmico: com o Selenium é possível automatizar ações do usuário no navegador, incluindo rolagem de página e cliques necessários para carregar dados.
Contorno de anti-crawlers: alguns sites utilizam mecanismos de proteção especiais, e a simulação de ações de um usuário real ajuda a contornar essas proteções.
Amplo suporte: uma grande comunidade e muitos recursos facilitam o uso dessas ferramentas.
Instalação e importação de ferramentas
Vamos analisar um exemplo de um script simples de web scraping. Para o exemplo, usaremos a página https://webscraper.io/test-sites/e-commerce/allinone/product/123, na qual vamos procurar no cartão do produto o preço do HDD de 128 GB.
Se o Python ainda não estiver instalado no seu computador, acesse o site oficial do Python e baixe a versão adequada para o seu sistema operacional (Windows, macOS, Linux). No terminal do seu ambiente de desenvolvimento, você pode verificar a versão do Python com o seguinte comando:
python --versionEm seguida, é necessário instalar o Selenium executando o comando:
pip install seleniumCrie um novo arquivo e importe as bibliotecas necessárias:
import time from selenium import webdriver
Também é necessário adicionar ao projeto a classe “By”, que será usada para definir estratégias de localização de elementos na página com Selenium:
from selenium.webdriver.common.by import By
Parâmetros do driver do Chrome
As opções do ChromeDriver (ChromeOptions) são usadas para configurar o comportamento e os parâmetros de inicialização do navegador Chrome durante a automação com Selenium. Aqui estão algumas dessas opções:
A lista completa de parâmetros pode ser vista aqui.
No nosso exemplo, o modo anônimo está ativado. Inicialize o driver do Chrome e acesse a página do produto:
chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--incognito') driver = webdriver.Chrome(options=chrome_options) driver.get('https://webscraper.io/test-sites/e-commerce/allinone/product/123') driver = webdriver.Chrome(options=chrome_options) driver.get('https://webscraper.io/test-sites/e-commerce/allinone/product/123')
Busca de elementos HTML na página
No Selenium, a busca de elementos em uma página web é realizada por meio de diferentes métodos fornecidos pela classe By. Esses métodos permitem localizar elementos por diversos critérios, como identificador do elemento (ID), nome da classe (class name), nome da tag (tag name), nome do atributo (name), texto do link (link text), XPath ou seletor CSS.
Exemplo de busca por ID:
Por nome da classe:
Por nome da tag:
Por nome do atributo:
Por texto do link:
Por seletor CSS:
Por XPath:
Se for necessário encontrar vários elementos, em vez de find_element usa-se o método find_elements.
No nosso exemplo, é necessário encontrar a localização do elemento do botão “128” e as informações de preço:

Simulação de ações do usuário
No Selenium, a simulação de ações na página web é feita por meio de métodos fornecidos pelo objeto WebElement. Esses métodos permitem interagir com os elementos da página como um usuário real: clicar, inserir texto etc.
Aqui estão alguns desses métodos:
Voltando ao nosso exemplo. Usando XPath, é feita a busca do botão desejado, depois é necessário clicar nele e encontrar o elemento com o preço:
button_128 = driver.find_element(By.XPATH, "//button[@value='128']")
button_128.click()
# Aguardando alguns segundos para o carregamento do preço
time.sleep(3)
price_element = driver.find_element(By.XPATH, "//h4[@class='price float-end pull-right']")
Agora resta exibir o preço do produto com o volume de HDD desejado no console:
price_text = price_element.text
print("Preço do produto:", price_text)
driver.quit()
Assim, eis como fica o código completo:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--incognito')
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://webscraper.io/test-sites/e-commerce/allinone/product/123')
button_128 = driver.find_element(By.XPATH, "//button[@value='128']")
button_128.click()
time.sleep(3)
price_element = driver.find_element(By.XPATH, "//h4[@class='price float-end pull-right']")
price_text = price_element.text
print("Preço do produto:", price_text)
driver.quit()Banners e janelas pop-up
Muito frequentemente, sites exibem vários banners e janelas pop-up, que podem interferir na execução do script. Nesses casos, é possível configurar os parâmetros do ChromeDriver para desativar esses elementos. Aqui estão alguns desses parâmetros:
No site que usamos no nosso exemplo, ao carregar a página aparece um banner de cookies. Também é possível removê-lo de outras formas, uma delas é usando um script separado que bloqueia essas notificações. Primeiro, vamos analisar esse elemento com as Ferramentas de Desenvolvedor:

Usaremos a classe .t-consentPrompt para encontrar o banner de cookies, porque esse é o elemento mais estável e legível em CSS. Classes geradas automaticamente, como termly-styles-root-b0aebb, podem mudar após atualizações do site, por isso geralmente não são usadas em automação.
O banner será ocultado via style.display = 'none', para que não cubra a página e não interfira na interação do Selenium com os elementos do site.
Agora podemos ocultar esse banner adicionando a lógica correspondente ao nosso script:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--incognito')
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://webscraper.io/test-sites/e-commerce/allinone/product/123')
# Script para ocultar o banner de cookies da Termly
script = """
var banner = document.querySelector('.t-consentPrompt');
if (banner) {
banner.style.display = 'none';
}
"""
driver.execute_script(script)
button_128 = driver.find_element(By.XPATH, "//button[@value='128']")
button_128.click()
time.sleep(3)
price_element = driver.find_element(By.XPATH, "//h4[@class='price float-end pull-right']")
price_text = price_element.text
print("Preço do produto:", price_text)
driver.quit()Outro método para fechar o banner é simular a ação do usuário clicando nos botões Accept ou Decline. Analise o elemento necessário (por exemplo, o botão Accept):

Podemos encontrar o botão pelo atributo data-tid="banner-accept" e clicar nele usando button.click():
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--incognito')
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://webscraper.io/test-sites/e-commerce/allinone/product/123')
# Aguarde o botão Accept e clique nele
accept_button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable(
(By.XPATH, "//button[@data-tid='banner-accept']")
)
)
accept_button.click()
# Clique no botão 128 GB
button_128 = driver.find_element(By.XPATH, "//button[@value='128']")
button_128.click()
time.sleep(3)
# Obtenção do preço
price_element = driver.find_element(
By.XPATH,
"//h4[@class='price float-end pull-right']"
)
price_text = price_element.text
print("Preço do produto:", price_text)
driver.quit()Outro método eficaz é usar extensões do Chrome que aceitam ou bloqueiam automaticamente todos os banners de cookies. Essas extensões podem ser instaladas no navegador e adicionadas ao ChromeOptions. Baixe uma extensão adequada no formato .crx e use-a no seu script:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
# Caminho para a extensão .crx
extension_path = '/path/to/extension.crx'
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--incognito')
# Adicionando a extensão
chrome_options.add_extension(extension_path)
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://webscraper.io/test-sites/e-commerce/allinone/product/123')
button_128 = driver.find_element(By.XPATH, "//button[@value='128']")
button_128.click()
time.sleep(3)
price_element = driver.find_element(By.XPATH, "//h4[@class='price float-end pull-right']")
price_text = price_element.text
print("Preço do produto:", price_text)
driver.quit()Essa abordagem elimina a necessidade de interagir manualmente com esses elementos ao carregar a página.
Resolução de CAPTCHA no web scraping
Muitas vezes, ao extrair dados, surgem obstáculos na forma de CAPTCHAs, projetados para proteger contra bots. Para contornar essas restrições, são mais eficazes serviços especializados que reconhecem diferentes tipos de CAPTCHA. Uma dessas ferramentas é o CapMonster Cloud, que é capaz de resolver automaticamente até os CAPTCHAs mais complexos em poucos segundos. Este serviço oferece tanto extensões de navegador (para Chrome, paraFirefox), quanto métodos de API (que podem ser consultados na documentação), que você pode integrar ao seu código para obter tokens, contornar a proteção com sucesso e continuar a execução do seu script.
Alguns tipos de CAPTCHA que o CapMonster Cloud resolve com facilidade:
Todos os tipos de reCAPTCHA

GeeTest

Cloudflare Turnstile e Challenge

DataDome

Exemplo de código para resolução automática de CAPTCHA e web scraping
Este script utiliza a biblioteca oficial Python do CapMonster Cloud e o Selenium para resolver o CAPTCHA na página, após o que extrai o título dessa página e o imprime no console:
import asyncio
from selenium import webdriver
from selenium.webdriver.remote.webdriver import WebDriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import RecaptchaV2Request
async def solve_captcha(api_key, page_url, site_key):
client_options = ClientOptions(api_key=api_key)
cap_monster_client = CapMonsterClient(options=client_options)
recaptcha2request = RecaptchaV2Request(websiteUrl=page_url, websiteKey=site_key)
responses = await cap_monster_client.solve_captcha(recaptcha2request)
return responses['gRecaptchaResponse']
async def parse_site_title(driver: WebDriver, url: str) -> str:
driver.get(url)
driver.implicitly_wait(10)
title_element = driver.find_element(By.TAG_NAME, 'title')
title = title_element.get_attribute('textContent')
return title
async def main():
api_key = 'YOUR_API_KEY' # Substitua pela sua chave de API do CapMonsterCloud
page_url = 'https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=low'
site_key = '6Lcf7CMUAAAAAKzapHq7Hu32FmtLHipEUWDFAQPY'
options = Options()
driver = webdriver.Chrome(options=options)
captcha_response = await solve_captcha(api_key, page_url, site_key)
print("Solução da captcha:", captcha_response)
site_title = await parse_site_title(driver, page_url)
print("Título da página:", site_title)
driver.quit()
if __name__ == "__main__":
asyncio.run(main())Conclusão
O uso de Python e Selenium para web scraping abre inúmeras possibilidades para automação da coleta de dados de sites, e a integração com o CapMonster Cloud ajuda a contornar facilmente CAPTCHAs e simplifica significativamente o processo de coleta de informações. Essas ferramentas permitem não apenas acelerar o trabalho, mas também garantir a precisão e a confiabilidade dos dados obtidos. Com elas, você pode coletar dados de diversas fontes, desde lojas online até sites de notícias, e utilizá-los para análise, pesquisa ou criação de seus próprios projetos. Além disso, não é necessário ter conhecimentos avançados de programação — as tecnologias modernas tornam o web scraping acessível até para iniciantes. Portanto, se para você são importantes simplicidade, conveniência máxima e economia de tempo no trabalho com dados, Python, Selenium e CapMonster Cloud são uma excelente combinação para alcançar esse objetivo!






