CAPSOLVER
Blog
Web Scraping com SeleniumBase e Python em 2024

Web Scraping com SeleniumBase e Python em 2024

Logo of CapSolver

Anh Tuan

Data Science Expert

05-Nov-2024

Introdução ao SeleniumBase

SeleniumBase é uma estrutura Python que simplifica a automação e os testes da web. Ela estende os recursos do Selenium WebDriver com uma API mais amigável, seletores avançados, esperas automáticas e ferramentas de teste adicionais.

Configurando o SeleniumBase

Antes de começarmos, certifique-se de que o Python 3 esteja instalado em seu sistema. Siga estas etapas para configurar o SeleniumBase:

  1. Instale o SeleniumBase:

    bash Copy
    pip install seleniumbase
  2. Verifique a Instalação:

    bash Copy
    sbase --help

Scraper Básico com SeleniumBase

Vamos começar criando um script simples que navega para quotes.toscrape.com e extrai citações e autores.

Exemplo: Raspe citações e seus autores da página inicial.

python Copy
# scrape_quotes.py

from seleniumbase import BaseCase

class QuotesScraper(BaseCase):
    def test_scrape_quotes(self):
        self.open("https://quotes.toscrape.com/")
        quotes = self.find_elements("div.quote")
        for quote in quotes:
            text = quote.find_element("span.text").text
            author = quote.find_element("small.author").text
            print(f"\"{text}\" - {author}")

if __name__ == "__main__":
    QuotesScraper().main()

Execute o script:

bash Copy
python scrape_quotes.py

Saída:

Copy
“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.” - Albert Einstein
...

Exemplos Mais Avançados de Web Scraping

Para aprimorar suas habilidades de web scraping, vamos explorar exemplos mais avançados usando SeleniumBase.

Raspagem de Múltiplas Páginas (Paginação)

Muitos sites exibem conteúdo em várias páginas. Vamos modificar nosso script para navegar por todas as páginas e raspar citações.

python Copy
# scrape_quotes_pagination.py

from seleniumbase import BaseCase

class QuotesPaginationScraper(BaseCase):
    def test_scrape_all_quotes(self):
        self.open("https://quotes.toscrape.com/")
        while True:
            quotes = self.find_elements("div.quote")
            for quote in quotes:
                text = quote.find_element("span.text").text
                author = quote.find_element("small.author").text
                print(f"\"{text}\" - {author}")

            # Verifique se existe uma próxima página
            if self.is_element_visible('li.next > a'):
                self.click('li.next > a')
            else:
                break

if __name__ == "__main__":
    QuotesPaginationScraper().main()

Explicação:

  • Fazemos loop pelas páginas verificando se o botão "Próximo" está disponível.
  • Usamos is_element_visible para verificar se o botão "Próximo" está disponível.
  • Clicamos no botão "Próximo" para navegar para a próxima página.

Lidando com Conteúdo Dinâmico com AJAX

Alguns sites carregam conteúdo dinamicamente usando AJAX. SeleniumBase pode lidar com esses cenários esperando que os elementos carreguem.

Exemplo: Raspe tags do site, que carregam dinamicamente.

python Copy
# scrape_dynamic_content.py

from seleniumbase import BaseCase

class TagsScraper(BaseCase):
    def test_scrape_tags(self):
        self.open("https://quotes.toscrape.com/")
        # Clique no link 'Top Ten tags' para carregar tags dinamicamente
        self.click('a[href="/tag/"]')
        self.wait_for_element("div.tags-box")
        tags = self.find_elements("span.tag-item > a")
        for tag in tags:
            tag_name = tag.text
            print(f"Tag: {tag_name}")

if __name__ == "__main__":
    TagsScraper().main()

Explicação:

  • Esperamos que o elemento div.tags-box carregue para garantir que o conteúdo dinâmico seja carregado.
  • wait_for_element garante que o script não prossiga até que o elemento esteja disponível.

Enviando Formulários e Fazendo Login

Às vezes, você precisa fazer login em um site antes de raspar o conteúdo. Aqui está como você pode lidar com o envio de formulários.

Exemplo: Faça login no site e raspe as citações da página do usuário autenticado.

python Copy
# scrape_with_login.py

from seleniumbase import BaseCase

class LoginScraper(BaseCase):
    def test_login_and_scrape(self):
        self.open("https://quotes.toscrape.com/login")
        # Preencha o formulário de login
        self.type("input#username", "testuser")
        self.type("input#password", "testpass")
        self.click("input[type='submit']")

        # Verifique o login procurando um link de logout
        if self.is_element_visible('a[href="/logout"]'):
            print("Logado com sucesso!")

            # Agora raspe as citações
            self.open("https://quotes.toscrape.com/")
            quotes = self.find_elements("div.quote")
            for quote in quotes:
                text = quote.find_element("span.text").text
                author = quote.find_element("small.author").text
                print(f"\"{text}\" - {author}")
        else:
            print("Falha ao logar.")

if __name__ == "__main__":
    LoginScraper().main()

