php - con - Capturas de pantalla del sitio web
captura de pantalla con php (22)
¿Hay alguna forma de tomar una captura de pantalla de un sitio web en PHP y luego guardarlo en un archivo?
Bueno, PhantomJS es un navegador que se puede colocar fácilmente en un servidor e integrarlo en php. Puedes encontrar el código en WDudes. Han incluido muchas más funciones, como especificar el tamaño de la imagen, la memoria caché, la descarga como archivo o la visualización 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 screesnhot fresco:
screenshot.php? url = google.com & cache = 0Para descargar la imagen: screenshot.php? Url = google.com & download = true
Puede ver el tutorial aquí: Captura de pantalla de captura de un sitio web usando PHP sin API
Configuré finalmente usar https://github.com/microweber/screen como lo propuso @boksiora.
Inicialmente al intentar el http://screen.microweber.com/shot.php?url=https://.com/questions/757675/website-screenshots-using-php mencionado aquí lo que obtuve:
Please download this script from here https://github.com/microweber/screen
Estoy en Linux. Por lo tanto, si desea ejecutarlo, puede ajustar mis pasos a su entorno.
Aquí está el paso que hice en mi shell en la carpeta DOCUMENT_ROOT
:
$ 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 veas la screenshot , screenshot terminado. La discusión para una configuración más avanzada está disponible here y here .
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 - Agarra una ventana o su área de cliente usando un manejador 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..com'');
while($Browser->Busy){
com_message_pump(4000);
}
$img = imagegrabwindow($Browserhandle, 0);
$Browser->Quit();
imagepng($img, ''screenshot.png'');
?>
Edición: ¡ Nota, estas funciones están disponibles SOLAMENTE en los sistemas Windows!
Está en Python, pero al revisar la documentación y el código puede ver exactamente cómo se hace esto. Si puedes ejecutar python, entonces es una solución lista para ti:
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, código abierto, vaya al final de la página para obtener enlaces a documentación, código fuente y otra información.
Esto debería ser bueno para ti:
Asegúrese de descargar la distribución wkhtmltoimage!
Estoy en Windows, así que pude usar la función imagegrabwindow después de leer la sugerencia aquí desde stephan. Agregué en el recorte (para deshacerme del 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.
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 una tecnología de navegador más antigua y tienen problemas al renderizar muchos sitios, especialmente los sitios que usan webfonts, flexbox, svg y varias otras adiciones a las especificaciones de 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 de sitios web es urlbox.io . Es un servicio pagado, aunque hay una prueba gratuita de 7 días para probarlo sin comprometerse con ningún plan pagado.
Aquí hay un enlace a la documentación , y a continuación hay pasos simples para que funcione en PHP con el editor.
// 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:
He encontrado que esta es la mejor y más fácil herramienta en torno a: ScreenShotMachine . Es un servicio de pago, pero obtienes 100 capturas de pantalla gratuitas y puedes comprar otras 2,000 por (aproximadamente) $ 20, por lo que es una buena oferta. Tiene un uso muy simple, solo usas 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://.com&size=X");
$file = fopen("snapshots/stack.jpg", "w+");
fwrite($file, $url);
fclose($file);
die("saved file!");
?>
Tienen una muy buena documentación here , así que definitivamente deberías echar un vistazo.
No directamente. 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)
Puede utilizar la solución https://grabz.it .
Tiene una API de PHP que es muy flexible y se puede llamar de diferentes maneras, como desde un trabajo de computadora o una página web de PHP.
Para implementarlo, primero deberá obtener una clave de aplicación y un secreto y download el SDK (gratuito).
Y un ejemplo para su implementación. En primer lugar la 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");
Lo siguiente es guardar. Puede usar uno de los dos métodos de guardar, Save
si está disponible el identificador de devolución de llamada accesible y SaveTo
si no. Consulte la documentación para más details .
Puedes usar cutycapt.
kwhtml está en desuso y muestra la página como el navegador antiguo.
Puedes usar un navegador sin cabeza simple como PhantomJS para agarrar 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=https://.com/questions/757675/website-screenshots-using-php
Sí lo es. Si solo necesitas imagen de URL prueba esto
<img src=''http://zenithwebtechnologies.com.au/thumbnail.php?url=www.subway.com.au''>
Pase el 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
Sí. 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 this por ejemplo.
Editar:
Este link es útil para.
Si no desea utilizar ninguna herramienta de terceros, he encontrado una solución simple que utiliza la API de Google Page Insight .
Solo necesito llamar a su api con params screenshot=true
.
https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=www..com/&key={your_api_key}&screenshot=true
Para el sitio móvil, pase de vista &strategy=mobile
en parámetros,
https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=www..com/&key={your_api_key}&screenshot=true&strategy=mobile
DEMO .
Siempre uso la https://github.com/microweber/screen 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 debe tomar más de 3 minutos para aprender.
Todo depende de cómo desees tomar la captura de pantalla.
Puedes hacerlo a través de PHP, usando un servicio web para obtener la imagen por ti
grabz.it tiene un servicio web para hacer solo esto, aquí hay un artículo que muestra un ejemplo simple de cómo usar el servicio.
Utilicé page2images . Se basa en el cutycapt que es realmente rápido y estable. Si no desea dedicar demasiado tiempo al rendimiento y la configuración, debe utilizarlo. Si visita su sitio web, puede encontrar más detalles y código de muestra de PHP.
Utilicé bluga . La API le permite tomar 100 instantáneas al mes sin pagar, pero a veces usa 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, así que lo estoy usando para obtener representaciones para el diseño de la tableta y el móvil, así como la normal.
Hay api clientes para los siguientes idiomas:
PHP , Python , Ruby , Java , .Net C # , Perl y Bash (el script de shell parece que requiere perl)
cutycapt guarda las páginas web en la mayoría de los formatos de imagen (jpg, png ..), descárguelo desde su synaptic, funciona mucho mejor que wkhtmltopdf
webkit2html funciona en Mac OS X y Linux, es bastante simple de instalar y usar. Ver este tutorial .
Para Windows, puede ir con CutyCapt , que tiene una funcionalidad similar.
ÚLTIMA EDICIÓN : después de 7 años todavía estoy recibiendo votos por esta respuesta, pero creo que esta es ahora mucho más precisa.
Claro que puedes, pero necesitarás renderizar la página con algo. Si realmente solo quieres usar php, te sugiero HTMLTOPS , que representa la página y la genera en un archivo ps (ghostscript), luego, conviértelo en un .jpg, .png, .pdf ... puede ser un poco más lento con Páginas complejas (y no soportan 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 representar la página ... así debería estar bien. Tienes que instalarlo en tu servidor, también ...
ACTUALIZAR Ahora, con las nuevas características de HTML5 y JS, también es posible renderizar la página en un objeto de lienzo usando JavaScript. Aquí hay 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 renderizado el dom en el lienzo, puede enviarlo al servidor a través de ajax y guardarlo como un jpg.
EDITAR : Puede usar la herramienta imagemagick para transformar pdf a png. Mi versión de wkhtmltopdf no admite imágenes. Por ejemplo, convert html.pdf -append html.png
.
EDITAR : Este pequeño script de shell proporciona un ejemplo de uso simple / pero funcional en Linux con php5-cli y las herramientas mencionadas anteriormente.
EDIT : noté que el equipo de wkhtmltopdf está trabajando en otro proyecto: wkhtmltoimage, que le da el jpg directamente