¿Hay alguna forma de tomar una captura de pantalla de un sitio web en PHP y luego guardarlo en un archivo?
¿Hay alguna forma de tomar una captura de pantalla de un sitio web en PHP y luego guardarlo en un archivo?
Respuestas:
ÚLTIMA EDICIÓN : después de 7 años todavía estoy recibiendo votos positivos para esta respuesta, pero supongo que esta es ahora mucho más precisa.
Claro que puedes, pero necesitarás renderizar la página con algo. Si realmente desea usar solo php, le sugiero HTMLTOPS , que representa la página y la muestra en un archivo ps (ghostscript), luego, conviértalo en un .jpg, .png, .pdf ... puede ser un poco más lento con páginas complejas (y no admiten todo el CSS).
De lo contrario, puede usar wkhtmltopdf para generar una página html en pdf, jpg, lo que sea ... Acepte CSS2.0, use el webkit (envoltorio de safari) para renderizar la página ... así que debería estar bien. También debes instalarlo en tu servidor.
ACTUALIZAR Ahora, con la nueva característica HTML5 y JS, también es posible renderizar la página en un objeto de lienzo usando JavaScript. Aquí una buena biblioteca para hacer eso: Html2Canvas y aquí hay una implementación del mismo autor para obtener comentarios como G +. Una vez que haya procesado el dom en el lienzo, puede enviarlo al servidor a través de ajax y guardarlo como jpg.
EDITAR : puede usar la herramienta imagemagick para transformar pdf a png. Mi versión de wkhtmltopdf no admite imágenes. Por ej convert html.pdf -append html.png
.
EDITAR : Este pequeño script de shell ofrece un ejemplo de uso simple pero funcional en Linux con php5-cli y las herramientas mencionadas anteriormente.
EDITAR : ahora me di cuenta de que el equipo de wkhtmltopdf está trabajando en otro proyecto: wkhtmltoimage, que le da el jpg directamente
¡Desde PHP 5.2.2 es posible capturar un sitio web con PHP únicamente !
imagegrabscreen : captura toda la pantalla
<?php
$img = imagegrabscreen();
imagepng($img, 'screenshot.png');
?>
imagegrabwindow : toma una ventana o su área de cliente utilizando un identificador de ventanas (propiedad HWND en la instancia COM)
<?php
$Browser = new COM('InternetExplorer.Application');
$Browserhandle = $Browser->HWND;
$Browser->Visible = true;
$Browser->Fullscreen = true;
$Browser->Navigate('http://www.stackoverflow.com');
while($Browser->Busy){
com_message_pump(4000);
}
$img = imagegrabwindow($Browserhandle, 0);
$Browser->Quit();
imagepng($img, 'screenshot.png');
?>
Editar: ¡ Tenga en cuenta que estas funciones están disponibles SOLO en sistemas Windows!
Si no desea utilizar herramientas de terceros, he encontrado una solución simple que está utilizando la API de Google Page Insight .
Solo necesito llamarlo es api con params screenshot=true
.
https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=https://stackoverflow.com/&key={your_api_key}&screenshot=true
Para la vista de sitio móvil pase &strategy=mobile
en parámetros,
https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=http://stackoverflow.com/&key={your_api_key}&screenshot=true&strategy=mobile
DEMO .
Puede usar un navegador simple sin cabeza como PhantomJS para capturar la página.
También puedes usar PhantomJS con PHP.
Echa un vistazo a este pequeño script PHP que hace esto. Echa un vistazo aquí https://github.com/microweber/screen
Y aquí está la API- http://screen.microweber.com/shot.php?url=/programming/757675/website-screenshots-using-php
Esto debería ser bueno para ti:
¡Asegúrese de descargar la distribución wkhtmltoimage!
Si. Necesitarás algunas cosas aunque:
Ver khtmld (aemon) en * nx. Consulte Url2Jpg para Windows, pero como es la aplicación dotNet, también debe consultar Url2Bmp
Ambas son herramientas de consola que puede utilizar desde su aplicación web para obtener la captura de pantalla.
También hay servicios web que lo ofrecen. Mira esto por ejemplo.
Editar:
Este enlace es útil para.
Está en Python, pero repasando la documentación y el código puede ver exactamente cómo se hace. Si puede ejecutar python, entonces es una solución preparada para usted:
Tenga en cuenta que todo puede ejecutarse en una máquina para una plataforma, o una máquina con máquinas virtuales que ejecutan las otras plataformas.
Gratis, de código abierto, desplácese hasta la parte inferior de la página para obtener enlaces a la documentación, el código fuente y otra información.
Sí lo es. Si solo necesita una imagen de URL intente esto
<img src='http://zenithwebtechnologies.com.au/thumbnail.php?url=www.subway.com.au'>
Pase la url como argumento y obtendrá la imagen para obtener más detalles, consulte este enlace http://zenithwebtechnologies.com.au/auto-thumbnail-generation-from-url.html
Bueno, PhantomJS es un navegador que se puede poner fácilmente en un servidor e integrarlo en php. Puede encontrar el código en WDudes. Han incluido muchas más funciones, como especificar el tamaño de la imagen, el caché, descargar como archivo o mostrar en img src, etc.
<img src=”screenshot.php?url=google.com” />
Parámetros de URL
Ancho y alto: screenshot.php? Url = google.com & w = 1000 & h = 800
Con recorte: screenshot.php? Url = google.com & w = 1000 & h = 800 & clipw = 800 & cliph = 600
Deshabilite el caché y cargue un nuevo screesnhot:
screenshot.php? Url = google.com & cache = 0
Para descargar la imagen: screenshot.php? Url = google.com & download = true
Puedes ver el tutorial aquí: Captura de pantalla de un sitio web usando PHP sin API
Siempre uso la pantalla de microweber para capturar capturas de pantalla de cualquier página web. Aquí podemos encontrar un tutorial bien escrito . Esto es más fácil y no debería tomar más de 3 minutos para aprender.
Finalmente lo configuré usando microweber / screen como lo propuso @boksiora.
Inicialmente cuando probé el enlace mencionado aquí, lo que obtuve:
Please download this script from here https://github.com/microweber/screen
Estoy en Linux Entonces, si desea ejecutarlo, puede ajustar mi paso a su entorno.
Aquí están los pasos que hice en mi shell en la DOCUMENT_ROOT
carpeta:
$ sudo wget https://github.com/microweber/screen/archive/master.zip
$ sudo unzip master.zip
$ sudo mv screen-master screen
$ sudo chmod +x screen/bin/phantomjs
$ sudo yum install fontconfig
$ sudo yum install freetype*
$ cd screen
$ sudo curl -sS https://getcomposer.org/installer | php
$ sudo php composer.phar update
$ cd ..
$ sudo chown -R apache screen
$ sudo chgrp -R www screen
$ sudo service httpd restart
Apunte su navegador a screen/demo/shot.php?url=google.com
. Cuando vea la captura de pantalla , habrá terminado. La discusión para una configuración más avanzada está disponible aquí y aquí .
Hay muchos proyectos de código abierto que pueden generar capturas de pantalla. Por ejemplo PhantomJS, webkit2png, etc.
El gran problema con estos proyectos es que se basan en tecnología de navegador más antigua y tienen problemas para representar muchos sitios, especialmente sitios que usan fuentes web, flexbox, svg y varias otras adiciones a las especificaciones HTML5 y CSS en los últimos meses / años.
He probado algunos de los servicios de terceros, y la mayoría se basan en PhantomJS, lo que significa que también producen capturas de pantalla de baja calidad. El mejor servicio de terceros para generar capturas de pantalla del sitio web es urlbox.io . Es un servicio pago, aunque hay una prueba gratuita de 7 días para probarlo sin comprometerse con ningún plan pago.
Aquí hay un enlace a la documentación , y a continuación hay pasos simples para que funcione en PHP con Composer.
// 1 . Get the urlbox/screenshots composer package (on command line):
composer require urlbox/screenshots
// 2. Set up the composer package with Urlbox API credentials:
$urlbox = UrlboxRenderer::fromCredentials('API_KEY', 'API_SECRET');
// 3. Set your options (all options such as full page/full height screenshots, retina resolution, viewport dimensions, thumbnail width etc can be set here. See the docs for more.)
$options['url'] = 'example.com';
// 4. Generate the Urlbox url
$urlboxUrl = $urlbox->generateUrl($options);
// $urlboxUrl is now 'https://api.urlbox.io/v1/API_KEY/TOKEN/png?url=example.com'
// 5. Now stick it in an img tag, when the image is loaded in browser, the API call to urlbox will be triggered and a nice PNG screenshot will be generated!
<img src="$urlboxUrl" />
Por ejemplo, aquí hay una captura de pantalla de altura completa de esta misma página:
Hay muchas opciones y todas tienen sus ventajas y desventajas. Aquí hay una lista de opciones ordenadas por dificultad de implementación.
Pros
Contras
Pros
Contras
Pros
Contras
Pros
Contras
Descargo de responsabilidad: soy el fundador de ApiFlash. Hice mi mejor esfuerzo para proporcionar una respuesta honesta y útil.
Estoy en Windows, así que pude usar la función imagegrabwindow después de leer el consejo aquí de stephan. Agregué recortar (para eliminar el encabezado del navegador, las barras de desplazamiento, etc.) y cambiar el tamaño para obtener una imagen final. Aquí está mi código . Espero que ayude a alguien.
webkit2html funciona en Mac OS X y Linux, es bastante simple de instalar y usar. Mira este tutorial .
Para Windows, puede usar CutyCapt , que tiene una funcionalidad similar.
Yo solía bluga . La API le permite tomar 100 instantáneas al mes sin pagar, pero a veces utiliza más de 1 crédito para una sola página. Acabo de terminar de actualizar un módulo de drupal, Bluga WebThumbs a drupal 7, que le permite imprimir una miniatura en una plantilla o filtro de entrada.
La principal ventaja de usar esta API es que le permite especificar las dimensiones del navegador en caso de que use CSS adaptable, por lo que lo estoy usando para obtener representaciones para el diseño móvil y de la tableta, así como para el habitual.
Hay clientes api para los siguientes idiomas:
PHP , Python , Ruby , Java , .Net C # , Perl y Bash (el script de shell parece que requiere perl)
Todo depende de cómo desee tomar la captura de pantalla.
Puede hacerlo a través de PHP, utilizando un servicio web para obtener la imagen.
grabz.it tiene un servicio web para hacer esto, aquí hay un artículo que muestra un ejemplo simple de uso del servicio.
Puede usar la solución https://grabz.it .
Tiene una API PHP que es muy flexible y se puede llamar de diferentes maneras, como desde un cronjob o una página web PHP.
Para implementarlo, primero deberá obtener una clave y un secreto de la aplicación y descargar el SDK (gratuito).
Y un ejemplo de implementación. Primero de todo inicialización:
include("GrabzItClient.class.php");
// Create the GrabzItClient class
// Replace "APPLICATION KEY", "APPLICATION SECRET" with the values from your account!
$grabzIt = new GrabzItClient("Sign in to view your Application Key", "Sign in to view your Application Secret");
Y ejemplo de captura de pantalla:
// To take a image screenshot
$grabzIt->URLToImage("http://www.google.com");
// Or to take a PDF screenshot
$grabzIt->URLToPDF("http://www.google.com");
// Or to convert online videos into animated GIF's
$grabzIt->URLToAnimation("http://www.example.com/video.avi");
// Or to capture table(s)
$grabzIt->URLToTable("http://www.google.com");
El siguiente es el ahorro. Puede usar uno de los dos métodos de guardado, Save
si el controlador de devolución de llamada de acceso público está disponible y SaveTo
si no. Consulte la documentación para más detalles .
Escribí una aplicación rápida y sucia el otro día para hacer esto usando la API de Google. Sin duda, posibilidades de mejora ...
Encuéntrelo aquí con una demostración en vivo y un código .
No publiqué el código aquí simplemente porque sigo refinándolo y con suerte, cuando tenga tiempo, conviértalo en una clase adecuada.
Solía page2images . Está desarrollado en base al cutycapt que es realmente rápido y estable. Si no desea pasar demasiado tiempo en el rendimiento y la configuración, debe usarlo. Si va a su sitio web, puede encontrar más detalles y ejemplos de código PHP.
Después de mucho navegar en la web, encontré esto.
PPTRAAS > Una herramienta gratuita para capturar capturas de pantalla pasando su URL como parámetro
Proporcionan múltiples opciones simplemente presionando su URL.
Obtener captura de pantalla de página completa
https://pptraas.com/screenshot?url= {USTED URL AQUÍ}
Obtener captura de pantalla de página de tamaño específico
https://pptraas.com/screenshot?url= {YOU URL AQUÍ} & size = 400,400
Incluso se puede convertir la página a pdf
https://pptraas.com/pdf?url= {USTED URL AQUÍ}
Podrías hacer 2 cosas.
Usar titiritero
Puede usar el paquete PHP Puppeteer para activar un navegador y tomar una captura de pantalla.
Use una API
Hay muchas API de captura de pantalla. Podrías mirar ScreenshotAPI.net por ejemplo. (Descargo de responsabilidad Soy el creador de esa API)
No directamente. El software como Selenium tiene características como esta y puede ser controlado por PHP, pero tiene otras dependencias (como ejecutar su servidor basado en Java en la computadora con el navegador que desea capturar)
puedes usar cutycapt.
kwhtml está en desuso y muestra la página como un navegador antiguo.
He encontrado que esta es la mejor y más fácil herramienta: ScreenShotMachine . Es un servicio pago, pero obtienes 100 capturas de pantalla gratis y puedes comprar otras 2,000 por (aproximadamente) $ 20, por lo que es un buen negocio. Tiene un uso muy simple, solo usa una URL, así que escribí este pequeño script para guardar un archivo basado en él:
<?php
$url = file_get_contents("http://api.screenshotmachine.com/?key={mykey}&url=https://stackoverflow.com&size=X");
$file = fopen("snapshots/stack.jpg", "w+");
fwrite($file, $url);
fclose($file);
die("saved file!");
?>
Tienen una muy buena documentación aquí , por lo que definitivamente deberías echar un vistazo.