Explicação:

  • Navegamos para a página de login e preenchemos as credenciais.
  • Após enviar o formulário, verificamos o login procurando a presença de um link de logout.
  • Então, prosseguimos para raspar o conteúdo disponível para usuários logados.

Observação: Como quotes.toscrape.com permite qualquer nome de usuário e senha para demonstração, podemos usar credenciais fictícias.

Extraindo Dados de Tabelas

Os sites costumam apresentar dados em tabelas. Aqui está como extrair dados de tabela.

Exemplo: Raspe dados de uma tabela (exemplo hipotético, pois o site não possui tabelas).

python Copy
# scrape_table.py

from seleniumbase import BaseCase

class TableScraper(BaseCase):
    def test_scrape_table(self):
        self.open("https://www.example.com/table-page")
        # Espere a tabela carregar
        self.wait_for_element("table#data-table")
        rows = self.find_elements("table#data-table > tbody > tr")
        for row in rows:
            cells = row.find_elements("td")
            row_data = [cell.text for cell in cells]
            print(row_data)

if __name__ == "__main__":
    TableScraper().main()

Explicação:

  • Localizamos a tabela por seu ID ou classe.
  • Iteramos sobre cada linha e, em seguida, sobre cada célula para extrair dados.
  • Como quotes.toscrape.com não possui tabelas, substitua a URL por um site real que contenha uma tabela.

Integrando o CapSolver no SeleniumBase

Embora quotes.toscrape.com não tenha CAPTCHAs, muitos sites do mundo real têm. Para nos prepararmos para tais casos, demonstraremos como integrar o CapSolver em nosso script SeleniumBase usando a extensão do navegador CapSolver.

Como resolver captchas com SeleniumBase usando Capsolver

  1. Baixe a Extensão CapSolver:

Configurando a Extensão CapSolver

  1. Localize o Arquivo de Configuração:

    • Encontre o arquivo config.json localizado no diretório capsolver_extension/assets.
  2. Atualize a Configuração:

    • Defina enabledForcaptcha e/ou enabledForRecaptchaV2 como true dependendo dos tipos de CAPTCHA que você deseja resolver.
    • Defina captchaMode ou reCaptchaV2Mode como "token" para resolução automática.

    Exemplo config.json:

    json Copy
    {
      "apiKey": "YOUR_CAPSOLVER_API_KEY",
      "enabledForcaptcha": true,
      "captchaMode": "token",
      "enabledForRecaptchaV2": true,
      "reCaptchaV2Mode": "token",
      "solveInvisibleRecaptcha": true,
      "verbose": false
    }
    • Substitua "YOUR_CAPSOLVER_API_KEY" por sua chave de API CapSolver real.

Carregando a Extensão CapSolver no SeleniumBase

Para usar a extensão CapSolver no SeleniumBase, precisamos configurar o navegador para carregar a extensão quando ele iniciar.

  1. Modifique seu Script SeleniumBase:

    • Importe ChromeOptions de selenium.webdriver.chrome.options.
    • Configure as opções para carregar a extensão CapSolver.

    Exemplo:

    python Copy
    from seleniumbase import BaseCase
    from selenium.webdriver.chrome.options import Options as ChromeOptions
    import os
    
    class QuotesScraper(BaseCase):
        def setUp(self):
            super().setUp()
    
            # Caminho para a extensão CapSolver
            extension_path = os.path.abspath('capsolver_extension')
    
            # Configure as opções do Chrome
            options = ChromeOptions()
            options.add_argument(f"--load-extension={extension_path}")
            options.add_argument("--disable-gpu")
            options.add_argument("--no-sandbox")
    
            # Atualize o driver com as novas opções
            self.driver.quit()
            self.driver = self.get_new_driver(browser_name="chrome", options=options)
  2. Certifique-se de que o Caminho da Extensão esteja Correto:

    • Certifique-se de que extension_path aponte para o diretório onde você descompactou a extensão CapSolver.

Script de Exemplo com Integração CapSolver

Aqui está um script completo que integra o CapSolver ao SeleniumBase para resolver CAPTCHAs automaticamente. Continuaremos usando https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php como nosso site de exemplo.

python Copy
# scrape_quotes_with_capsolver.py
from seleniumbase import BaseCase
from selenium.webdriver.chrome.options import Options as ChromeOptions
import os

