CAPSOLVER
Blog
Web Scraping con SeleniumBase y Python en 2024

Web Scraping con SeleniumBase y Python en 2024

Logo of CapSolver

Aloísio Vítor

Image Processing Expert

05-Nov-2024

Introducción a SeleniumBase

SeleniumBase es un framework de Python que simplifica la automatización web y las pruebas. Amplía las capacidades de Selenium WebDriver con una API más fácil de usar, selectores avanzados, esperas automáticas y herramientas de prueba adicionales.

Configuración de SeleniumBase

Antes de comenzar, asegúrese de tener Python 3 instalado en su sistema. Siga estos pasos para configurar SeleniumBase:

  1. Instala SeleniumBase:

    bash Copy
    pip install seleniumbase
  2. Verifica la instalación:

    bash Copy
    sbase --help

Raspador básico con SeleniumBase

Comencemos creando un script simple que navega a quotes.toscrape.com y extrae citas y autores.

Ejemplo: Raspa las citas y sus autores de la página de inicio.

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

Ejecuta el script:

bash Copy
python scrape_quotes.py

Salida:

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

Ejemplos de raspado web más avanzados

Para mejorar tus habilidades de raspado web, exploremos ejemplos más avanzados usando SeleniumBase.

Raspando múltiples páginas (Paginación)

Muchos sitios web muestran contenido en múltiples páginas. Modifiquemos nuestro script para navegar por todas las páginas y raspar citas.

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}")

            # Verifica si hay una página siguiente
            if self.is_element_visible('li.next > a'):
                self.click('li.next > a')
            else:
                break

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

Explicación:

  • Iteramos por las páginas comprobando si el botón "Siguiente" está disponible.
  • Usamos is_element_visible para comprobar el botón "Siguiente".
  • Hacemos clic en el botón "Siguiente" para navegar a la siguiente página.

Manejando contenido dinámico con AJAX

Algunos sitios web cargan contenido dinámicamente utilizando AJAX. SeleniumBase puede manejar estos escenarios esperando a que los elementos se carguen.

Ejemplo: Raspa las etiquetas del sitio web, que se cargan dinámicamente.

python Copy
# scrape_dynamic_content.py

from seleniumbase import BaseCase

class TagsScraper(BaseCase):
    def test_scrape_tags(self):
        self.open("https://quotes.toscrape.com/")
        # Haz clic en el enlace 'Top Ten tags' para cargar las etiquetas dinámicamente
        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()

Explicación:

  • Esperamos a que el elemento div.tags-box se cargue para asegurar que el contenido dinámico esté disponible.
  • wait_for_element asegura que el script no proceda hasta que el elemento esté disponible.

Enviado formularios e iniciando sesión

A veces, necesitas iniciar sesión en un sitio web antes de raspar contenido. Aquí te mostramos cómo puedes manejar el envío de formularios.

Ejemplo: Iniciar sesión en el sitio web y raspar citas desde la página del usuario 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")
        # Completa el formulario de inicio de sesión
        self.type("input#username", "testuser")
        self.type("input#password", "testpass")
        self.click("input[type='submit']")

        # Verifica el inicio de sesión buscando un enlace de cierre de sesión
        if self.is_element_visible('a[href="/logout"]'):
            print("¡Inició sesión correctamente!")

            # Ahora raspa las citas
            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("Error de inicio de sesión.")

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

Explicación:

  • Navegamos a la página de inicio de sesión y rellenamos las credenciales.
  • Después de enviar el formulario, verificamos el inicio de sesión comprobando la presencia de un enlace de cierre de sesión.
  • Luego, procedemos a raspar el contenido disponible para los usuarios que han iniciado sesión.

Nota: Dado que quotes.toscrape.com permite cualquier nombre de usuario y contraseña para demostración, podemos usar credenciales ficticias.

Extrayendo datos de tablas

Los sitios web a menudo presentan datos en tablas. Aquí te mostramos cómo extraer datos de tablas.

Ejemplo: Raspa datos de una tabla (ejemplo hipotético ya que el sitio web no tiene tablas).

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")
        # Espera a que la tabla se cargue
        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()

Explicación:

  • Localizamos la tabla por su ID o clase.
  • Iteramos por cada fila y luego por cada celda para extraer datos.
  • Dado que quotes.toscrape.com no tiene tablas, reemplaza la URL con un sitio web real que contenga una tabla.

Integrando CapSolver en SeleniumBase

