Playwright + Navegador de raspado sin residuos: Chromium en la nube a través de CDP
Expert in Web Scraping Technologies
El dramaturgo impulsa un navegador; el Navegador de Scraping Sin Residuos le proporciona uno que ya vive en la nube, habla el Protocolo de Chrome DevTools y lleva egresos residenciales. Su llamada connect_over_cdp alcanza una sesión real de Chromium a través de wss://browser.scrapeless.com/api/v2/browser en lugar de un Chrome que tiene que instalar, parchear y evitar que destaque.
Ese único reemplazo —el lanzamiento local se convierte en una conexión remota— es toda la integración. El script de Playwright que ya conoce permanece igual. Lo que cambia es dónde se ejecuta el navegador y desde qué IP sale. Esta guía conecta Python Playwright al Navegador de Scraping Sin Residuos, renderiza una página de JavaScript, extrae datos estructurados de ella y fija la solicitud a un país específico, con cada ruta de código ejecutada contra el endpoint en vivo.
Por qué el Navegador de Scraping Sin Residuos para Playwright
El Navegador de Scraping es una sesión de Chromium en la nube a la que accede a través de CDP, por lo que Playwright lo trata exactamente como un navegador que lanzó él mismo. No hay Chrome local que descargar, ninguna bandera sin cabeza que disfrazar y ningún proceso de navegador compitiendo por memoria en su máquina. Se conecta, obtiene un objeto Browser, y toda la API de Playwright funciona contra él.
Tres propiedades son importantes para el scraping. La sesión renderiza JavaScript del lado del servidor, por lo que una página construida completamente por scripts del cliente llega con su DOM ya poblado. La conexión lleva egresos residenciales que puede fijar a un país, por lo que una página que geofecha su contenido ve tráfico de la región que solicitó. Y debido a que el navegador es remoto, la máquina que ejecuta su script nunca necesita una GPU, una pantalla o una compilación de Chromium parcheada; la mitad local es solo un cliente websocket que habla el Protocolo de Chrome DevTools.
Requisitos previos
Necesita Python 3.9 o superior, el paquete playwright, y una clave de API de Scrapeless. Obtenga la clave en el plan gratuito en app.scrapeless.com; el panel la muestra en la página de clave de API. La clave viaja en la URL de conexión como el parámetro de consulta token, por lo que debe guardarla en una variable de entorno en lugar de un literal en su código fuente.
No necesita un binario de navegador local. connect_over_cdp abre un websocket a un navegador que ya existe en la nube, por lo que el usual paso playwright install chromium es opcional aquí; el renderizado ocurre del lado de Scrapeless de la conexión.
Instalar
Instale el cliente de Playwright en su proyecto:
bash
pip install playwright
Coloque su clave en el entorno para que nunca aparezca en código o registros:
bash
export SCRAPELESS_API_KEY="su_clave_api_de_scrapeless"
Conectar Playwright al navegador en la nube
Construya la URL del websocket, luego entréguela a connect_over_cdp. El endpoint es wss://browser.scrapeless.com/api/v2/browser, y lee tres parámetros de consulta: token para su clave, sessionTTL para cuánto tiempo vive el navegador en segundos, y proxyCountry para la región de egreso. El transporte websocket en sí sigue el protocolo WebSocket, y la API de conexión de tipo de navegador de Playwright habla CDP sobre él:
python
import os
from urllib.parse import urlencode
from playwright.sync_api import sync_playwright
API_KEY = os.environ["SCRAPELESS_API_KEY"]
def scraping_browser_url(proxy_country="US", session_ttl=180):
params = urlencode({
"token": API_KEY,
"sessionTTL": session_ttl,
"proxyCountry": proxy_country,
})
return f"wss://browser.scrapeless.com/api/v2/browser?{params}"
sessionTTL limita cuánto tiempo vive un solo navegador; un valor corto está bien para una página, un valor más largo mantiene el navegador activo en un flujo de varios pasos. proxyCountry toma un código de dos letras. Todo lo demás es Playwright ordinario.
Renderizar una página de JavaScript y extraer
Apunte el navegador conectado a una página que construya su contenido en el cliente, y el DOM renderizado ya estará allí cuando la navegación se estabilice. La página de demostración a continuación envía un contenedor vacío y lo llena con JavaScript; una búsqueda HTTP simple devuelve cero filas, mientras que el navegador en la nube devuelve todas las diez porque ejecutó los scripts primero; el DOM que consulta es el que el modelo de análisis y scripting HTML produjo después de la ejecución.
python
import os
from urllib.parse import urlencode
from playwright.sync_api import sync_playwright
API_KEY = os.environ["SCRAPELESS_API_KEY"]
def scraping_browser_url(proxy_country="US", session_ttl=180):
params = urlencode({"token": API_KEY, "sessionTTL": session_ttl, "proxyCountry": proxy_country})
return f"wss://browser.scrapeless.com/api/v2/browser?{params}"
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(scraping_browser_url())
page = browser.new_page()
page.goto("https://quotes.toscrape.com/js/", wait_until="networkidle")
quotes = page.query_selector_all(".quote")
print("quote blocks on JS-rendered page:", len(quotes))
print("first author:", quotes[0].query_selector(".author").inner_text())
browser.close()
Al ejecutarlo imprime el conteo y el primer registro:
text
bloques de citas en la página renderizada por JS: 10
primer autor: Albert Einstein
La elección de wait_until="networkidle" es adecuada para una página cuyo contenido llega a través de una explosión de solicitudes impulsadas por scripts. En una página con mucho análisis que nunca se calma, cambie a domcontentloaded más una espera explícita por el selector que le interesa, para que la ejecución no se quede esperando una red que nunca se inactiva.
Obtenga su clave de API en el plan gratuito: app.scrapeless.com
Vinculación de salida a un país
Cambie un parámetro y la solicitud sale desde un país diferente. El código proxyCountry selecciona la región de salida residencial, que decide tanto la IP que un sitio ve como, para páginas geográficas restringidas, el contenido que sirve. Leer un punto final de eco IP desde dos regiones muestra que la dirección de salida cambia mientras el script nunca se mueve:
python
import os, json
from urllib.parse import urlencode
from playwright.sync_api import sync_playwright
CLAVE_API = os.environ["SCRAPELESS_API_KEY"]
def scraping_browser_url(pais):
return "wss://browser.scrapeless.com/api/v2/browser?" + urlencode(
{"token": CLAVE_API, "sessionTTL": 180, "proxyCountry": pais})
with sync_playwright() as p:
for pais in ("US", "GB"):
navegador = p.chromium.connect_over_cdp(scraping_browser_url(pais))
pagina = navegador.new_page()
pagina.goto("https://api.ipify.org?format=json", wait_until="domcontentloaded")
ip = json.loads(pagina.inner_text("pre, body"))["ip"]
print(f"proxyCountry={pais} -> IP de salida en la nube {ip}")
navegador.close()
Las dos conexiones salen desde dos direcciones diferentes, ninguna de las cuales es la de su máquina:
text
proxyCountry=US -> IP de salida en la nube 24.93.178.230
proxyCountry=GB -> IP de salida en la nube 109.149.20.197
Esa es la diferencia práctica de una ejecución local de Playwright: el navegador y su IP de salida están del lado de Scrapeless, por lo que los límites de tasa y las reglas geográficas se aplican a la región fijada en lugar de a su estación de trabajo.
Trabajando con la sesión
Todo lo que pasa después de la conexión es estándar de Playwright, porque el objeto que tiene es un Browser normal. pagina.screenshot() captura lo que Chromium en la nube ha renderizado, pagina.click() y pagina.fill() manejan formularios y pagina.evaluate() ejecuta JavaScript en el contexto de la página. Una sola conexión puede abrir varias páginas, y cerrar el navegador termina la sesión remota; si establece un largo sessionTTL y se desconecta sin cerrar, la sesión expira por sí sola cuando se agota el tiempo.
Mantenga su automatización dentro de los límites establecidos por un sitio. Lea los términos del objetivo y su el protocolo de exclusión de robots archivo, solicite solo páginas públicas y mantenga la concurrencia moderada. Renderizar una página en la nube no cambia lo que un sitio le permite recopilar. Para una visión más amplia sobre patrones de descubrimiento y extracción, la guía sobre cómo construir un raspador web desde cero se complementa bien con esta.
Conclusión
Conectar Playwright al Scraping Browser de Scrapeless mantiene su script y cambia el tiempo de ejecución. Aún escribe goto, query_selector_all, y screenshot; el navegador que los ejecuta es una sesión de Chromium en la nube con salida residencial que puede fijar por país, alcanzada a través de un solo websocket CDP. Las dos ejecuciones anteriores — diez citas de una página de JavaScript, dos IP de salida de dos regiones — son todo el contrato: renderizar del lado del servidor, extraer normalmente, controlar desde dónde sale el tráfico. Lea las capacidades actuales en la página del producto Scraping Browser y verifique los límites de sesión y salida según su volumen en la página de precios.
Únase a nuestra comunidad para reclamar un plan gratuito y comparar notas con otros desarrolladores que construyen automatización de navegadores: Discord · Telegram.
Preguntas Frecuentes
P: ¿Necesito instalar Chrome o ejecutar playwright install para usar el Scraping Browser?
No. El navegador se ejecuta en la nube de Scrapeless, por lo que connect_over_cdp solo necesita el paquete del cliente playwright. La descarga local del navegador solo importa si también inicias navegadores en tu propia máquina.
P: ¿Qué bindings de Playwright pueden conectarse a ello?
Cualquier binding de Playwright que exponga un método connect-over-CDP funciona, porque el punto final habla el Protocolo de Herramientas de Desarrollo de Chrome. Los ejemplos aquí usan sync_playwright de Python, y la misma URL se adapta a la API asíncrona y al binding de Node.
P: ¿Cómo hago que la solicitud provenga de un país específico?
Establece el parámetro de consulta proxyCountry en la URL de conexión con un código de país de dos letras. La conexión luego sale de un punto de salida residencial en esa región, que es como una página geo-restringida basa su contenido.
P: ¿En qué se diferencia esto de ejecutar Playwright localmente?
Una ejecución local lanza Chrome en tu máquina y sale desde tu IP. El Navegador de Scraping ejecuta Chromium en la nube con salida residencial, así que evitas completamente el navegador local y controlas la región de salida a través de un parámetro de consulta.
P: ¿Cuánto tiempo se mantiene abierta una sesión de navegador?
El parámetro sessionTTL establece la duración en segundos. Cerrar el navegador termina la sesión inmediatamente; si te desconectas sin cerrar, la sesión termina por sí sola cuando se agota el TTL.
P: ¿Puedo tomar capturas de pantalla y llenar formularios, o solo leer el DOM?
Está disponible la API completa de Playwright. Debido a que el objeto conectado es un Browser ordinario, page.screenshot(), page.click(), page.fill(), y page.evaluate() se comportan como lo hacen localmente.
P: ¿Qué estrategia de espera debo usar para páginas de JavaScript?
Usa networkidle para páginas cuyo contenido llega en un corto estallido de solicitudes, y domcontentloaded más una espera explícita por un selector conocido en páginas que mantienen una conexión en segundo plano abierta. El segundo patrón evita esperar en una red que nunca se apaga.
En Scrapeless, solo accedemos a datos disponibles públicamente y cumplimos estrictamente con las leyes, regulaciones y políticas de privacidad del sitio web aplicables. El contenido de este blog es sólo para fines de demostración y no implica ninguna actividad ilegal o infractora. No ofrecemos garantías y renunciamos a toda responsabilidad por el uso de la información de este blog o enlaces de terceros. Antes de realizar cualquier actividad de scraping, consulte a su asesor legal y revise los términos de servicio del sitio web de destino u obtenga los permisos necesarios.