class QuotesScraper(BaseCase):
    def setUp(self):
        super().setUp()

        # Caminho para a pasta da extensão CapSolver
        # Certifique-se de que este caminho aponte corretamente para a pasta da extensão do Chrome CapSolver
        extension_path = os.path.abspath('capsolver_extension')

        # Configure as opções do Chrome
        options = ChromeOptions()
        options.add_argument(f"--load-extension={extension_path}")
        options.add_argument("--disable-gpu")
        options.add_argument("--no-sandbox")

        # Atualize o driver com as novas opções
        self.driver.quit()  # Feche qualquer instância de driver existente
        self.driver = self.get_new_driver(browser_name="chrome", options=options)

    def test_scrape_quotes(self):
        # Navegue para o site de destino com reCAPTCHA
        self.open("https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php")

        # Verifique se o CAPTCHA está presente e resolva-o se necessário
        if self.is_element_visible("iframe[src*='recaptcha']"):
            # A extensão CapSolver deve lidar com o CAPTCHA automaticamente
            print("CAPTCHA detectado, aguardando a extensão CapSolver para resolvê-lo...")

            # Espere o CAPTCHA ser resolvido
            self.sleep(10)  # Ajuste o tempo com base no tempo médio de resolução

        # Prossiga com as ações de raspagem após o CAPTCHA ser resolvido
        # Ação de exemplo: clicando em um botão ou extraindo texto
        self.assert_text("reCAPTCHA demo", "h1")  # Confirme o conteúdo da página

    def tearDown(self):
        # Limpe e feche o navegador após o teste
        self.driver.quit()
        super().tearDown()

if __name__ == "__main__":
    QuotesScraper().main()

Explicação:

  • Método setUp:

    • Subscrevemos o método setUp para configurar o navegador Chrome com a extensão CapSolver antes de cada teste.
    • Especificamos o caminho para a extensão CapSolver e a adicionamos às opções do Chrome.
    • Encerramos o driver existente e criamos um novo com as opções atualizadas.
  • Método test_scrape_quotes:

    • Navegamos para o site de destino.
    • A extensão CapSolver detectaria e resolveria automaticamente qualquer CAPTCHA.
    • Realizamos as tarefas de raspagem como de costume.
  • Método tearDown:

    • Garantimos que o navegador seja fechado após o teste para liberar recursos.

Executando o Script:

bash Copy
python scrape_quotes_with_capsolver.py

Observação: Embora quotes.toscrape.com não tenha CAPTCHAs, a integração do CapSolver prepara seu scraper para sites que o possuem.

Conclusão

Neste guia, exploramos como realizar web scraping usando SeleniumBase, cobrindo técnicas básicas de raspagem e exemplos mais avançados como lidar com paginação, conteúdo dinâmico e envio de formulários. Também demonstramos como integrar o CapSolver em seus scripts SeleniumBase para resolver CAPTCHAs automaticamente, garantindo sessões de raspagem ininterruptas.

Declaração de Conformidade: As informações fornecidas neste blog são apenas para fins informativos. A CapSolver está comprometida em cumprir todas as leis e regulamentos aplicáveis. O uso da rede CapSolver para atividades ilegais, fraudulentas ou abusivas é estritamente proibido e será investigado. Nossas soluções de resolução de captcha melhoram a experiência do usuário enquanto garantem 100% de conformidade ao ajudar a resolver dificuldades de captcha durante a coleta de dados públicos. Incentivamos o uso responsável de nossos serviços. Para mais informações, visite nossos Termos de Serviço e Política de Privacidade.

Mais

Errore 1006, 1007, 1008 do Cloudflare
Erro do Cloudflare 1006, 1007, 1008 Solução para Resolver | Como Corrigir

Lidando com erros do Cloudflare 1006, 1007 ou 1008? Aprenda soluções práticas para resolver esses bloqueios de acesso e melhorar sua experiência de crawling na web.

Cloudflare
Logo of CapSolver

Anh Tuan

05-Dec-2025

Como resolver captchas ao fazer web scraping com Scrapling e CapSolver
Como resolver captchas ao realizar web scraping com o Scrapling e o CapSolver

Scrapling + CapSolver permite raspagem automatizada com ReCaptcha v2/v3 e Cloudflare Turnstile bypass.

web scraping
Logo of CapSolver

Aloísio Vítor

05-Dec-2025

Alterar o Agente de Usuário no Selenium
Alterar o User-Agent no Selenium | Passos & Boas Práticas

Alterar o Agente de Usuário no Selenium é um passo crucial para muitas tarefas de raspagem da web. Ajuda a disfarçar o script de automação como um navegador regular...

The other captcha
Logo of CapSolver

Emma Foster

05-Dec-2025

Como identificar se `action` é necessário para resolver o Cloudflare Turnstile usando a extensão CapSolver
Como identificar se `action` é necessário para resolver o Cloudflare Turnstile usando a extensão CapSolver

Aprenda a identificar ações para resolução eficaz de captchas cloudflare turnstile. Siga nosso guia passo a passo sobre o uso das ferramentas e técnicas do Capsolver.

Cloudflare
Logo of CapSolver

Aloísio Vítor

05-Dec-2025

9proxy
Descubra o Poder do 9Proxy: Uma Revisão Abrangente

Neste artigo, vamos mostrar a você o que é 9proxy e os serviços que eles oferecem.

Partners
Logo of CapSolver

Ethan Collins

04-Dec-2025

Raspagem de Web com Selenium e Python
Web Scraping com Selenium e Python | Resolvendo Captcha Ao Fazer Web Scraping

Neste artigo, você vai se familiarizar com a raspagem de dados da web usando o Selenium e o Python, e aprender a resolver o Captcha envolvido no processo para uma extração de dados eficiente.

web scraping
Logo of CapSolver

Anh Tuan

04-Dec-2025