Mientras que quotes.toscrape.com no tiene CAPTCHAs, muchos sitios web del mundo real sí. Para prepararte para estos casos, demostraremos cómo integrar CapSolver en nuestro script de SeleniumBase usando la extensión de navegador CapSolver.

Cómo resolver captchas con SeleniumBase usando Capsolver

  1. Descarga la extensión de CapSolver:

    • Visita la página de lanzamientos de GitHub de CapSolver.
    • Descarga la última versión de la extensión de navegador CapSolver.
    • Descomprime la extensión en un directorio en la raíz de tu proyecto, por ejemplo, ./capsolver_extension.

Configurando la extensión de CapSolver

  1. Localiza el archivo de configuración:

    • Busca el archivo config.json ubicado en el directorio capsolver_extension/assets.
  2. Actualiza la configuración:

    • Establece enabledForcaptcha y/o enabledForRecaptchaV2 en true dependiendo de los tipos de CAPTCHA que quieras resolver.
    • Establece el captchaMode o el reCaptchaV2Mode en "token" para la resolución automática.

    Ejemplo de config.json:

    json Copy
    {
      "apiKey": "YOUR_CAPSOLVER_API_KEY",
      "enabledForcaptcha": true,
      "captchaMode": "token",
      "enabledForRecaptchaV2": true,
      "reCaptchaV2Mode": "token",
      "solveInvisibleRecaptcha": true,
      "verbose": false
    }
    • Reemplaza "YOUR_CAPSOLVER_API_KEY" con tu clave de API real de CapSolver.

Cargando la extensión de CapSolver en SeleniumBase

Para usar la extensión de CapSolver en SeleniumBase, necesitamos configurar el navegador para que cargue la extensión cuando se inicie.

  1. Modifica tu script de SeleniumBase:

    • Importa ChromeOptions de selenium.webdriver.chrome.options.
    • Configura las opciones para cargar la extensión de CapSolver.

    Ejemplo:

    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()
    
            # Ruta a la extensión de CapSolver
            extension_path = os.path.abspath('capsolver_extension')
    
            # Configura las opciones de Chrome
            options = ChromeOptions()
            options.add_argument(f"--load-extension={extension_path}")
            options.add_argument("--disable-gpu")
            options.add_argument("--no-sandbox")
    
            # Actualiza el controlador con las nuevas opciones
            self.driver.quit()
            self.driver = self.get_new_driver(browser_name="chrome", options=options)
  2. Asegúrate de que la ruta de la extensión sea correcta:

    • Asegúrate de que extension_path apunte al directorio donde descomprimiste la extensión de CapSolver.

Ejemplo de script con integración de CapSolver

Aquí tienes un script completo que integra CapSolver en SeleniumBase para resolver CAPTCHAs automáticamente. Seguiremos usando https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php como nuestro sitio de ejemplo.

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

        # Ruta a la carpeta de la extensión de CapSolver
        # Asegúrate de que esta ruta apunte correctamente a la carpeta de la extensión de Chrome de CapSolver
        extension_path = os.path.abspath('capsolver_extension')

        # Configura las opciones de Chrome
        options = ChromeOptions()
        options.add_argument(f"--load-extension={extension_path}")
        options.add_argument("--disable-gpu")
        options.add_argument("--no-sandbox")

        # Actualiza el controlador con las nuevas opciones
        self.driver.quit()  # Cierra cualquier instancia de controlador existente
        self.driver = self.get_new_driver(browser_name="chrome", options=options)

    def test_scrape_quotes(self):
        # Navega al sitio de destino con reCAPTCHA
        self.open("https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php")

        # Comprueba la presencia de CAPTCHA y resuelve si es necesario
        if self.is_element_visible("iframe[src*='recaptcha']"):
            # La extensión de CapSolver debería manejar el CAPTCHA automáticamente
            print("CAPTCHA detectado, esperando a que la extensión de CapSolver lo resuelva...")

            # Espera a que se resuelva el CAPTCHA
            self.sleep(10)  # Ajusta el tiempo en función del tiempo medio de resolución

        # Procede con las acciones de raspado después de que se resuelva el CAPTCHA
        # Ejemplo de acción: hacer clic en un botón o extraer texto
        self.assert_text("reCAPTCHA demo", "h1")  # Confirma el contenido de la página

    def tearDown(self):
        # Limpia y cierra el navegador después de la prueba
        self.driver.quit()
        super().tearDown()

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

