PHP'de bir web sitesinin ekran görüntüsünü alıp bir dosyaya kaydetmenin herhangi bir yolu var mı?
PHP'de bir web sitesinin ekran görüntüsünü alıp bir dosyaya kaydetmenin herhangi bir yolu var mı?
Yanıtlar:
SON DÜZENLEME : 7 yıl sonra hala bu cevap için oy alıyorum, ama sanırım bu şimdi çok daha doğru.
Elbette yapabilirsiniz, ancak sayfayı bir şeyle oluşturmanız gerekir. Eğer gerçekten sadece php kullanmak istiyorsanız, size bir ps dosyasında (ghostscript) çıktısı ve çıktısı HTMLTOPS , sonra, bir .jpg, .png, .pdf .. dönüştürmek öneririz ile biraz daha yavaş olabilir karmaşık sayfalar (ve tüm CSS’leri desteklemez).
Aksi takdirde, pdf, jpg, html sayfası çıktısını almak için wkhtmltopdf kullanabilirsiniz .. CSS2.0 kabul, sayfayı oluşturmak için webkit (safari sarıcı) kullanın .. bu yüzden iyi olmalı. Sunucunuza da yüklemeniz gerekiyor.
GÜNCELLEME Artık, yeni HTML5 ve JS özelliği ile, sayfayı JavaScript kullanarak bir tuval nesnesine dönüştürmek de mümkündür. İşte bunu yapmak için güzel bir kütüphane: Html2Canvas ve burada aynı yazarın G + gibi bir geri bildirim almak için bir uygulaması . Domu tuval haline getirdikten sonra, sunucuya ajax aracılığıyla gönderebilir ve bir jpg olarak kaydedebilirsiniz.
DÜZENLEME : Pdf'i png'ye dönüştürmek için imagemagick aracını kullanabilirsiniz. Wkhtmltopdf sürümüm resimleri desteklemiyor. Örn convert html.pdf -append html.png
.
EDIT : Bu küçük kabuk komut dosyası php5-cli ile linux ve yukarıda belirtilen araçları basit / ama çalışma kullanım örneği verir.
EDIT : şimdi fark wkhtmltopdf ekibi başka bir proje üzerinde çalışıyor: wkhtmltoimage, doğrudan jpg verir
PHP 5.2.2'den beri sadece PHP ile bir web sitesi yakalamak mümkün !
imagegrabscreen - Tüm ekranı yakalar
<?php
$img = imagegrabscreen();
imagepng($img, 'screenshot.png');
?>
imagegrabwindow - Bir pencere tanıtıcısı (COM örneğindeki HWND özelliği) kullanarak bir pencereyi veya istemci alanını tutar
<?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');
?>
Düzenleme: Not, bu işlevler SADECE Windows sistemlerinde kullanılabilir!
Herhangi bir üçüncü taraf aracı kullanmak istemiyorsanız, Google Page Insight API'sını kullanan basit bir çözümle karşılaştım .
Params ile api demeniz yeterlidir screenshot=true
.
https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=https://stackoverflow.com/&key={your_api_key}&screenshot=true
&strategy=mobile
Parametre cinsinden mobil site görüntüleme kartı için,
https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=http://stackoverflow.com/&key={your_api_key}&screenshot=true&strategy=mobile
DEMO .
Sayfayı yakalamak için PhantomJS gibi basit başsız tarayıcıyı kullanabilirsiniz.
Ayrıca PHP ile PhantomJS kullanabilirsiniz.
Bunu yapan bu küçük php betiğine göz atın. Buraya bir göz atın https://github.com/microweber/screen
Ve işte API- http://screen.microweber.com/shot.php?url=/programming/757675/website-screenshots-using-php
Bu sizin için iyi olmalı:
Wkhtmltoimage dağıtımını indirdiğinizden emin olun!
Evet. Bazı şeylere ihtiyacınız olacak:
Bkz . * Nx üzerindeki khtmld (aemon) . Windows için Url2Jpg dosyasına bakın, ancak dotNet uygulaması olduğundan Url2Bmp'yi de kontrol etmelisiniz
Her ikisi de ekran görüntüsünü almak için web uygulamanızdan kullanabileceğiniz konsol araçlarıdır.
Ayrıca sunan web hizmetleri de vardır. Örneğin bunu kontrol edin .
Düzenle:
Bu bağlantı için yararlıdır.
Python'da, ancak belgeleri ve kodu gözden geçirerek bunun nasıl yapıldığını tam olarak görebilirsiniz. Python'u çalıştırabiliyorsanız, sizin için hazır bir çözümdür:
Her şeyin bir platform için bir makinede veya diğer platformları çalıştıran sanal makinelere sahip bir makinede çalışabileceğini unutmayın.
Ücretsiz, açık kaynak, belgelere, kaynak koduna ve diğer bilgilere bağlantılar için sayfanın altına gidin.
Evet öyle. Yalnızca URL resmine ihtiyacınız varsa bunu deneyin
<img src='http://zenithwebtechnologies.com.au/thumbnail.php?url=www.subway.com.au'>
URL'yi bağımsız değişken olarak iletin ve daha fazla ayrıntı için resmi bu bağlantıyı kontrol edin http://zenithwebtechnologies.com.au/auto-thumbnail-generation-from-url.html
PhantomJS, bir sunucuya kolayca yerleştirilebilen ve php'ye entegre edebilen bir tarayıcıdır. Kodu WDudes'de bulabilirsiniz. Görüntü boyutunu belirleme, önbellek, dosya olarak indirme veya img src'de görüntüleme gibi daha birçok özellik içeriyorlar.
<img src=”screenshot.php?url=google.com” />
URL Parametreleri
Genişlik ve Yükseklik: screenshot.php? Url = google.com & w = 1000 & h = 800
Kırparak: screenshot.php? Url = google.com & w = 1000 & h = 800 & clipw = 800 & cliph = 600
Önbelleği devre dışı bırak ve yeni screesnhot yükle:
screenshot.php? Url = google.com & cache = 0
Görüntüyü indirmek için: screenshot.php? Url = google.com & download = true
Eğiticiyi burada görebilirsiniz: API olmadan PHP kullanarak bir web sitesinin ekran görüntüsünü yakalayın
Herhangi bir web sayfasının ekran görüntüsünü yakalamak için her zaman mikrodalga ekranını kullanırım. Burada iyi yazılmış bir öğretici bulabilirsiniz . Bu daha kolaydır ve öğrenmesi 3 dakikadan fazla sürmemelidir.
Sonunda @boksiora tarafından önerildiği gibi mikro / ekran kullanarak kurdum.
Başlangıçta burada belirtilen bağlantı çalışırken ne var:
Please download this script from here https://github.com/microweber/screen
Linux'tayım. Bu nedenle, çalıştırmak istiyorsanız, adım takibimi ortamınıza göre ayarlayabilirsiniz. Klasördeki
kabuğumda yaptığım adım 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
Tarayıcınızı üzerine getirin screen/demo/shot.php?url=google.com
. Ekran görüntüsünü gördüğünüzde işiniz bitti demektir. Daha fazla ilerleme ayarı için tartışma burada ve burada mevcuttur .
Ekran görüntüleri oluşturabilen birçok açık kaynaklı proje var. Örneğin PhantomJS, webkit2png vb.
Bu projelerdeki en büyük sorun, eski tarayıcı teknolojisine dayalı olmaları ve özellikle web fontları, flexbox, svg ve son birkaç ay / yıl boyunca HTML5 ve CSS spesifikasyonlarına çeşitli eklemeler kullanan siteler olmak üzere birçok siteyi oluşturmada sorun yaşamalarıdır.
Üçüncü taraf hizmetlerden birkaçını denedim ve çoğu PhantomJS'ye dayanıyor, yani düşük kaliteli ekran görüntüleri üretiyorlar. Web sitesi ekran görüntüleri oluşturmak için en iyi üçüncü taraf hizmeti urlbox.io'dur . Ücretli bir hizmettir, ancak herhangi bir ücretli plan taahhüt etmeden test etmek için 7 günlük ücretsiz bir deneme olmasına rağmen.
İşte belgelere bir bağlantı , ve aşağıda besteci ile PHP çalışmasını sağlamak için basit adımlar.
// 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" />
Örneğin, bu sayfanın tam yükseklikte bir ekran görüntüsü:
Çok fazla seçenek var ve hepsinin artıları ve eksileri var. Uygulama zorluğuna göre sıralanan seçeneklerin listesi.
Artıları
Eksileri
Artıları
Eksileri
Artıları
Eksileri
Artıları
Eksileri
Feragatname: ApiFlash'ın kurucusuyum. Dürüst ve faydalı bir cevap vermek için elimden geleni yaptım.
Windows'dayım, bu yüzden stephan'dan ipucunu okuduktan sonra imagegrabwindow işlevini kullanabildim. Kırpma ekledim (Tarayıcı başlığından, kaydırma çubuklarından vb. Kurtulmak için) ve son bir görüntü elde etmek için yeniden boyutlandırdım. İşte kodum . Umarım birine yardım eder.
webkit2html Mac OS X ve Linux üzerinde çalışır, kurulumu ve kullanımı oldukça basittir. Bu eğiticiye bakın .
Windows için, benzer işlevselliğe sahip CutyCapt ile gidebilirsiniz .
Bluga kullandım . API, ödemeden ayda 100 fotoğraf çekmenizi sağlar, ancak bazen tek bir sayfa için 1'den fazla kredi kullanır. Bir şablon veya giriş filtresinde bir küçük resim yazdırmanıza izin veren bir drupal modülü olan Bluga WebThumbs'ı drupal 7'ye yükseltmeyi yeni bitirdim .
Bu api'yi kullanmanın ana avantajı, uyarlanabilir css kullanmanız durumunda tarayıcı boyutlarını belirtmenize izin vermesidir, bu yüzden mobil ve tablet düzeni ve normal düzen için render almak için kullanıyorum.
Aşağıdaki diller için api istemcileri vardır:
PHP , Python , Ruby , Java , .Net C # , Perl ve Bash (kabuk betiği perl gerektiriyor gibi görünüyor)
Her şey ekran görüntüsünü nasıl çekmek istediğinize bağlıdır.
Bunu sizin için bir web servisi kullanarak PHP ile yapabilirsiniz
grabz.it'in sadece bunu yapmak için bir web servisi var, işte hizmeti kullanmanın basit bir örneğini gösteren bir makale.
Https://grabz.it çözümünü kullanabilirsiniz .
Çok esnek ve bir cronjob veya bir PHP web sayfasından farklı şekillerde çağrılabilen bir PHP API'sı var.
Uygulamak için önce bir uygulama anahtarı ve sırrı almanız ve (ücretsiz) SDK'yı indirmeniz gerekir.
Ve uygulama için bir örnek. Her şeyden önce başlatma:
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");
Ve ekran görüntüsü örneği:
// 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");
Bir sonraki adım, kaydetme yöntemidir.Genel olarak Save
erişilebilir geri arama tanıtıcısı varsa ve mevcut değilse , iki kaydetme yönteminden birini kullanabilirsiniz SaveTo
. Ayrıntılar için belgelere bakın .
Geçen gün Google API kullanarak bunu yapmak için hızlı ve kirli bir uygulama yazdım. Kesinlikle iyileştirme kapsamı ...
Canlı bir demo ve kod ile burada bulabilirsiniz .
Ben sadece burada rafine devam ve umarım zamanım olduğunda, uygun bir sınıfa dönüştürmek çünkü kodu burada posta vermedi.
Page2images kullandım . Gerçekten hızlı ve kararlı olan cutycapt'a dayanmaktadır. Performans ve yapılandırma için çok fazla zaman harcamak istemiyorsanız, bunu kullanmalısınız. Web sitelerine giderseniz, daha fazla ayrıntı ve örnek PHP kodu bulabilirsiniz.
Web'de sörf için çok sonra bunu buldum.
PPTRAAS > URL'nizi parametre olarak ileterek ekran görüntüsünü yakalamak için ücretsiz bir araç
URL'lerine basarak birden fazla seçenek sunarlar.
Tam sayfa ekran görüntüsünü alın
https://pptraas.com/screenshot?url= {BURADAN URL SİZ}
Belirli boyutta sayfa ekran görüntüsü alın
https://pptraas.com/screenshot?url= {BURADA URL'NİZ} & size = 400,400
Bir sayfa bile pdf dönüştürebilirsiniz
https://pptraas.com/pdf?url= {BURADAN URL SİZ}
2 şey yapabilirsin.
Kuklacı Kullan
Bir tarayıcı açmak ve ekran görüntüsü almak için PHP Kuklacı paketini kullanabilirsiniz.
Bir API kullanın
Çok sayıda ekran görüntüsü API'sı var. Örneğin , ScreenshotAPI.net'e bakabilirsiniz . (Feragatname ben bu API'nın yaratıcısıyım)
Dolaylı. Selenium gibi yazılımlar bu gibi özelliklere sahiptir ve PHP tarafından kontrol edilebilir, ancak başka bağımlılıklara da sahip olabilirler (java tabanlı sunucularını ekran görüntüsü almak istediğiniz tarayıcı ile bilgisayarda çalıştırmak gibi)
cutycapt kullanabilirsiniz.
kwhtml kullanımdan kaldırıldı ve sayfayı eski tarayıcı gibi göster.
Bunu en iyi ve en kolay araç olarak buldum: ScreenShotMachine . Bu ücretli bir hizmettir, ancak 100 ücretsiz ekran görüntüsü alırsınız ve yaklaşık 20 $ 'a 2.000 daha satın alabilirsiniz, bu yüzden oldukça iyi bir anlaşma. Çok basit bir kullanımı vardır, sadece bir URL kullanırsınız, bu yüzden buna dayanarak bir dosyayı kaydetmek için bu küçük komut dosyasını yazdım:
<?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!");
?>
Burada çok iyi bir belge var , bu yüzden kesinlikle bir göz atmalısınız.