2009-12-23 9 views
6

Po pierwsze, nie jestem pewien, czy możliwe jest przechwycenie ekranu okna przeglądarki za pomocą php, a następnie , jak to zrobić?PHP: Jak przechwytywać ekran okna przeglądarki za pomocą php?

Jeśli to możliwe, najlepiej będzie, aby uchwycić tylko treścią strony wyłączeniem części przeglądarki, takie jak pasek menu, pasek narzędzi, pasku stanu, itp

Dzięki

+3

http://stackoverflow.com/questions/713938/how-can-i-generate-a-screenshot-of-a- strona internetowa-używanie-serwera-skryptu-skryptu – vsr

+0

Jestem specyficzny dla php, ale podzieliłeś się czymś fajnym dzięki :) – Sarfraz

Odpowiedz

9

Istnieje imagegrabscreen() i imagegrabwindow(), które pozwalają programowo tworzyć zrzuty ekranu z przeglądarki działającej na tym samym komputerze za pośrednictwem COM (tylko Win). Zobacz komentarze w podręczniku, jak pominąć chrome przeglądarki. Przy włączonej DCOM działałoby to również ze zdalnymi maszynami Windows, które zostały skonfigurowane, aby umożliwić dostęp przez DCOM.

W singuote dla tych, którzy powiedzieli, że PHP nie wie o przeglądarce, chciałbym zasugerować spojrzenie na get_browser() w podręczniku PHP. To niewiele, ale hej, to nie jest nic.

2

PHP wie nic o przeglądarce. W rzeczywistości zazwyczaj PHP zakończyło działanie, zanim przeglądarka otrzyma dane.

Jeśli jest to w ogóle możliwe, musi to być system po stronie klienta, taki jak Javascript. To może przechodzić przez DOM, a więc przechwycić model, który przeglądarka myśli, że wyświetla; ale nie przypominam sobie, żeby zobaczyłem jakiekolwiek narzędzie do przechwytywania rzeczywistej grafiki. W każdym razie nie jest jasne, co można zrobić z takimi informacjami. Przeglądarki nie zezwalają Javascriptowi na dostęp do lokalnych plików. Przypuszczam, że w zasadzie mógłbyś wysłać go z powrotem do serwera w wywołaniu Ajax.

+0

Cóż, znasz kod przeglądarki użytkownika. Ale nic o rzeczywistym komputerze klienta. –

1

Zasadniczo nieobsługiwany przez architekturę Internetu i nie bez powodu. Serwer, z którym się łączysz, nie powinien mieć więcej informacji o Tobie niż to konieczne do przetworzenia i odpowiedzi na Twoje żądanie. Serwer CERTYINLY nie powinien być w stanie przechwytywać informacji o tym, co przeglądasz na ekranie.

Powiedziałeś, że prawdopodobnie możesz podłączyć coś, co wymaga technologii po stronie klienta, takich jak ActiveX lub Flash lub Java, które przechwyciłyby ekran, a następnie wysłały go z powrotem do serwera w żądaniu AJAX, ale prawdopodobnie nie powinieneś. Nie potrafię sobie wyobrazić, jakiego rodzaju używałbyś dla takich rzeczy, inne niż być może debugowanie problemów z układem.

0

Nie można tego zrobić z PHP (po stronie serwera).

Ale można wyłuskać i użyć jednego z wielu konwerterów HTML na PDF, aby przechwycić obraz (i jest mnóstwo narzędzi do konwersji pliku PDF na coś innego).

6

To można zrobić całkowicie, wymaga to trochę więcej niż PHP. Mam aplikację napisaną w PHP, która wykonuje migawki stron internetowych w określonych odstępach czasu. To trochę skomplikowane, aby dostać się dzieje, ale oto kroki wziąłem na komputerze z systemem Linux:

  • Install Xvfb (lub VNC Server) do emulowania sesji X Windows w pamięci. Zacznij Xvfb na wyświetlaczu: 1
  • zainstalować Firefoksa
  • zainstalować ImageMagick
  • Utwórz skrypt bash, aby uruchomić Firefoksa w żądanym URL. Mój wyglądał tak:

.

#!/bin/bash 
DISPLAY=:1 firefox & 
sleep 2s 
DISPLAY=:1 firefox -kill-all & 
sleep 1s 
DISPLAY=:1 firefox -url $1 & 
sleep 5s 
DISPLAY=:1 import -window root /var/www/images/screenshots/$2.png 
  • Wykonaj skrypt z PHP:

.

exec ('sh ../scripts/screencap.sh ' . $url . ' ' . $file_name); 

Najtrudniejszą częścią dla mnie było przekonanie przeglądarki do pełnego ekranu podczas zrzutu ekranu. Ponieważ nie masz bezpośredniego dostępu do przeglądarki, musisz skonfigurować wszystko za pomocą plików konfiguracyjnych Firefoksa, co może trochę potrwać.

Przydatne linki, które pomogą Ci zacząć:

http://semicomplete.com/blog/geekery/xvfb-firefox.html http://www.webmasterworld.com/forum21/9182.htm

Powiązane problemy