Explicación:

  • Método setUp:

    • Anulamos el método setUp para configurar el navegador Chrome con la extensión de CapSolver antes de cada prueba.
    • Especificamos la ruta a la extensión de CapSolver y la añadimos a las opciones de Chrome.
    • Cerramos el controlador existente y creamos uno nuevo con las opciones actualizadas.
  • Método test_scrape_quotes:

    • Navegamos al sitio web de destino.
    • La extensión de CapSolver detectaría y resolvería automáticamente cualquier CAPTCHA.
    • Realizamos las tareas de raspado como de costumbre.
  • Método tearDown:

    • Nos aseguramos de que el navegador se cierre después de la prueba para liberar recursos.

Ejecutando el script:

bash Copy
python scrape_quotes_with_capsolver.py

Nota: Aunque quotes.toscrape.com no tiene CAPTCHAs, la integración de CapSolver prepara tu raspador para sitios que sí los tienen.

Código extra

Reclama tu Código extra para las mejores soluciones de captcha en CapSolver: scrape. Después de canjearlo, obtendrás un bono extra del 5% después de cada recarga, sin límite de veces.

Conclusión

En esta guía, hemos explorado cómo realizar el raspado web usando SeleniumBase, cubriendo las técnicas básicas de raspado y ejemplos más avanzados como el manejo de la paginación, el contenido dinámico y el envío de formularios. También hemos demostrado cómo integrar CapSolver en tus scripts de SeleniumBase para resolver CAPTCHAs automáticamente, asegurando sesiones de raspado ininterrumpidas.

Aviso de Cumplimiento: La información proporcionada en este blog es solo para fines informativos. CapSolver se compromete a cumplir con todas las leyes y regulaciones aplicables. El uso de la red de CapSolver para actividades ilegales, fraudulentas o abusivas está estrictamente prohibido y será investigado. Nuestras soluciones para la resolución de captcha mejoran la experiencia del usuario mientras garantizan un 100% de cumplimiento al ayudar a resolver las dificultades de captcha durante el rastreo de datos públicos. Fomentamos el uso responsable de nuestros servicios. Para obtener más información, visite nuestros Términos de Servicio y Política de Privacidad.

Máse

Error de Cloudflare 1006, 1007, 1008
Error de Cloudflare 1006, 1007, 1008 Solución para resolver | Cómo arreglarlo

¿Tienes problemas con errores de Cloudflare 1006, 1007 o 1008? Aprende soluciones prácticas para resolver estos rechazos de acceso y mejorar tu experiencia de rastreo web.

Cloudflare
Logo of CapSolver

Ethan Collins

05-Dec-2025

AI-LLM: La solución del futuro para el control de riesgos, el reconocimiento de imágenes y la resolución de CAPTCHA
IA-MLLE: La Solución del Futuro para el Control de Riesgos, Reconocimiento de Imágenes y Resolución de CAPTCHA

Una exploración profunda de cómo los LLMs reconfiguran la resolución de CAPTCHA gráficos, combinando el razonamiento de cero shots con la precisión de redes neuronales convolucionales para el control de riesgos moderno.

Logo of CapSolver

Adélia Cruz

05-Dec-2025

Cómo resolver CAPTCHAs durante el scraping web con Scrapling y CapSolver
Cómo resolver captchas al realizar scraping web con Scrapling y CapSolver

Scrapling + CapSolver permite el scraping automatizado con ReCaptcha v2/v3 y bypass de Cloudflare Turnstile.

web scraping
Logo of CapSolver

Ethan Collins

05-Dec-2025

Cambiar el Agente de Usuario en Selenium
Cambiar el Agente de Usuario en Selenium | Pasos y Mejores Prácticas

Cambiar el Agente de Usuario en Selenium es un paso crucial para muchas tareas de scraping web. Ayuda a disfrazar el script de automatización como un navegador regular...

The other captcha
Logo of CapSolver

Adélia Cruz

05-Dec-2025

Cómo identificar si la `action` es requerida para resolver Cloudflare Turnstile usando la extensión CapSolver
Cómo identificar si `action` es necesario para resolver Cloudflare Turnstile usando la extensión de CapSolver

Aprende a identificar la acción para resolver eficazmente el captcha de Cloudflare Turnstile. Sigue nuestra guía paso a paso sobre cómo usar las herramientas y técnicas de Capsolver.

Cloudflare
Logo of CapSolver

Adélia Cruz

05-Dec-2025

9proxy
Descubre el Poder de 9Proxy: Una Revisión Completa

En este artículo, te mostraremos qué es 9proxy y los servicios que ofrecen.

Partners
Logo of CapSolver

Emma Foster

04-Dec-2025