Website Screenshot API
Capturas de pantalla y PDF de sitios web de página completa (PNG, JPEG, WebP) con presets de dispositivos y modo rápido.
Servidor MCP alojado
npx add-mcp 'https://mcp.apify.com/?actors=catalyst-labs/website-screenshot-pdf-api'Se instala en Claude Code, Codex, Cursor y más
Documentación
API de capturas de pantalla y PDF de sitios web (catalyst-labs/website-screenshot-pdf-api) Actor
Captura capturas de pantalla de página completa (PNG, JPEG, WebP) y PDF de cualquier URL. Elimina los banners de cookies, carga imágenes con carga diferida, corrige los encabezados fijos, renderiza emojis y texto CJK. Ajustes predefinidos para escritorio, tableta y móvil. Solo pagas por las capturas exitosas.
- URL: https://apify.com/catalyst-labs/website-screenshot-pdf-api.md
- Desarrollado por: Catalyst Labs (comunidad)
- Categorías: Herramientas para desarrolladores, IA, Automatización
- Estadísticas: 2 usuarios totales, 1 usuarios mensuales, 100,0% de ejecuciones exitosas, 0 marcadores
- Valoración de usuarios: Aún sin valoraciones
Precios
desde $5,00 / 1.000 capturas de pantalla realizadas
Este Actor se paga por evento. No se te cobra por el uso de la plataforma Apify, sino solo un precio fijo por eventos específicos. Dado que este Actor admite descuentos de Apify Store, el precio disminuye cuanto mayor sea tu plan de suscripción.
Más información: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event
¿Qué es un Actor de Apify?
Un Actor es un programa en la nube sin servidor que se ejecuta en la plataforma Apify. Tiene dos modos de ejecución. En el modo por lotes, un Actor acepta una entrada JSON bien definida, realiza una acción que puede tardar desde unos segundos hasta unas horas y, opcionalmente, produce una salida JSON bien definida, conjuntos de datos con resultados o archivos en el almacén de clave-valor. En el modo Standby, un Actor proporciona un servidor web que puede usarse como sitio web, API o servidor MCP.
El vocabulario de Apify y el modelo de la plataforma se definen una sola vez, en la guía de inicio rápido para agentes en https://apify.com/agents.md.
¿Cómo integrar un Actor?
Si te preguntan sobre integración, ayudas a los desarrolladores a integrar Actores en sus proyectos. Te adaptas a su stack y entregas integraciones que son seguras, bien documentadas y listas para producción.
No adivines una ruta de integración. Todas ellas están en la guía de inicio rápido para agentes en https://apify.com/agents.md: el servidor MCP de Apify, Agent Skills con la CLI de Apify, los clientes de JavaScript y Python, la API REST y la ruta sin cuenta para un agente sin humano que inicie sesión. También incluye la regla sobre indicar el costo antes de la primera ejecución de pago.
Para ver ejemplos ya conectados al esquema de entrada de este Actor, consulta la sección API a continuación.
Cada biblioteca cliente tiene documentación de referencia que la guía de inicio rápido no repite: JavaScript/TypeScript (npm install apify-client) y Python (pip install apify-client).
README
¿Qué es la API de capturas de pantalla y PDF de sitios web?
La API de capturas de pantalla y PDF de sitios web convierte cualquier URL pública en una captura de pantalla de página completa (PNG, JPEG o WebP) o un PDF, con un enlace directo a cada archivo. Dale una URL o unos pocos miles. Carga cada página en un navegador Chrome real, cierra los banners de cookies, carga las imágenes con carga diferida, muestra los encabezados fijos una sola vez en lugar de en cada pantalla, reproduce las animaciones activadas por desplazamiento hasta su estado final, oculta los widgets de chat y las ventanas emergentes, y luego captura la página en escritorio, tableta o móvil.
Solo pagas por los archivos que realmente se capturaron. Las páginas que fallan, se agotan por tiempo de espera, son bloqueadas por protección contra bots, devuelven un error HTTP o se renderizan en blanco se informan con un motivo y una sugerencia de solución, y nunca se cobran.
En Apify también obtienes una API REST, acceso MCP para agentes de IA, programación, webhooks e integraciones (Make, Zapier, n8n, Google Drive y más) sin ejecutar servidores ni navegadores tú mismo.
Cómo usar la API de capturas de pantalla y PDF de sitios web
- Haz clic en Probar gratis (o Iniciar) y abre la pestaña Entrada.
- Agrega tus URL, una por línea.
https://es opcional. - Elige los formatos (PNG es el predeterminado; agrega
pdf,jpegowebp) y un dispositivo (desktop,desktop-hd,laptop,tablet,mobile). - Haz clic en Iniciar. Cada archivo aparece en la pestaña Salida con una vista previa y un enlace de descarga
fileUrl. Los archivos están en el almacén de clave-valor de la ejecución, y el registroOUTPUTtiene un resumen de la ejecución.
Para agentes de IA
Qué hace: te da una imagen o un PDF de una página web para que puedas "verla": un registro del conjunto de datos por URL y formato, con fileUrl (un enlace de descarga directa), width/height, title y status.
Entrada mínima (solo se requiere urls):
{ "urls": ["https://example.com"] }
Primera llamada económica (un JPEG de la parte superior de la página, $0,018 en el plan Gratuito: $0,01 por inicio de ejecución + $0,008 por captura de pantalla):
{ "urls": ["https://example.com"], "formats": ["jpeg"], "fullPage": false }
- Nombre de la herramienta MCP:
catalyst-labs--website-screenshot-pdf-api(conectahttps://mcp.apify.com/?tools=catalyst-labs/website-screenshot-pdf-api), o usacall-actorconcatalyst-labs/website-screenshot-pdf-api. - Costo: $0,01 por ejecución, más $0,008 por captura de pantalla en el plan Gratuito (hasta $0,005 en Gold y superiores) y $0,012 por PDF. Las URL fallidas, bloqueadas, en blanco y omitidas son gratuitas. Pasa
maxTotalChargeUsden las opciones de ejecución para un límite máximo estricto. Las URL que no caben en el límite se omiten y se marcan comoSPENDING_LIMIT, y la ejecución aún termina como SUCCEEDED. - Campos de salida:
url,status(success/failed/skipped),format,fileUrl,key,bytes,width,height,pageHeight,truncatedAtMaxHeight,pdfPages,title,finalUrl,httpStatus,cookieBannerDismissed,errorType,hint. El registroOUTPUTenumera cada URL con su estado y unahintde solución, para que puedas reintentar por tu cuenta (por ejemplo, con un proxy residencial después deBLOCKED). - Velocidad: con los 4 GB predeterminados, una página típica tarda de 5 a 60 segundos, y las páginas muy altas o con muchas animaciones hasta unos 2 minutos (ahora se capturan por completo). Con 2 GB (medio vCPU), espera aproximadamente el doble. Dos páginas se ejecutan en paralelo con 2-4 GB de memoria (4 con 8 GB); las nuevas páginas esperan mientras la memoria o la CPU están saturadas. Permisos limitados, pago por evento, sin Standby.
- Límites conocidos: las páginas solo para inicio de sesión requieren
cookies. Los sitios con una fuerte protección contra bots (por ejemplo, NYTimes, WSJ, Indeed, G2 o Zillow) bloquean las IP de centros de datos. El proxy residencial de Apify (proxyConfiguration) logra pasar en algunos de ellos (El País, a veces NYTimes en nuestras pruebas) pero no de forma fiable en los muros más fuertes; esos fallan comoBLOCKEDy no se cobran. Las capturas de página completa se cortan enmaxHeight(36.000 píxeles de dispositivo predeterminados: 36.000 px CSS en escritorio, 12.000 en móvil a 3x; máximo 50.000 px CSS; WebP se detiene en 16.383 px), y el corte se indica en la salida.
Cuándo elegir esta herramienta
Datos que puedes verificar con la salida de la ejecución:
- Solo se cobra por los archivos entregados. Las URL fallidas, bloqueadas (verificación de bots), con error HTTP, en blanco y por encima del presupuesto se informan con
errorTypey unahint, y son gratuitas. - Cuatro formatos en una sola ejecución: PNG, JPEG, WebP y PDF (tamaño de papel, márgenes, horizontal, medios de impresión/pantalla, o una sola página larga).
- Banners de cookies cerrados en más de 30 plataformas de consentimiento (OneTrust, Didomi, Sourcepoint, Quantcast, Cookiebot, Usercentrics y otras) además de texto de "Aceptar" en más de 30 idiomas; probado en The Guardian, BBC, Spiegel, Le Monde, Corriere y nu.nl.
- Imágenes con carga diferida cargadas, páginas en crecimiento desplazadas hasta que dejan de crecer (con límite), animaciones activadas por desplazamiento finalizadas y encabezados fijos mostrados una sola vez en capturas de página completa; los emojis y el texto en chino/japonés/coreano/árabe se renderizan con fuentes incluidas.
- Probado en la nube de Apify con 39 URL × 2 dispositivos más 10 escenarios de opciones antes del lanzamiento (consulta Probado en).
Elige otra cosa si necesitas un endpoint HTTP en vivo con latencia inferior a un segundo (este Actor se ejecuta como trabajos por lotes, normalmente de 5 a 60 s por página) o acceso fiable a sitios detrás de protección empresarial contra bots.
¿Para quién es?
Agentes de IA y aplicaciones LLM
- Dale ojos a tu agente. Pasa
fileUrla un modelo de visión para comprobar un diseño, leer un gráfico o confirmar que una página cambió. - Predecible y seguro de automatizar. Cada URL obtiene exactamente un registro por formato con
statusyerrorType, y no se cobra nada por los fallos.
QA, verificaciones de lanzamiento y monitoreo
- Regresión visual y capturas de pantalla de lanzamiento en escritorio, tableta y móvil con resolución retina (el móvil es tamaño iPhone a 3x).
- Prográmalo (por ejemplo, cada mañana) con un
fileNamePrefixfijo para comparar páginas a lo largo del tiempo, o captura solo un componente concaptureSelector.
Archivo y cumplimiento
- PDF o imágenes de página completa con el título de la página, la URL final, el estado HTTP y la hora de captura, lo que funciona bien como evidencia de lo que mostró una página y cuándo. Usa
pdfMediaType: "print"para PDF de artículos limpios, opdfSinglePage: truepara una página larga sin saltos de página.
Pipelines de informes y SEO
- Páginas de competidores, landing pages y paneles capturados por lotes, enlazados directamente desde el conjunto de datos a Sheets, Slack o un informe.
Soluciones a las quejas más comunes sobre herramientas de capturas de pantalla
| Queja común (reseñas/problemas de Apify, foros de API de capturas de pantalla) | Qué hace este Actor |
|---|---|
| "La ventana emergente de cookies cubre el contenido" | Hace clic en Aceptar en unas 20 plataformas de consentimiento (OneTrust, Didomi, Sourcepoint, Quantcast, Cookiebot, Usercentrics, TrustArc, Google Funding Choices, iubenda, CookieYes...) o en un botón de aceptar en 18 idiomas, y luego oculta lo que queda. |
| "Barra de navegación fija repetida por toda la imagen de página completa" | stickyElements: "static" muestra los encabezados una vez en la parte superior; "hide" los elimina. |
| "Faltan imágenes/miniaturas" (carga diferida) | Desplaza la página por pasos con pausas cortas, sigue avanzando mientras la página crece (limitado por maxScrollHeight), promueve las imágenes data-src/loading=lazy, espera por ellas y luego vuelve arriba. |
| "Las secciones animadas están en blanco" (aparición gradual al desplazar) | Distribuye toda la página en un viewport alto para que se activen todos los disparadores de desplazamiento, y luego salta las animaciones CSS/JS a su fotograma final (freezeAnimations, activado por defecto). |
| "La parte inferior de las páginas largas está en blanco" | Pinta las secciones content-visibility, no rompe el desplazamiento del cuerpo y une mosaicos por encima del límite de captura única de ~16k píxeles de Chrome. |
| "Los emojis se muestran como cuadros", falta texto CJK | Incluye Noto Color Emoji, Noto CJK y fuentes principales. |
| "No se puede establecer la altura / capturar solo la parte superior" | fullPage: false, un width/height personalizado, maxHeight o captureSelector para un elemento. |
| "Carga para siempre / ejecución atascada" | Esperas limitadas en cada paso, un tiempo de espera estricto por URL y reinicio del navegador tras un fallo. Un anuncio lento no puede detener la ejecución. |
| "No funcionó y aun así usó mis créditos" | Solo se cobran las capturas reales. Las páginas de error, los muros de bots, los renderizados en blanco y los tiempos de espera son gratuitos e incluyen una sugerencia de solución. |
| "Demasiado lento cuando solo necesito la parte superior de la página" | fastMode: true opcional omite el desplazamiento paso a paso y la unión de mosaicos. En una prueba local (19 oct 2026, 5 sitios, una página a la vez) tardó 22 s en lugar de 49 s. |
| "Lento y caro" | Sin sorpresas de memoria por ejecución: un precio fijo por archivo, anuncios/rastreadores bloqueados y páginas en paralelo dimensionadas según la memoria de la ejecución. |
Ejemplo de entrada
{
"urls": ["https://apify.com", "https://www.theguardian.com/international"],
"formats": ["png", "pdf"],
"device": "mobile",
"dismissCookieBanners": true,
"stickyElements": "static",
"maxHeight": 20000
}
Todas las opciones están en la pestaña Entrada. Incluyen waitUntil, waitForSelector, delayMs, captureSelector, hideSelectors, customCss, darkMode, headers, cookies, las opciones de PDF (pdfFormat, pdfLandscape, pdfMargin, pdfMediaType, pdfSinglePage), captureErrorPages, captureBlockedPages, retryBlockedWithProxy, freezeAnimations, fastMode, maxScrollHeight, tiempos de espera, reintentos y proxy.
Ejemplo de salida
{
"url": "https://www.theguardian.com/international",
"status": "success",
"format": "png",
"fileUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/0000-www.theguardian.com-international.png?signature=...",
"key": "0000-www.theguardian.com-international.png",
"contentType": "image/png",
"bytes": 17235046,
"width": 1440,
"height": 22664,
"pageHeight": 22664,
"truncatedAtMaxHeight": false,
"device": "desktop",
"title": "News, sport and opinion from the Guardian's global edition | The Guardian",
"finalUrl": "https://www.theguardian.com/international",
"httpStatus": 200,
"cookieBannerDismissed": true,
"cookieBannerMethod": "known:button.sp_choice_type_11",
"errorType": null,
"charged": true,
"capturedAt": "2026-10-19T00:30:00.000Z"
}
Una URL fallida se ve así {"url": "https://www.nytimes.com/", "status": "failed", "errorType": "BLOCKED", "hint": "The site served a bot check. Retry with proxyConfiguration ...", "charged": false}.
Tipos de error: INVALID_URL, BLOCKED, HTTP_ERROR, DNS_ERROR, CONNECTION_ERROR, TLS_ERROR, TIMEOUT, SELECTOR_NOT_FOUND, BLANK_PAGE, BROWSER_CRASH, REDIRECT_LOOP, NETWORK_ERROR, SPENDING_LIMIT.
¿Cuánto cuesta capturar capturas de pantalla de sitios web?
Pago por evento. Solo pagas por los archivos que se entregaron, sin cargo adicional por el uso de la plataforma Apify. Los precios bajan con tu plan de Apify.
| Evento | Gratis | Bronze | Silver | Gold y superiores |
|---|---|---|---|---|
| Inicio de ejecución (una vez por ejecución) | $0.01 | $0.01 | $0.01 | $0.01 |
| Captura de pantalla (archivo PNG, JPEG o WebP) | $0.008 | $0.007 | $0.006 | $0.005 |
| Archivo PDF | $0.012 | $0.012 | $0.012 | $0.012 |
Ejemplos de coste (plan Gratis):
- 1 captura de pantalla: $0.018 ($0.01 de inicio de ejecución + $0.008).
- 100 capturas de página completa en una ejecución: $0.81.
- 1.000 capturas de pantalla en una ejecución: $8.01 ($5.01 en Gold).
- 1.000 URL como PNG y PDF a la vez: $20.01.
Las URL fallidas, bloqueadas, en blanco y omitidas no cuestan nada. Cada formato que solicites es un archivo independiente, y cada archivo se cobra una vez. Para limitar una ejecución, establece Coste máximo por ejecución (maxTotalChargeUsd). El Actor se detiene limpiamente antes del límite y marca las URL restantes como SPENDING_LIMIT. El crédito gratuito mensual de $5 de Apify cubre aproximadamente 600 capturas de pantalla en el plan Gratis cuando agrupas las URL en unas pocas ejecuciones. El tráfico de proxy, incluido el proxy residencial si lo activas, está incluido en estos precios.
Probado en
Cloud QA, 18 de octubre de 2026, compilación 1.0.13 (el código de captura de la compilación actual), ajustes predeterminados (4 GB, sin proxy configurado):
- Escritorio: 28 de 39 URL capturadas, longitud completa hasta el valor predeterminado de 36.000 px (React, Vercel, Linear, Figma, Notion, Airbnb, Amazon, Apple, Stripe, The Guardian, BBC, Le Monde, Spiegel, Corriere, nu.nl, Zillow, Baidu, Yahoo Japan, Naver, Wikipedia en ruso e inglés, Al Jazeera, Hacker News, GitHub, USA.gov, getemoji.com, Shopify, httpbin). Las páginas largas se devolvieron completas: Spiegel 32.257 px, Al Jazeera 26.568 px, getemoji.com 23.770 px, The Guardian 21.788 px. Rechazadas correctamente y sin cargo: 8 muros anti-bots (Unsplash, Medium, El País, Zeit, NYTimes, WSJ, G2, FT; cada una reintentada una vez a través de Apify Proxy), Indeed (conexión rechazada), un dominio inexistente y una página 404. El País y Medium pasan en algunas ejecuciones y en otras no (los muros anti-bots varían según la IP); El País se capturó a 20.971 px en una nueva comprobación.
- Móvil (iPhone, 3x): 28 de 39 capturadas, incluida El País. Zillow, Medium y los mismos muros anti-bots fuertes bloquearon esta ejecución; ninguno se cobró.
- Opciones: los 4 formatos en una ejecución, PDF Letter/apaisado/impresión, PDF de una sola página, captura de elemento, espera de selector, modo oscuro, viewport de tablet, tamaño personalizado y escala 2x, cabeceras y cookies personalizadas, selectores ocultos, CSS personalizado, prefijo de nombre de archivo, captura de página de error y recorte por altura máxima se comportaron como se esperaba; las URL no válidas, un error de DNS y un HTTP 500 fallaron con el tipo de error correcto y no se cobraron; un certificado TLS caducado y una respuesta lenta de 60 s se capturaron.
- Comprobación de facturación: en cada ejecución de QA, los archivos que Apify cobró coincidieron con los archivos entregados.
Preguntas frecuentes
¿Cuánto tiempo funcionan los enlaces a los archivos? fileUrl es un enlace firmado al almacén clave-valor de la ejecución, y cualquiera que tenga el enlace puede abrirlo, sin necesidad de token. El almacenamiento predeterminado de la ejecución se conserva durante 7 días en el plan Gratis de Apify y más tiempo en los planes de pago. Para conservar los archivos indefinidamente, renombra (name) el almacén clave-valor de la ejecución o copia los archivos a tu propio almacenamiento con una integración.
¿Puede capturar páginas detrás de un inicio de sesión? Sí, si pasas la cookies de sesión (o una cabecera Authorization). Captura solo páginas a las que tengas permiso de acceso.
¿Por qué falló un sitio con BLOCKED? Algunos sitios bloquean IPs de nube/centros de datos. De forma predeterminada, el Actor reintenta una URL bloqueada una vez a través de Apify Proxy (centro de datos) con un contexto de navegador nuevo (retryBlockedWithProxy, activado de forma predeterminada; se omite cuando configuras tu propio proxy). Si sigue bloqueada, reintenta con "proxyConfiguration": {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}. Esto ayuda en algunos sitios pero no en todos: en nuestras pruebas de octubre de 2026, los muros anti-bots más fuertes (WSJ, G2, Zillow, Indeed, FT) seguían bloqueando las IPs residenciales. Este Actor no cobra los intentos bloqueados.
¿Captura sitios HTTPS con errores de certificado? Sí. Los errores de certificado se ignoran, por lo que los sitios de staging caducados o autofirmados también se pueden capturar.
¿Páginas muy largas? Las páginas completas de hasta 36.000 píxeles de dispositivo se capturan de forma predeterminada (en escritorio, eso abarca un artículo completo de Wikipedia en inglés de unos 26.000 px o la página de inicio de Spiegel de unos 32.500 px). Aumenta maxHeight hasta 50.000 px CSS, o redúcelo para limitar el tamaño del archivo; WebP está limitado a 16.383 px. El tiempo de espera por URL se amplía automáticamente para páginas muy altas. Usa JPEG para archivos más pequeños: la página de inicio de The Guardian de 22.664 px ocupaba 17 MB como PNG y 2,8 MB como JPEG en nuestra prueba.
¿Hay un modo más rápido? Sí. Establece "fastMode": true. Omite el desplazamiento lento que carga imágenes diferidas y activa animaciones de desplazamiento, y toma una sola captura de página completa en lugar de unir mosaicos. Los muros de cookies, las ventanas emergentes y las cabeceras fijas se siguen gestionando, y el precio es el mismo. La contrapartida: las imágenes que solo se cargan al desplazarse pueden quedar en blanco (en stripe.com faltaban varias imágenes por debajo del pliegue), y las páginas se cortan a 16.000 píxeles de dispositivo (getemoji.com: 16.000 px en lugar de 23.770 px, con truncatedAtMaxHeight: true). Prueba local, 19 de octubre de 2026, las mismas 5 URL como PNG: example.com 0,8 s frente a 2,8 s, apify.com 6,9 s frente a 14,0 s, Wikipedia 1,9 s frente a 4,7 s, stripe.com 4,2 s frente a 13,3 s. Mantén el valor predeterminado para archivado y QA visual.
¿Es legal? Capturar páginas visibles públicamente suele estar bien, pero eres responsable de cómo usas las imágenes (derechos de autor, datos personales, términos de servicio). No lo uses para capturar contenido al que no tengas derecho de acceso.
¿Algo se rompió? Abre un issue en la pestaña Issues con la URL y el ID de ejecución. Las correcciones suelen publicarse en pocos días.
Esquema de entrada del Actor
urls (tipo: array):
Páginas web que capturar. Cada URL genera un archivo por formato. Se añade https:// si falta; los duplicados se eliminan y las entradas no válidas se notifican sin cargo. Ejemplo: ["https://apify.com", "example.com/pricing"]
formats (tipo: array):
Formatos de salida por URL: "png", "jpeg", "webp" (capturas de pantalla) y/o "pdf". Cada formato es un archivo y un cargo independientes. Predeterminado: ["png"]. Ejemplo: ["webp", "pdf"]
fullPage (tipo: boolean):
Capturar toda la página desplazable (true) o solo la primera pantalla/viewport (false). Predeterminado: true. Ejemplo: false para una miniatura rápida de la parte superior.
fastMode (tipo: boolean):
Cambia exhaustividad por velocidad. Omite el desplazamiento lento que carga imágenes diferidas y animaciones de desplazamiento, y toma una sola captura de página completa (hasta 16.000 px de dispositivo) en lugar de unir mosaicos, por lo que las páginas muy largas se cortan y pueden faltar imágenes por debajo del pliegue. Los muros de cookies, las ventanas emergentes y las cabeceras fijas se siguen gestionando. Mismo precio. Ejemplo: true
device (tipo: string):
Preajuste de viewport: "desktop" (1440x900), "desktop-hd" (1920x1080), "laptop" (1280x800), "tablet" (820x1180 @2x) o "mobile" (iPhone 390x844 @3x, user agent móvil). Predeterminado: "desktop". Ejemplo: "mobile"
width (tipo: integer):
Ancho de viewport personalizado en píxeles CSS; anula el ancho del preajuste. Ejemplo: 1366
height (tipo: integer):
Alto de viewport personalizado en píxeles CSS; anula el preajuste. Con fullPage false, esta es la altura de la imagen. Ejemplo: 768
deviceScaleFactor (tipo: integer):
Densidad de píxeles (1-3). 2 o 3 da imágenes nítidas tipo retina pero archivos más grandes. Predeterminado: según el preajuste (escritorio 1, móvil 3). Ejemplo: 2
maxHeight (tipo: integer):
Parte más larga de la página que capturar, en píxeles CSS. Déjalo vacío para el valor predeterminado: la página completa hasta 36.000 píxeles de dispositivo (36.000 px en escritorio, 18.000 en tablet, 12.000 en móvil), lo que abarca casi cualquier página real, incluidas portadas de noticias muy largas y listas de Wikipedia. Las páginas más largas se cortan aquí y se marcan con truncatedAtMaxHeight: true. Máximo 50.000 (PNG/JPEG también están limitados a 60.000 píxeles de dispositivo, WebP a 16.383). Ejemplo: 8000 para archivos más pequeños y rápidos.
quality (tipo: integer):
Calidad JPEG/WebP, 1-100. Se ignora para PNG y PDF. Predeterminado: 80. Ejemplo: 60 para archivos más pequeños.
waitUntil (tipo: string):
Cuándo se considera cargada la página: "domcontentloaded" (lo más rápido), "load" (predeterminado, espera hasta 15 s las imágenes) o "networkidle" (lo más lento, para aplicaciones de una sola página pesadas). Ejemplo: "networkidle"
waitForSelector (tipo: string):
Esperar hasta que este selector CSS sea visible antes de capturar (hasta navigationTimeoutSecs). Úsalo para aplicaciones que renderizan datos tarde. Falla como SELECTOR_NOT_FOUND (sin cargo) si nunca aparece. Ejemplo: "#main-chart"
captureSelector (tipo: string):
Capturar solo este elemento en lugar de la página (solo capturas de pantalla). Falla como SELECTOR_NOT_FOUND (sin cargo) si no existe. Ejemplo: "article", "#pricing-table"
delayMs (tipo: integer):
Espera adicional en milisegundos después de cargar y antes de capturar, para animaciones o widgets tardíos. Máximo 60000. Predeterminado: 0. Ejemplo: 2000
scrollToBottom (tipo: boolean):
Desplazarse por la página por pasos (con pausas breves) para que aparezcan las imágenes diferidas, las secciones activadas por desplazamiento y el contenido cargado al desplazarse; continúa mientras la página crece (con límite), luego vuelve arriba. Predeterminado: true. Ejemplo: false para capturas más rápidas de páginas cortas.
freezeAnimations (tipo: boolean):
Poner las animaciones CSS, transiciones y efectos de aparición al desplazarse (fundidos de entrada, deslizamientos, tarjetas animadas) en su estado final, para que la captura muestre la página terminada en lugar de secciones a medio fundir o vacías. Predeterminado: true. Ejemplo: false para capturar la página exactamente a mitad de animación.
dismissCookieBanners (tipo: boolean):
Hacer clic en "Aceptar" en los banners de cookies/consentimiento (unos 20 plataformas como OneTrust, Didomi, Sourcepoint, Cookiebot y Usercentrics, además de botones de aceptar en 18 idiomas) y ocultar lo que quede. Predeterminado: true. Ejemplo: false para capturar el propio banner.
hidePopups (tipo: boolean):
Ocultar ventanas emergentes de boletines, superposiciones a pantalla completa y widgets de chat (Intercom, Drift, HubSpot, Zendesk y otros). Predeterminado: true.
stickyElements (tipo: string):
Cómo gestionar las cabeceras fijas/sticky en capturas de página completa: "static" (mostrar una vez arriba, predeterminado), "hide" (eliminarlas) o "keep" (dejarlas como las dibuja el navegador; pueden repetirse). Ejemplo: "hide"
hideSelectors (tipo: array):
Selectores CSS de elementos que ocultar antes de capturar. Ejemplo: [".ad-slot", "#promo-bar"]
customCss (tipo: string):
CSS inyectado antes de capturar. Ejemplo: "body { font-size: 18px } .banner { display: none }"
headers (tipo: object):
Cabeceras HTTP adicionales enviadas con cada solicitud (Host, Content-Length y similares se ignoran). Ejemplo: {"Accept-Language": "de-DE", "Authorization": "Bearer abc"}
cookies (tipo: array):
Cookies establecidas antes de cargar, para páginas con sesión iniciada o específicas de una región. Cada una necesita name y value; el domain toma por defecto el host de la URL. Ejemplo: [{"name": "session", "value": "abc123", "domain": ".example.com"}]
darkMode (tipo: boolean):
Emular el esquema de color oscuro (prefers-color-scheme: dark). Solo cambia los sitios que admiten modo oscuro. Predeterminado: false.
blockAds (tipo: boolean):
Bloquear hosts comunes de publicidad y rastreo. Capturas más rápidas y limpias. Predeterminado: true.
pdfFormat (tipo: string):
Tamaño de papel del PDF: "A4" (predeterminado), "Letter", "Legal", "A3" o "Tabloid". Ejemplo: "Letter"
pdfLandscape (tipo: boolean):
Páginas PDF en horizontal. Predeterminado: false.
pdfMargin (tipo: string):
Margen de página del PDF en todos los lados, en unidades CSS. Predeterminado: "10mm". Ejemplo: "0" o "0.5in"
pdfPrintBackground (tipo: boolean):
Incluir colores e imágenes de fondo en los PDF. Predeterminado: true.
pdfMediaType (tipo: string):
Medio CSS para PDF: "screen" (se ve como el sitio web, predeterminado) o "print" (usa la hoja de estilos de impresión del sitio, a menudo más limpia para artículos). Ejemplo: "print"
pdfSinglePage (tipo: boolean):
Convierte el PDF en una sola página larga con la altura completa de la página y sin saltos de página, como una captura de pantalla de página completa en formato vectorial. Predeterminado: false.
captureErrorPages (tipo: boolean):
Captura y cobra las páginas que devuelven HTTP 4xx/5xx (por ejemplo, para documentar un 404). Predeterminado: false, por lo que las páginas de error fallan como HTTP_ERROR y no se cobran.
captureBlockedPages (tipo: boolean):
Captura y cobra las páginas de verificación de bots/desafíos (Cloudflare, DataDome...) en lugar de fallar como BLOCKED. Predeterminado: false, por lo que las páginas bloqueadas no se cobran.
retryBlockedWithProxy (tipo: boolean):
Cuando un sitio responde con una verificación de bots y no configuraste tu propio proxy, reintenta esa URL una vez a través de Apify Proxy (centro de datos) con un navegador normal y nuevo. Las páginas bloqueadas nunca se cobran, tanto si el reintento funciona como si no. Predeterminado: true. Ejemplo: false para fallar rápido en sitios bloqueados.
navigationTimeoutSecs (tipo: integer):
Segundos de espera para que la página empiece a cargar y para waitForSelector. Predeterminado: 45. Ejemplo: 90 para sitios lentos.
pageTimeoutSecs (tipo: integer):
Límite de tiempo en segundos para una URL (carga, desplazamiento y captura). Déjalo vacío para 120 s, o hasta 240 s automáticamente en ejecuciones con menos de 4 GB de memoria (menos de 1 vCPU). Las páginas muy altas reciben automáticamente tiempo extra (hasta +120 s) una vez que se conoce su altura.
maxRetries (tipo: integer):
Reintentos para errores temporales (tiempos de espera agotados, red, fallos, páginas en blanco). Los errores de DNS, HTTP y de selector no se reintentan. Predeterminado: 1. Ejemplo: 2
maxConcurrency (tipo: integer):
Cuántas páginas cargar en paralelo. Déjalo vacío para el modo automático: 1 por debajo de 2 GB de memoria, 2 con 2–4 GB, luego 1 por cada 2 GB (4 con 8 GB, máx. 8). Las páginas nuevas también esperan mientras la memoria supera el 70% o la CPU está saturada, y solo se maqueta una página muy alta por vCPU a la vez.
perHostConcurrency (tipo: integer):
Máximo de páginas en paralelo en el mismo sitio web, para ser respetuoso y evitar límites de velocidad. Predeterminado: 2.
proxyConfiguration (tipo: object):
Proxy para todas las solicitudes. No es necesario para la mayoría de los sitios; para los sitios que bloquean centros de datos, usa el proxy residencial de Apify. Ejemplo: {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}
fileNamePrefix (tipo: string):
Prefijo para las claves de archivo en el almacén de clave-valor. Ejemplo: "release-42" genera claves como "release-42-0000-example.com.png"
Ejemplo de objeto de entrada del Actor
{
"urls": [
"https://apify.com",
"https://en.wikipedia.org/wiki/Web_scraping"
],
"formats": [
"png"
],
"fullPage": true,
"fastMode": false,
"device": "desktop",
"quality": 80,
"waitUntil": "load",
"delayMs": 0,
"scrollToBottom": true,
"freezeAnimations": true,
"dismissCookieBanners": true,
"hidePopups": true,
"stickyElements": "static",
"headers": {},
"cookies": [],
"darkMode": false,
"blockAds": true,
"pdfFormat": "A4",
"pdfLandscape": false,
"pdfMargin": "10mm",
"pdfPrintBackground": true,
"pdfMediaType": "screen",
"pdfSinglePage": false,
"captureErrorPages": false,
"captureBlockedPages": false,
"retryBlockedWithProxy": true,
"navigationTimeoutSecs": 45,
"maxRetries": 1,
"perHostConcurrency": 2,
"proxyConfiguration": {
"useApifyProxy": false
}
}
Esquema de salida del Actor
captures (tipo: string):
Registros de éxito y fallo: fileUrl, status, format, width/height, pdfPages, errorType.
files (tipo: string):
Todos los archivos PNG/JPEG/WebP/PDF de esta ejecución.
summary (tipo: string):
Recuentos de URLs correctas, fallidas y omitidas, tipos de error y eventos cobrados.
API
Puedes ejecutar este Actor mediante programación usando nuestra API. A continuación se muestran ejemplos de código en JavaScript, Python y CLI, así como la especificación OpenAPI y la configuración del servidor MCP.
Ejemplo en JavaScript
import { ApifyClient } from 'apify-client';
// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
token: '<YOUR_API_TOKEN>',
});
// Prepare Actor input
const input = {
"urls": [
"https://apify.com",
"https://en.wikipedia.org/wiki/Web_scraping"
],
"headers": {},
"cookies": [],
"proxyConfiguration": {
"useApifyProxy": false
}
};
// Run the Actor and wait for it to finish
const run = await client.actor("catalyst-labs/website-screenshot-pdf-api").call(input);
// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
console.dir(item);
});
// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs
Ejemplo en Python
from apify_client import ApifyClient
# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")
# Prepare the Actor input
run_input = {
"urls": [
"https://apify.com",
"https://en.wikipedia.org/wiki/Web_scraping",
],
"headers": {},
"cookies": [],
"proxyConfiguration": { "useApifyProxy": False },
}
# Run the Actor and wait for it to finish
run = client.actor("catalyst-labs/website-screenshot-pdf-api").call(run_input=run_input)
# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item)
# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start
Ejemplo en CLI
echo '{
"urls": [
"https://apify.com",
"https://en.wikipedia.org/wiki/Web_scraping"
],
"headers": {},
"cookies": [],
"proxyConfiguration": {
"useApifyProxy": false
}
}' |
apify call catalyst-labs/website-screenshot-pdf-api --silent --output-dataset
Configuración del servidor MCP
{
"mcpServers": {
"apify": {
"type": "http",
"url": "https://mcp.apify.com/?tools=fetch-actor-details,catalyst-labs/website-screenshot-pdf-api"
}
}
}
El servidor alojado te autentica con OAuth en la primera conexión, por lo que no se incluye ningún token de API en esta configuración. Los clientes sin compatibilidad con OAuth pueden enviar en su lugar un encabezado Authorization: Bearer <APIFY_API_TOKEN>, usando un token de API e integraciones en Apify Console (https://console.apify.com/settings/integrations).
Especificación OpenAPI
Descarga la definición OpenAPI: https://api.apify.com/v2/actors/Q0IjIMqCA5OnecDNj/builds/hwhtQ8ZfwCzhJ2pAQ/openapi.json