PhantomJS - Szybki przewodnik

PhantomJS mówi się, że jest headless browserponieważ przeglądarka nie angażuje się podczas wykonywania kodu JavaScript. Wykonanie nie będzie widoczne na ekranie przeglądarki, ale w wierszu poleceń. Funkcjonalności takie jakCSS Handling, DOM Manipulation, JSON, Ajax, Canvas, SVG,itd., wszystkie zostaną uwzględnione w wierszu polecenia. PhantomJS nie posiada GUI i dlatego całe jego wykonanie odbywa się z linii poleceń.

Korzystając z PhantomJS, możemy pisać do pliku, czytać zawartość pliku lub przesyłać plik, robić zrzut ekranu, konwertować stronę internetową do pliku PDF i wiele więcej. W przypadku przeglądarek bezgłowych otrzymujesz wszystkie zachowania przeglądarki, tjCookies, Http Request Methods to znaczy GET /POST, Clearing Cookies, Deleting Cookiesitp., Reloading of Page, Navigating to a Different Page.

PhantomJS wykorzystuje WebKit, który ma podobne środowisko przeglądania jak słynne przeglądarki - Google Chrome, Mozilla Firefox, Safari itp. Zapewnia również dużo API JavaScript, które pomaga w robieniu zrzutów ekranu, przesyłaniu pliku, zapisywaniu do pliku, czytaniu pliku , interakcja ze stronami internetowymi itp.

PhantomJS nie obsługuje Flasha ani Video, ponieważ wymaga wtyczek i trudno jest je obsługiwać w linii poleceń.

Funkcje PhantomJS

Rozumiemy teraz funkcje oferowane przez PhantomJS.

Automatyzacja stron

PhantomJS umożliwia odczytywanie zawartości strony za pomocą swojego API. Może pomóc w manipulowaniu DOM, używaniu zewnętrznych bibliotek do wykonania wymaganego zadania.

Zrzut ekranu

PhantomJS pomaga w zrobieniu zrzutu ekranu określonej strony i zapisaniu tego samego jako obrazu w różnych formatach, takich jak PNG, JPEG, PDF i GIF. Z pomocą zrzutu ekranu można łatwo upewnić się, że zawartość sieci jest w porządku.

PhantomJS oferuje właściwości i metody, za pomocą których pozwala programistom dostosować rozmiar zrzutów ekranu i określić obszar, który chcą uchwycić.

Testowanie bez głowy

PhantomJS pomaga testować interfejs użytkownika w wierszu poleceń. Podczas gdy za pomocą zrzutu ekranu może łatwo znaleźć błędy w interfejsie użytkownika. PhantomJS czasami nie może pomóc w samodzielnym testowaniu. Można go jednak zapakować wraz z innymi bibliotekami testowymi, takimi jak Mocha, Yoeman itp. Możesz skorzystać z pomocy PhantomJS, aby przesłać plik i przesłać formularz.

PhantomJS może służyć do testowania logowań w witrynach i upewnienia się, że bezpieczeństwo nie jest zagrożone. PhantomJS może być używany wraz z innymi narzędziami, takimi jakCasperJS, Mocha, Qunit aby testy były skuteczniejsze.

Monitorowanie sieci

Jedną z ważnych cech PhantomJS jest jego wykorzystanie do monitorowania połączenia sieciowego za pomocą dostępnego API. PhantomJS umożliwia inspekcję ruchu sieciowego; nadaje się do tworzenia różnych analiz zachowania i wydajności sieci.

PhantomJS może służyć do zbierania danych o działaniu strony internetowej w środowisku na żywo. PhantomJS może być używany z takimi narzędziami jakYslow do zbierania wskaźników wydajności dowolnych witryn internetowych.

PhantomJS jest darmowym oprogramowaniem i jest rozprowadzane na licencji BSD License. Jest łatwy w instalacji i oferuje wiele funkcji do wykonywania skryptów. PhantomJS można łatwo uruchomić na wielu platformach, takich jak Windows, Linux i Mac.

Aby pobrać PhantomJS, możesz przejść do - http://phantomjs.org/ a następnie kliknij opcję pobierania.

Dla Windowsa

Strona pobierania zawiera opcje pobierania dla różnych systemów operacyjnych. Pobierz plik zip, rozpakuj go, a otrzymasz plik wykonywalnyphantom.exe. Ustaw zmienną środowiskową PATH na ścieżkę do pliku phantom.exe. Otwórz nowy wiersz polecenia i wpiszphantomjs –v. Powinien dać ci aktualną wersję uruchomionego PhantomJS.

W przypadku systemu MAC OS X

Pobierz plik zip PhantomJS przeznaczony dla systemu MAC OS i wyodrębnij zawartość. Po pobraniu zawartości przenieś PhantomJS do -/usr/local/bin/. Wykonaj polecenie PhantomJS tj. Phantomjs –v na terminalu i powinno dać ci opis wersji PhantomJS.

Linux 64-bitowy

Pobierz plik zip PhantomJS przeznaczony dla 64-bitowego systemu Linux i wyodrębnij zawartość. Po pobraniu zawartości przenieś folder PhantomJS do/usr/local/share/ i create a symlink -

sudo mv $PHANTOM_JS /usr/local/share sudo ln -sf /usr/local/share/$PHANTOM_JS/bin/phantomjs /usr/local/bin.

Wykonaj phantomjs –v na terminalu, co powinno dać wersję PhantomJS.

Linux 32-bitowy

Pobierz plik zip PhantomJS przeznaczony dla 32-bitowego systemu Linux i wyodrębnij zawartość. Po pobraniu zawartości przenieś folder PhantomJS do/usr/local/share/ i utwórz łącze symboliczne -

sudo mv $PHANTOM_JS /usr/local/share sudo ln -sf /usr/local/share/$PHANTOM_JS/bin/phantomjs /usr/local/bin.

Wykonaj phantomjs –v na terminalu, co powinno dać wersję PhantomJS.

Kod źródłowy PhantomJS można również pobrać z repozytorium git, klikając poniższy link - https://github.com/ariya/phantomjs/

Aby uruchomić skrypty w PhantomJS, polecenie jest następujące -

phantomjs jsfile arg1 arg2…

W tym rozdziale przyjrzymy się czterem ważnym obiektom PhantomJS. Są następujące -

  • CookiesEnabled
  • Cookies
  • LibraryPath
  • Version

Omówmy teraz szczegółowo każdą z nich.

cookiesEnabled

Informuje, czy pliki cookie są włączone, czy nie. Wrócitrue, Jeśli tak; Inaczejfalse.

Składnia

Jego składnia jest następująca -

phantom.cookiesEnabled

Przykład

cookieenabled.js

phantom.addCookie ({  
   //adding cookie with addcookie property 
   name: 'c1', 
   value: '1', 
   domain: 'localhost' 
}); 

console.log("Cookie Enabled value is : "+phantom.cookiesEnabled); 
phantom.exit();

Wynik

Command - phantomjs cookieenabled.js

Cookie Enabled value is : true

Ciasteczka

Pomaga w dodawaniu i ustawianiu plików cookie w domenie. Zwraca obiekt ze wszystkimi dostępnymi dla domeny plikami cookie.

Składnia

Jego składnia jest następująca -

phantom.cookies;

Przykład

Filename: phantomcookie.js

phantom.addCookie ({ 
   name: 'c1', 
   value: '1', 
   domain: 'localhost' 
}); 
phantom.addCookie ({ 
   name: 'c2', 
   value: '2', 
   domain: 'localhost' 
}); 
phantom.addCookie ({ 
   name: 'c3', 
   value: '3', 
   domain: 'localhost' 
}); 
console.log(JSON.stringify(phantom.cookies)); 
phantom.exit();

Wynik

Command - phantomjs phantomcookie.js

[{"domain":".localhost","httponly":false,"name":"c3","path":"/","secure":false, " 
value":"3"},{"domain":".localhost","httponly":false,"name":"c2","path":"/","sec u 
re":false,"value":"2"},{"domain":".localhost","httponly":false,"name":"c1","pat h
":"/","secure":false,"value":"1"}]

W powyższym przykładzie dodaliśmy pliki cookie do domeny localhost. Następnie pobraliśmy go za pomocąphantom.cookies. Zwraca obiekt ze wszystkimi plikami cookie przy użyciu rozszerzeniaJSON stringifydo konwersji obiektu JavaScript na ciąg. Możesz także użyćforeach aby uzyskać dostęp do nazwy / wartości plików cookie.

LibraryPath

PhantomJS libraryPath przechowuje ścieżkę skryptu, która ma być używana przez injectJS metoda.

Składnia

Jego składnia jest następująca -

phantom.libraryPath

Przykład

Oto przykład, aby znaleźć wersję.

var webPage = require('webpage');
var page = webPage.create();

page.open('http://www.tutorialspoint.com/jquery', function(status) {
   if (status === "success") { 
      page.includeJs('http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js ', function() { 
         if (page.injectJs('do.js')) { 
            // returnTitle is a function loaded from our do.js file - see below 
            return returnTitle(); 
         });
         
         console.log(title); 
         phantom.exit(); 
      } 
   } 
});

window.returnTitle = function() { 
   return document.title;
};

Powyższy program generuje następujące dane output.

Jquery Tutorial

Wersja

Podaje wersję uruchomionego PhantomJS i zwraca szczegóły obiektu. Na przykład: {"major": 2, "minor": 1, "patch": 1}

Składnia

Jego składnia jest następująca -

phantom.version

Przykład

Oto przykład, aby znaleźć wersję.

var a = phantom.version;
console.log(JSON.stringify(a));
console.log(a.major);
console.log(a.minor);
console.log(a.patch);
phantom.exit();

Powyższy program generuje następujące dane output.

{"major":2,"minor":1,"patch":1} 
2 
1 
1

W powyższym przykładzie użyliśmy console.logwydrukować wersję. Obecnie pracujemy na wersji 2. Zwraca ona obiekt ze szczegółami przedstawionymi w powyższym bloku kodu.

PhantomJS to platforma pomagająca w wykonywaniu JavaScript bez przeglądarki. W tym celu wykorzystuje się następujące metody, które pomagają w dodaniu pliku cookie, usunięciu, wyczyszczeniu, opuszczeniu skryptu, wstrzyknięciu JS itp.

W tym rozdziale omówimy więcej metod PhantomJS i ich składni. Podobne metody tjaddcookie, injectjs istnieje w module strony internetowej, co zostanie omówione w kolejnych rozdziałach.

PhantomJS ujawnia następujące metody, które mogą nam pomóc w wykonywaniu JavaScript bez przeglądarki -

  • addCookie
  • clearCookie
  • deleteCookie
  • Exit
  • InjectJS

Rozumiemy teraz szczegółowo te metody z przykładami.

addCookie

Metoda addcookie służy do dodawania plików cookie i przechowywania danych. Jest podobny do sposobu, w jaki przeglądarka go przechowuje. Pobiera pojedynczy argument, czyli obiekt ze wszystkimi właściwościami plików cookie, a jego składnia wygląda tak, jak pokazano poniżej -

Składnia

Jego składnia jest następująca -

phantom.addCookie ({ 
   "name" : "cookie_name",  
   "value" : "cookie_value", 
   "domain" : "localhost" 
});

Nazwa, wartość, domena są obowiązkowymi właściwościami, które mają zostać dodane do funkcji addcookie. Jeśli w obiektach plików cookie brakuje którejkolwiek z tych właściwości, ta metoda zakończy się niepowodzeniem.

  • name - określa nazwę pliku cookie.

  • value - określa wartość używanego pliku cookie.

  • domain - domena, do której będzie stosowany plik cookie.

Przykład

Oto przykład addcookie metoda.

var page = require('webpage').create(),url = 'http://localhost/tasks/a.html'; 
page.open(url, function(status) { 
   if (status === 'success') {     
      phantom.addCookie({   //add name cookie1 with value = 1 
         name: 'cookie1', 
         value: '1', 
         domain: 'localhost' 
      }); 
      phantom.addCookie({   // add cookie2 with value 2 
         name: 'cookie2', 
         value: '2', 
         domain: 'localhost' 
      }); 
      phantom.addCookie({   // add cookie3 with value 3 
         name: 'cookie3', 
         value: '3', 
         domain: 'localhost' 
      }); 
      console.log('Added 3 cookies'); 
      console.log('Total cookies :'+phantom.cookies.length);  
      
      // will output the total cookies added to the url.    
   } else { 
      console.error('Cannot open file'); 
      phantom.exit(1); 
   } 
});

Przykład

a.html

<html>
   <head>
      <title>Welcome to phantomjs test page</title>
   </head>
   
   <body>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
   </body>
</html>

Powyższy program generuje następujące dane output.

Added 3 cookies 
Total cookies :3

Komentarze do kodu są oczywiste.

Usuń pliki cookie

Ta metoda umożliwia usunięcie wszystkich plików cookie.

Składnia

Jego składnia jest następująca -

phantom.clearCookies();

Ta koncepcja działa podobnie do usuwania plików cookie przeglądarki poprzez wybranie w menu przeglądarki.

Przykład

Oto przykład clearCookies metoda.

var page = require('webpage').create(),url = 'http://localhost/tasks/a.html'; 
page.open(url, function(status) { 
   if (status === 'success') {     
      phantom.addCookie({   //add name cookie1 with value = 1 
         name: 'cookie1', 
         value: '1', 
         domain: 'localhost' 
      }); 
      phantom.addCookie({   // add cookie2 with value 2 
         name: 'cookie2', 
         value: '2', 
         domain: 'localhost' 
      }); 
      phantom.addCookie({   // add cookie3 with value 3 
         name: 'cookie3', 
         value: '3', 
         domain: 'localhost' 
      }); 
      console.log('Added 3 cookies'); 
      console.log('Total cookies :'+phantom.cookies.length); 
      phantom.clearCookies(); 
      console.log(
         'After clearcookies method total cookies :' +phantom.cookies.length); 
      
      phantom.exit();     
   } else { 
      console.error('Cannot open file'); 
      phantom.exit(1); 
   } 
});

a.html

<html>
   <head>
      <title>Welcome to phantomjs test page</title>
   </head>
   
   <body>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
   </body>
</html>

Powyższy program generuje następujące dane output.

Added 3 cookies 
Total cookies :3 
After clearcookies method total cookies :0

deleteCookie

Usuń wszystkie pliki cookie w CookieJarz właściwością „name” pasującą do cookieName. Wrócitrue, jeśli pomyślnie usunięto; Inaczejfalse.

Składnia

Jego składnia jest następująca -

phantom.deleteCookie(cookiename);

Pozwól nam zrozumieć addcookie, clearcookies i deletecookie z pomocą przykładu.

Przykład

Oto przykład demonstrujący użycie metody deleteCookie -

File: cookie.js

var page = require('webpage').create(),url = 'http://localhost/tasks/a.html'; 
page.open(url, function(status) { 
   if (status === 'success') {     
      phantom.addCookie({   //add name cookie1 with value = 1 
         name: 'cookie1', 
         value: '1', 
         domain: 'localhost' 
      }); 
      phantom.addCookie({   // add cookie2 with value 2 
         name: 'cookie2', 
         value: '2', 
         domain: 'localhost' 
      });
      phantom.addCookie({   // add cookie3 with value 3 
         name: 'cookie3', 
         value: '3', 
         domain: 'localhost' 
      });  
      console.log('Added 3 cookies'); 
      console.log('Total cookies :'+phantom.cookies.length); 
      
      //will output the total cookies added to the url.    
      console.log("Deleting cookie2"); 
      phantom.deleteCookie('cookie2'); 
      
      console.log('Total cookies :'+phantom.cookies.length); 
      phantom.clearCookies();
      
      console.log(
         'After clearcookies method total cookies :' +phantom.cookies.length); 
      phantom.exit(); 
   } else { 
      console.error('Cannot open file'); 
      phantom.exit(1); 
   } 
});

Powyższy program generuje następujące dane output.

phantomjs cookie.js
Added 3 cookies
Total cookies :3
Deleting cookie2
Total cookies :2
After clearcookies method total cookies :0

Wyjście

Metoda phantom.exit zamknie skrypt, który została uruchomiona. Wychodzi z programu ze wspomnianą wartością zwracaną. To daje‘0’, jeśli nie ma przekazanej wartości.

Składnia

Jego składnia jest następująca -

phantom.exit(value);

Jeśli nie dodasz phantom.exit, to wiersz poleceń zakłada, że ​​wykonanie jest nadal włączone i nie zostanie ukończone.

Przykład

Spójrzmy na przykład, aby zrozumieć użycie exit metoda.

console.log('Welcome to phantomJs');  // outputs Welcome to phantomJS 
var a = 1; 
if (a === 1) { 
   console.log('Exit 1'); //outputs Exit 1 
   phantom.exit(); // Code exits. 
} else { 
   console.log('Exit 2'); 
   phantom.exit(1); 
}

Powyższy program generuje następujące dane output.

phantomjs exit.js

Welcome to phantomJs 
Exit 1

Żaden fragment kodu po phantom.exit nie zostanie wykonany, ponieważ phantom.exit jest metodą kończącą skrypt.

injectJs

InjectJs służy do dodawania addtionaljspliki w phantom. Jeśli plik nie zostanie znaleziony w pliku currentdirectory librarypath, wówczas właściwość phantom (phantom.libraryPath) jest używana jako dodatkowe miejsce do śledzenia ścieżki. Wracatrue jeśli dodanie pliku powiedzie się, w przeciwnym razie false w przypadku niepowodzenia, w przypadku, gdy nie jest w stanie zlokalizować pliku.

Składnia

Jego składnia jest następująca -

phantom.injectJs(filename);

Przykład

Przyjrzyjmy się poniższemu przykładowi, aby zrozumieć użycie injectJs.

Filename: inject.js

console.log(“Added file”);

File name: addfile.js

var addfile =  injectJs(inject.js);
console.log(addfile);
phantom.exit();

Wynik

Command - C: \ phantomjs \ bin> phantomjs addfile.js

Added file // coming from inject.js
true

W powyższym przykładzie addfile.js wywołuje plik inject.jsprzy użyciu injectJs. Po wykonaniu addfile.js w danych wyjściowych jest wyświetlany plik console.log obecny w inject.js. Pokazuje również prawdę dla zmiennej addfile, ponieważ plik inject.js został pomyślnie dodany.

PhantomJS zapewnia wiele właściwości i metod ułatwiających interakcję z zawartością strony internetowej.

Polecenie require ("webpage"). Create () tworzy obiekt strony internetowej. Użyjemy tego obiektu do manipulowania stroną internetową za pomocą właściwości i metod wymienionych poniżej.

var wpage = require("webpage").create();

Poniższa tabela zawiera listę wszystkich właściwości strony internetowej, które będziemy omawiać.

S.Nr Właściwości i opis
1 canGoBack

Ta właściwość zwraca truejeśli w historii nawigacji jest poprzednia strona; Jeśli nie,false.

2 canGoForward

Ta właściwość zwraca wartość true, jeśli w historii nawigacji istnieje następna strona; Jeśli nie,false.

3 clipRect

clipRect to obiekt z wartościami top, left, width i height, używany do przechwytywania obrazu strony internetowej, gdy jest używany przez metodę render ().

4 Zadowolony

Ta właściwość zawiera zawartość strony internetowej.

5 ciasteczka

Za pomocą plików cookie można ustawić / pobrać pliki cookie dostępne pod adresem URL. Otrzymasz również pliki cookie dostępne pod adresem URL oraz nowe pliki cookie ustawione na stronie.

6 customHeaders

customHeaders określa dodatkowe nagłówki żądań HTTP, które będą wysyłane do serwera dla każdego żądania wysłanego przez stronę.

7 Zdarzenie

Daje długą listę zdarzeń, tj. Modyfikatory, szczegóły kluczy.

8 focusFrameName

Zwraca nazwę aktualnie zaznaczonej klatki.

9 frameContent

Ta właściwość podaje zawartość ramki, która jest aktywna.

10 frameName

Zwraca nazwę aktualnie zaznaczonej klatki.

11 framePlainText

Ta właściwość również podaje zawartość bieżącej aktywnej ramki, ale tylko zawartość bez znaczników HTML.

12 frameTitle

Podaje tytuł aktywnej klatki.

13 frameUrl

Ta właściwość poda adres URL ramki, na którą aktualnie ustawiony jest fokus.

14 framesCount

Podaje liczbę ramek obecnych na stronie.

15 frameName

Podaje tablicę nazw ramek.

16 libraryPath

Ta właściwość ma ścieżkę używaną przez metodę page.inectJs.

17 navigationLocked

Ta właściwość określa, czy nawigacja po stronie jest dozwolona, ​​czy nie. Jeśli prawda, będzie to adres URL bieżącej strony, a kliknięcie strony w celu przejścia do następnej strony nie będzie dozwolone.

18 offlineStoragePath

Ta właściwość podaje ścieżkę, w której dane są przechowywane przy użyciu window.localStorage. Ścieżkę można zmienić za pomocą --local-storage-path z wiersza poleceń.

19 offlineStorageQuota

Ta właściwość definiuje maksymalną ilość danych, które można przechowywać w window.localStorage. Wartość to 5242880 bajtów, czyli 5 MB. Wartość tę można zastąpić w wierszu poleceń za pomocą następującego polecenia --localstorage-quota = size tutaj.

20 własne strony

ownsPages zwraca wartość true lub false, jeśli strona otwierana przez stronę internetową jest podrzędną w stosunku do strony internetowej.

21 pagesWindowName

PagesWindowName poda nazwy okien otwartych za pomocą window.open

22 stron

Właściwość pages poda tablicę stron otwartych na stronie za pomocą window.open. Jeśli strona jest zamknięta w adresie URL, odsyłająca strona nie będzie brana pod uwagę.

23 rozmiar papieru

Ta właściwość podaje rozmiar, tj. Wymiary strony internetowej, kiedy ma zostać użyta do konwersji strony internetowej do formatu pdf. PaperSize zawiera wymiary wymagane w obiekcie.

24 zwykły tekst

Ta właściwość również podaje zawartość bieżącej aktywnej ramki, ale tylko zawartość bez znaczników HTML.

25 scrollPosition

Zawiera obiekt wskazujący pozycję przewijania. Daje lewy i górny.

26 ustawienia

Ta właściwość określa ustawienia strony internetowej, gdy używana jest metoda page.open. Po załadowaniu strony zmiany we właściwościach ustawień nie będą miały żadnego wpływu.

27 tytuł

Ta właściwość poda tytuł czytanej strony.

28 url

Ta właściwość podaje adres URL strony.

29 viewportSize

Ta właściwość pozwala na zmianę wielkości wyświetlania okna. Zawiera szerokość i wysokość, które możesz odczytać lub zmienić zgodnie z potrzebami.

30 windowName

Podaje nazwę okna.

31 zoomFactor

Ta właściwość określa współczynnik powiększenia dla metod render i renderBase64. Pomaga powiększyć stronę i w razie potrzeby zrobić zrzut ekranu.

Moduł strony internetowej zawiera metody dla Cookies, Frames, Page Navigation, Reload, Rendering i Uploading of Files.

Poniżej przedstawiono metody dostępne na stronie internetowej.

S.Nr Metody i opis
1 addCookie ()

addCookie dodaje pliki cookie do określonej strony.

2 childFramesCount()

Ta metoda jest przestarzała zgodnie z http://phantomjs.org.

3 childFramesName()

Ta metoda jest przestarzała zgodnie z http://phantomjs.org.

4 Usuń pliki cookie()

Usunie wszystkie pliki cookie z określonej strony.

5 blisko()

Ta metoda służy do zamykania strony i zwalniania używanej pamięci. Żadna z metod lub właściwości strony internetowej nie będzie działać po wywołaniu zamknięcia.

6 currentFrameName()

Ta metoda jest przestarzała zgodnie z http://phantomjs.org.

7 deleteCookie ()

Spowoduje to usunięcie pliku cookie o nazwie pasującej do istniejącej listy plików cookie obecnych dla danego adresu URL strony.

8 EvaluAsync ()

Oceniaj daną funkcję asynchronicznie na stronie bez blokowania bieżącego wykonania. Ta funkcja pomaga wykonywać pewne skrypty asynchronicznie.

9 ewaluowaćJavascript ()

EvaluateJavaScript pomaga wykonać funkcję przekazaną mu jako ciąg. Należy pamiętać, że przekazany ciąg musi być tylko funkcją.

10 oceniać()

Evaluate wykona przekazaną mu funkcję. Jeśli funkcja zawiera komunikaty konsoli, nie jest wyświetlana bezpośrednio w terminalu. Aby wyświetlić komunikaty konsoli, musisz użyć funkcji phantom callback onConsoleMessage.

11 getPage ()

W ten sposób otrzymasz stronę podrzędną pasującą do nazwy okna przekazanej w getpage.

12 Wróć()

Podaje poprzednią stronę w historii nawigacji, jeśli tylko nawigacja nie jest zablokowana.

13 idź naprzód()

Daje następną stronę w historii nawigacji, jeśli tylko nawigacja nie jest zablokowana.

14 iść()

Ta metoda umożliwia nawigację po stronach.

15 includeJs ()

Includejs wykonuje zewnętrzny plik JS na stronie i wywołuje funkcję zwrotną po zakończeniu.

16 injectJs ()

InjectJs dołącza do strony zewnętrzny skrypt z określonego pliku. Jeśli plik nie jest dostępny w bieżącym katalogu, używał biblioteki libraryPath do dodatkowego wyszukiwania pliku. Zwraca true, jeśli plik jest wstrzyknięty, w przeciwnym razie false.

17 Otwórz URL()

OpenUrl otwiera stronę internetową. Jest to podobne do otwartej metody PhantomJS. OpenUrl ma kilka dodatkowych parametrów, którymi są httpConf, ustawienia i funkcje zwrotne.

18 otwarty()

Otwórz służy do otwierania strony internetowej.

19 wydanie()

Wydanie zwolni użycie sterty pamięci dla strony. Nie używaj metod instancji strony po wywołaniu wydania. Ta metoda jest podobna do metody close, a jej użycie jest przestarzałe. Zamiast tego użyj wpage.close ().

20 przeładować()

Przeładuj służy do ponownego załadowania aktualnie używanej strony.

21 renderBase64 ()

Ta metoda pobiera zrzut ekranu i przekazuje obraz jako ciąg w base46. Renderbase64 obsługuje takie formaty jak PNG, JPEG i JPG. Obecnie nie obsługuje GIF-ów. Możesz użyć właściwości clipRect, aby zdefiniować część do przechwytywania obrazu.

22 renderBuffer ()

RenderBuffer przenosi przechwycenie strony internetowej do bufora obrazu, który może być wysłany bezpośrednio na serwer. Obsługiwane formaty to PNG, GIF i JPEG.

23 renderowanie()

Render pomaga wziąć bufor obrazu i zapisać go zgodnie z określonym formatem.

24 sendEvent ()

Służy do wysyłania zdarzenia na stronę internetową. Nie są wydarzeniami domowymi. Każde z tych zdarzeń jest wysyłane do strony internetowej na podstawie interakcji użytkownika.

25 setContent ()

setcontent zmieni zawartość strony pod określonym adresem URL na określoną zawartość.

26 zatrzymać()

Pomaga zatrzymać ładowanie strony.

27 switchToChildFrame()

Używanie switchToFrame () jest przestarzałe;

28 switchToFocusedFrame ()

Wybiera ramkę, na której jest ustawiona ostrość.

29 switchToFrame ()

Wybiera ramkę o określonej nazwie, która jest elementem potomnym bieżącej klatki.

30 switchToMainFrame ()

Wybiera mainframe, czyli okno główne.

31 switchToParentFrame ()

Pobiera ramkę nadrzędną bieżącej ramki podrzędnej.

32 Przesyłanie pliku()

Ta metoda służy do obsługi przesyłania plików wykonanych za pomocą formularza w html. PhantomJS nie ma bezpośredniego sposobu, aby to zrobić za pomocą formularzy, to samo można osiągnąć za pomocą metody uploadFile. Potrzeba selektora tagów html dla lokalizacji pliku i miejsca docelowego, do którego ma zostać skopiowany.

Wywołania zwrotne dostępne w module strony internetowej zostały opisane w poniższej tabeli.

S.Nr Callback i opis
1 onAlert ()

To wywołanie zwrotne jest wywoływane, gdy na stronie pojawi się alert; funkcja zwrotna przyjmuje ciąg znaków i nic nie zwraca.

2 onCallback ()

OnCallback służy do przekazywania wartości ze strony internetowej do obiektu strony internetowej i odbywa się to za pomocą metody window.callPhantom (), która wewnętrznie wywołuje funkcję onCallback.

3 onClosing ()

Jest to wywoływane, gdy okno jest zamykane za pomocą metody page.close () lub window.close ().

4 onConfirm ()

To oddzwonienie jest wywoływane, gdy na stronie pojawia się potwierdzona wiadomość z ok / anuluj.

5 onConsoleMessage ()

To wywołanie zwrotne jest używane, gdy na stronie sieci Web są używane komunikaty konsoli. Metoda onConsoleMessage przyjmuje 3 argumenty.

6 onError ()

Jest wywoływana, gdy występuje błąd JavaScript. Argumentami onError są msg i stos śledzenia, czyli tablica.

7 onFilePicker ()

Służy do wysyłania pliku, wywoływana jest funkcja zwrotna, gdy użytkownik chce przesłać plik.

8 onInitialized ()

To wywołanie zwrotne jest wywoływane, gdy strona jest wywoływana przed załadowaniem.

9 onLoadFinished ()

Ta funkcja jest wywoływana, gdy otwarta strona jest w pełni załadowana. Ma jeden argument, który mówi, kiedy ładowanie zakończyło się sukcesem lub niepowodzeniem.

10 onLoadStarted ()

To wywołanie zwrotne jest wywoływane, gdy strona zaczyna się ładować.

11 onNavigationRequested ()

To wywołanie zwrotne informuje, kiedy ma miejsce zdarzenie nawigacji.

12 onPageCreated ()

To wywołanie zwrotne jest wywoływane, gdy strona otwiera nowe okno podrzędne.

13 onPrompt ()

To wywołanie zwrotne jest wywoływane, gdy strona internetowa wywoła monit. Potrzeba 2 argumentów, wiadomości i odpowiedzi. Wartość zwracana to ciąg.

14 onResourceError ()

To wywołanie zwrotne jest wywoływane, gdy strona internetowa nie może przesłać pliku.

15 onResourceReceived ()

To wywołanie zwrotne jest wywoływane po odebraniu zasobu żądanego przez stronę.

16 onResourceRequested ()

Ta funkcja jest wywoływana, gdy strona żąda zasobu.

17 onResourceTimeout ()

To wywołanie zwrotne jest wywoływane, gdy żądany zasób przekroczy limit czasu, gdy jest używany settings.resourceTimeout.

18 onUrlChanged ()

Jest to wywoływane, gdy adres URL zmienia się z bieżącego za pomocą nawigacji. Ma jeden argument wywołania zwrotnego, który jest nowym ciągiem targetUrl adresu URL.

Moduł procesu Phantomjs Child pomaga w interakcji z podprocesami i rozmowie z nimi za pomocą stdin /stdout/stderr. Procesów potomnych można używać do zadań takich jakprinting, sending mail lub invoke programsnapisane w innym języku. Aby utworzyć podrzędny moduł procesu, potrzebujesz referencji.

Na przykład -

var process = require("child_process");

Metoda odradzania

Dzięki procesowi potomnemu spawn możesz zasubskrybować jego stdout i stderr strumieni, aby uzyskać dane w czasie rzeczywistym.

Składnia

Jego składnia jest następująca -

var spawn = require('child_process').spawn;

Przykład

Spójrzmy na przykład metody spawn.

var process = require("child_process")
var spawn = process.spawn
var child = spawn("cmd", ['/c', 'dir']);

child.stdout.on("data", function (data) {
   console.log("spawnSTDOUT---VALUE:", JSON.stringify(data))
})
child.stderr.on("data", function (data) {
   console.log("spawnSTDERR:", JSON.stringify(data))
})
child.on("exit", function (code) {
   console.log("spawnEXIT:", code)
})

Wynik

Powyższy program generuje następujące dane wyjściowe.

spawnSTDOUT---VALUE: " Volume in drive C is OS\r\n"
spawnSTDOUT---VALUE: " Volume Serial Number is 7682-9C1B\r\n\r\n Directory of C:
\\phantomjs\\bin\r\n\r\n"
spawnSTDOUT---VALUE: "20-05-2017  10:01
<DIR>          .\r\n20-05-2017  10:01
<DIR>          ..\r\n13-05-2017  20:48   12 a,txt.txt\r\n07-05-2017  08:51
63 a.js\r\n06-05-2017  16:32           120,232 a.pdf\r\n13-05-2017  20:49 
spawnEXIT: 0

Moduł systemu plików ma wiele interfejsów API do obsługi plików i katalogów. Możesz tworzyć / zapisywać i usuwać plik / katalog. Aby rozpocząć korzystanie z modułu systemu plików, musisz wymagać odniesienia do plikufs module.

var fs = require('fs');

Dostępne są dwie właściwości modułu systemu plików: Separator i Working Directory. Rozumiemy je szczegółowo.

Separator

Informuje o separatorze używanym do ścieżek plików.

  • Dla Windowsa:\
  • W systemie Linux: /

Składnia

Jego składnia jest następująca -

fs.seperator

Przykład

var fs = require('fs');
console.log(fs.seperator);
phantom.exit();

Powyższy program generuje następujące dane output.

undefined

katalog roboczy

Katalog roboczy to katalog, w którym działa PhantomJS.

Składnia

Jego składnia jest następująca -

var fs = require('fs');
fs.workingDirectory;

Przykład

var fs = require('fs');
console.log(fs.workingDirectory);
phantom.exit();

Powyższy program generuje następujące dane output.

C:/phantomjs/bin

Poniższa tabela zawiera wszystkie metody i ich opisy, które są dostępne w module systemu plików.

S.Nr Metody i opis
1 absolutny

Ta metoda podaje bezwzględną ścieżkę, po której działa PhantomJS.

2 changeWorkingDirectory

Pozwala to na zmianę katalogu roboczego i zwraca wartość true, jeśli się powiedzie, w przeciwnym razie zwraca wartość false.

3 copyTree

copyTree skopiuje katalog z jednej ścieżki do drugiej. Pierwszy parametr to folder źródłowy, a drugi parametr to folder docelowy.

4 Kopiuj

Ta metoda pomaga skopiować plik z jednej lokalizacji do drugiej. Zajmuje dwa parametry. Pierwszy parametr to plik źródłowy, a drugi parametr to ścieżka do pliku, do którego ma zostać skopiowany. Wystąpi błąd, jeśli plik źródłowy lub docelowy nie istnieje.

5 istnieje

Sprawdza, czy podana ścieżka do pliku istnieje w systemie. Zwraca prawdę, jeśli jest obecna, w przeciwnym razie fałsz.

6 isAbsolute

Ta metoda zwróci wartość true, jeśli ścieżka pliku jest bezwzględna i false, jeśli jest względna.

7 isDirectory

isDirectory mówi, czy dany plik jest katalogiem, czy nie. Zwraca prawdę, jeśli katalog jest inaczej fałszywy. Daje fałsz w przypadku, gdy podana ścieżka nie istnieje.

8 isExecutable

Ta metoda powie, czy dany plik jest wykonywalny, czy nie. Zwraca prawdę, jeśli jest wykonywalna, w przeciwnym razie fałsz.

9 isFile

Daje to szczegółowe informacje, czy podana ścieżka do pliku jest plikiem, czy nie. Zwraca prawdę, jeśli jest plikiem i fałsz, jeśli nie jest.

10 isLink

To da ci prawdę, jeśli ścieżka pliku jest dowiązaniem symbolicznym, w przeciwnym razie false.

11 isReadable

Sprawdza, czy dany plik jest czytelny, czy nie. Daje prawdę, jeśli tak, i fałsz, jeśli nie.

12 isWritable

Mówi, czy dany plik jest zapisywalny. Zwraca prawdę, jeśli tak, w przeciwnym razie fałsz.

13 ostatnio zmodyfikowany

Podaje szczegóły ostatniej modyfikacji pliku. Informuje o dacie i godzinie ostatniej modyfikacji pliku.

14 lista

Podaje wszystkie pliki obecne w katalogu.

15 makeDirectory

Tworzy nowy katalog.

16 makeTree

makeTree tworzy wszystkie niezbędne foldery, aby móc tworzyć ostateczne katalogi. Zwróci to prawdę, jeśli tworzenie się powiodło, w przeciwnym razie fałsz. Jeśli katalog już istnieje, zwróci wartość true.

17 ruszaj się

Przeniesie plik z jednej ścieżki do drugiej.

18 otwarty

Służy do otwierania pliku.

19 readLink

Spowoduje to zwrócenie bezwzględnej ścieżki do pliku lub folderu wskazanego przez łącze symboliczne (lub skrót w systemie Windows). Jeśli ścieżka nie jest dowiązaniem symbolicznym ani skrótem, zwróci pusty ciąg.

20 czytać

Spowoduje to odczytanie podanego pliku.

21 removeDirectory

Spowoduje to usunięcie podanego katalogu.

22 removeTree

Usunie wszystkie pliki i foldery z danego folderu i ostatecznie usunie sam folder. Jeśli wystąpi jakikolwiek błąd podczas wykonywania tego procesu, zgłosi błąd - „Nie można usunąć ścieżki drzewa katalogów” i zawiesi wykonywanie.

23 usunąć

Usuwa podany plik.

24 rozmiar

Podaje rozmiar pliku.

25 dotknąć

Tworzy dany plik.

26 pisać

Zapisuje do podanego pliku.

W tym rozdziale omówimy różne właściwości modułu systemowego PhantomJS.

argumenty

Moduł systemowy PhantomJS ma różne właściwości, które pomagają w przekazywaniu argumentów, poznaniu wykonywanego pliku itp.

Właściwość args w zasadzie zwraca argumenty przekazane w wierszu poleceń. Możesz również przekazać adres URL strony, którą chcesz przeczytać. Jeśli chcesz zapisać plik pdf ze zrzutem ekranu lub plik do przesłania, szczegóły można przesłać do wiersza poleceń i można je odczytać za pomocąargs własność.

Znajdźmy długość i sposób pobrania każdego argumentu przekazanego do wiersza poleceń.

Składnia

Jego składnia jest następująca -

var system = require('system'); 
system.args;

Przykład

Spójrz na poniższy przykład, aby zrozumieć, jak działa ta właściwość.

var system = require('system');
console.log(system.args.length);

if (system.args.length>0) {
   console.log(JSON.stringify(system.args));
}
phantom.exit();

Powyższy program generuje następujące dane output.

Command - phantomsjs args.js http://localhost/tasks/request.html

2
["args.js","http://localhost/tasks/request.html"]

Pierwsza wartość to nazwa pliku, a następna to przekazany adres URL. Możesz przekazać więcej argumentów w linii poleceń i pobrać to samo używającsystem.args.

env

Plik env właściwość zwraca szczegóły systemu.

Składnia

Jego składnia jest następująca -

var system = require('system'); 
system.env;

Przykład

var system = require('system'); 
console.log(JSON.stringify(system.env)); 
phantom.exit();

Powyższy program generuje następujące dane wyjściowe.

{"=::":"::\\","=C:":"C:\\phantomjs\\bin","=ExitCode":"00000000","ALLUSERSPROFILE":
"C:\\ProgramData","APPDATA":"C:\\Users\\UserName\\AppData\\Roaming","COMPUTERNAME":
"X","ComSpec":"C:\\Windows\\system32\\cmd.exe","CommonProgramFiles":
"C:\\Program Files (x86)\\Common Files","CommonProgramFiles(x86)":
"C:\\Program Files (x86)\\Common Files","CommonProgramW6432":
"C:\\Program Files\\Common Files","FP_NO_HOST_CHECK":"NO","HOMEDRIVE":"C:",
"HOMEPATH":"\\Users\\UserName","LOCALAPPDATA":
"C:\\Users\\UserName\\AppData\\Local","LOGONSERVER":"\\\\MicrosoftAccount",
"NUMBER_OF_PROCESSORS":"2","OS":"Windows_NT","PATHEXT":".COM;.EXE;.BAT;.CMD;.VBS ;
.VBE;.JS;.JSE;.WSF;.WSH;.MSC","PROCESSOR_ARCHITECTURE":"x86","PROCESSOR_ARCHITEW64 32":
"AMD64","PROCESSOR_IDENTIFIER":"Intel64 Family 6 Model 58Stepping9,GenuineIntel",
"PROCESSOR_LEVEL":"6","PROCESSOR_REVISION":"3a09","PROMPT":
"$P$G","PSModulePath":"C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\
Modules\\" ,"PUBLIC":"C:\\Users\\Public","Path":
"C:\\Program Files\\Dell\\DW WLAN Card;
c:\\Program Files (x86)\\Intel\\iCLS Client\\;c:\\Program Files\\Intel\\iCLSClient\\;
C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\ \Wbem;
C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;
C:\\Program Files\\Intel\\Intel(R) Management Engine Components\\DAL;
C:\\Program Files\\Intel\\Intel(R) Management Engine Components\\IPT;
C:\\Program Files (x86)\\Intel\\Intel(R) Management Engine Components\\DAL;
C:\\Program Files (x86)\\Intel\\Intel(R) 
ManagementEngineComponents\\IPT;c:\\ProgramFiles\\WIDCOMM\\BluetoothSoftware\\;
c:\\ProgramFiles\\WIDCOMM\\BluetoothSoftware\\syswow64;
C:\\ProgramFiles(x86)\\WindowsLive\\Shared;C:\\ProgramFiles\\nodejs\\;
C:\\ProgramFiles\\Git\\cmd;C:\\ProgramFiles\\ OpenVPN\\bin;
C:\\ProgramFiles(x86)\\Skype\\Phone\\;C:\\Users\\UserName\\AppData\\Roaming
\\npm","ProgramData":
"C:\\ProgramData","ProgramFiles":"C:\\ProgramFiles(x86)", 
"ProgramFiles(x86)":"C:\\ProgramFiles(x86)","ProgramW6432":
"C:\\ProgramFiles","SESSIONNAME":"Console","SystemDrive":
"C:","SystemRoot":"C:\\Windows","TEMP":"C:\\Users\ \Username~1\\AppData\\Local\\Temp",
"TMP":"C:\\Users\\Username~1\\AppData\\Local\\Temp",
"USERDOMAIN":"USER","USERDOMAIN_ROAMINGPROFILE":"USER","USERNAME":"X Y","USERPROFILE":
"C:\\Users\\X Y","windir":"C:\\Windows"}

OS

Zwraca szczegóły używanego systemu operacyjnego. Zwraca obiekt z architekturą, nazwą systemu operacyjnego i wersją.

Składnia

Jego składnia jest następująca -

var system = require('system');
system.os;

Przykład

var system = require('system');
console.log(JSON.stringify(system.os));
phantom.exit();

Powyższy program generuje następujące dane wyjściowe.

{"architecture":"32bit","name":"windows","version":"8.1"}

pid

Ta właściwość zwraca identyfikator procesu.

Składnia

Jego składnia jest następująca -

var system = require('system');
system.pid;

Przykład

Spójrzmy na przykład pid własność.

var system = require('system');
console.log(system.pid);
phantom.exit();

Powyższy program generuje następujące dane wyjściowe.

2160

Platforma

Ta właściwość zwraca platformę, nad którą pracujemy.

Składnia

Jego składnia jest następująca -

var system = require('system');
system.platform;

Przykład

var system = require('system');
console.log(system.platform);
phantom.exit();

Powyższy program generuje następujące dane wyjściowe.

Phantomjs

PhantomJS wykorzystuje wbudowany serwer WWW o nazwie mongoose. W tej chwili PhantomJS nie może połączyć się z żadnym innym produkcyjnym serwerem WWW. Jeśli chodzi o połączenie, może obsłużyć jednocześnie 10 połączeń, a ponad 10 żądań będzie czekało w kolejce.

Aby uruchomić serwer WWW, musimy użyć następującej składni -

var webserver = require (‘webserver’);

Pozwól nam zrozumieć Port właściwość, która jest używana do nasłuchiwania żądań wysyłanych do serwera WWW.

Port

Właściwość Port serwera WWW służy do nasłuchiwania żądań, które są do niego wysyłane.

Składnia

Jego składnia jest następująca -

var server = require('webserver').create();
var listening = server.listen(port, function (request, response) {});

Przykład

Weźmy przykład, aby zrozumieć, w jaki sposób port prace majątkowe.

var webserver = require('webserver'); 
var server = webserver.create(); 
var service = server.listen(8080,function(request,response){  
}); 
if(service) console.log("server started - http://localhost:" + server.port);

Powyższy program generuje następujące dane wyjściowe.

server started - http://localhost:8080

W tym rozdziale omówimy różne metody modułu serwera sieci Web PhantomJS.

blisko

Plik close Metoda służy do zamykania serwera WWW.

Składnia

Jego składnia jest następująca -

var server = require('webserver').create();
server.close();

Przykład

Poniższy przykład pokazuje, jak można używać close metoda.

var webserver = require('webserver');
var server = webserver.create();
var service = server.listen(8080,function(request,response){
});

if(service) console.log("server started - http://localhost:" + server.port);
console.log(server.port);
server.close();
console.log(server.port);

Powyższy program generuje następujące dane output.

server started - http://localhost:8080 
8080

Tutaj pocieszyliśmy server.portpo zamknięciu serwera. W związku z tym nie odpowie, ponieważ serwer WWW jest już zamknięty.

słuchać

Plik server.listen metoda przyjmuje port i funkcję zwrotną z dwoma argumentami, którymi są - Request Object i Response Object.

Plik Request Object zawiera następujące właściwości -

  • Method - Definiuje metodę GET / POST.

  • URL - Wyświetla żądany adres URL.

  • httpVersion - Wyświetla aktualną wersję http.

  • Headers - Wyświetla wszystkie nagłówki z parami klucz-wartość.

  • Post - Treść żądania dotycząca tylko metody wysyłania wiadomości.

  • postRaw - Jeśli nagłówek Content-Type jest ustawiony na „application / x-www-formurlencoded”, oryginalna treść posta zostanie zapisana w tej dodatkowej właściwości (postRaw), a następnie ten post zostanie automatycznie zaktualizowany za pomocą wersji zdekodowanej z adresu URL danych.

Plik Response Object zawiera następujące właściwości -

  • Headers- Zawiera wszystkie nagłówki HTTP jako pary klucz-wartość. Powinien być ustawiony przed pierwszym wywołaniem write.

  • SetHeader - Ustawia określony nagłówek.

  • Header (name) - Zwraca wartość podanego nagłówka.

  • StatusCode - Ustawia zwrócony kod stanu HTTP.

  • SetEncoding (encoding)- Służy do konwersji danych podanych do metody write (). Domyślnie dane zostaną przekonwertowane na UTF-8. Wskaż „binarny”, jeśli dane są ciągiem binarnym. Niewymagane, jeśli dane są buforem (np. Z page.renderBuffer).

  • Write (data)- Wysyła dane do treści odpowiedzi. Można wywołać wiele razy.

  • WriteHead (statusCode, headers)- Wysyła nagłówek odpowiedzi na żądanie. Kod statusu to 3-cyfrowy kod statusu HTTP (np. 404). Ostatnie argumenty i nagłówki to nagłówki odpowiedzi.

  • Close - Zamyka połączenie http.

  • CloseGracefully - Jest podobny do close (), ale zapewnia, że ​​nagłówki odpowiedzi zostały wysłane jako pierwsze.

Składnia

Jego składnia jest następująca -

var server = require('webserver').create(); 
var listening = server.listen(8080, function (request, response) {}

Przykład

Weźmy przykład, aby zrozumieć, w jaki sposób listen metoda działa.

var page = require('webpage').create(); 
var server = require('webserver').create(); 
var port = 8080; 
var listening = server.listen(8080, function (request, response) { 
   console.log("GOT HTTP REQUEST"); 
   console.log(JSON.stringify(request, null, 4)); 
   
   // we set the headers here 
   response.statusCode = 200; 
   response.headers = {"Cache": "no-cache", "Content-Type": "text/html"};  
 
   // the headers above will now be sent implictly 
   // now we write the body 
   response.write("<html><head><title>Welcone to Phantomjs</title></head>"); 
   response.write("<body><p>Hello World</p></body></html>"); 
   response.close(); 
}); 

if (!listening) { 
   console.log("could not create web server listening on port " + port); 
   phantom.exit(); 
} 

var url = "http://localhost:" + port + "/foo/response.php"; 
console.log("sending request to :" +url); 
page.open(url, function (status) { 
   if (status !== 'success') { 
      console.log('page not opening'); 
   } else { 
      console.log("Getting response from the server:"); 
      console.log(page.content); 
   } 
   
   phantom.exit(); 
});

Powyższy program generuje następujące dane output.

sending request to :http://localhost:8080/foo/response.php 
GOT HTTP REQUEST { 
   "headers": {
      "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 
      "Accept-Encoding": "gzip, deflate", 
      "Accept-Language": "en-IN,*", 
      "Connection": "Keep-Alive", 
      "Host": "localhost:8080", 
      "User-Agent": "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 
         (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1" 
   }, 
   "httpVersion": "1.1", 
   "method": "GET", 
   "url": "/foo/response.php" 
} 
Getting response from the server: 
<html><head><title>Welcone to Phantomjs</title></head><body><p>Hello World</p></body>
</html>

PhantomJS można uruchomić za pomocą słowa kluczowego „phantomjs” i nazwy pliku. Na przykład „phantomjs plik.js”.

Możesz również przekazać argumenty do „file.js” w następujący sposób -

phantomjs [options] file.js arg1 arg2 ...

Przejdźmy przez niektóre opcje dostępne w linii poleceń.

S.Nr Opcja i opis
1

--help or –h

Wyświetli wszystkie opcje wiersza poleceń. Zatrzymuje się natychmiast i nie uruchomi przekazanego skryptu.

2

--version or –v

Wyświetla wersję uruchomionego PhantomJS. Spowoduje to zatrzymanie wykonywania skryptu do uruchomienia.

3

--debug[true|false]

Wyświetla ostrzeżenia i komunikaty debugowania. Domyślnie jest ustawiony na false. Możesz również użyć [tak | nie].

4

--cookies-file = /path/to/cookies.txt

Nazwa pliku do przechowywania trwałych plików cookie.

5

--diskcache=[true|false]

Włącza podręczną pamięć dyskową. Przyjmuje również wartości [tak | nie]

6

--disk-cahe-path

Ścieżka do pamięci podręcznej dysku.

7

--ignore-sslerrors=[true|false]

Ignoruj ​​błędy SSL. Na przykład - błędy certyfikatu wygasłego lub z podpisem własnym. Wartość domyślna to false. Przyjmuje również wartości [tak | nie].

8

--loadimages=[true|false]

Ładuje wszystkie obrazy wbudowane. Wartość domyślna to prawda. Potrzeba też [tak | nie].

9

--local-storagepath=/some/path

Ścieżka do zapisywania zawartości LocalStorage i zawartości WebSQL.

10

--local-storagequota=number

Maksymalny rozmiar zezwalający na dane.

11

--local-url-access

Zezwala na używanie adresów URL „file: ///” (domyślnie jest to prawda).

12

--local-to-remote-urlaccess=[true|false]

Zezwala zawartości lokalnej na dostęp do zdalnego adresu URL. Wartość domyślna to false. Przyjmuje również wartości [tak | nie].

13

--max-disk-cachesize=size

Ogranicza rozmiar pamięci podręcznej dysku (w KB)

14

--offline-storage-path

Określa lokalizację do przechowywania w trybie offline.

15

--offline-storage-quota

Ustawia maksymalny rozmiar magazynu offline w KB.

16

--outputencoding=encoding

Ustawia kodowanie używane na wyjściu terminala. Domyślnie jest to utf-8.

17

--proxy=address:port

Określa serwer proxy, który ma być używany (na przykład - proxy = 192.168.1.1: 8080)

18

--proxytype=[http|socks5|none]

Określa typ serwera proxy (domyślnie http)

19

--proxy-auth

Informacje uwierzytelniające dla serwera proxy. Na przykład -

--proxy-auth = nazwa użytkownika: hasło

20

--scriptencoding=encoding

Ustawia kodowanie używane w skrypcie. Domyślnie jest to utf8.

21

--script-language

Ustawia język skryptowy.

PhantomJS jest bardzo pomocny przy robieniu zrzutu ekranu strony internetowej i konwertowaniu strony internetowej do formatu PDF. Podaliśmy tutaj prosty przykład, aby zademonstrować, jak to działa.

Przykład

var page = require('webpage').create();
page.open('http://phantom.org/',function(status){
   page.render('phantom.png');
   phantom.exit();
});

Uruchom powyższy program, a dane wyjściowe zostaną zapisane jako phantom.png.

Konwertuj strony internetowe na pliki PDF

PhantomJS pomaga również konwertować strony internetowe do plików PDF z dodanym nagłówkiem i stopką. Spójrz na poniższy przykład, aby zrozumieć, jak to działa.

var wpage = require('webpage').create(); 
var url = "https://en.wikipedia.org/wiki/Main_Page"; 
var output = "test.pdf"; 

wpage.paperSize = { 
   width: screen.width+'px', 
   height: '1500px', 
   
   margin: {
      'top':'50px', 
      'left':'50px', 
      'rigtht':'50px' 
   }, 
   orientation:'portrait', 
   header: { 
      height: "1cm", 
      contents: phantom.callback(function(pageNumber, nPages) { 
         return "<h5>Header <b>" + pageNumber + " / " + nPages + "</b></h5>"; 
      }) 
   }, 
   footer: { 
      height: "1cm", 
      contents: phantom.callback(function(pageNumber, nPages) {   
         return "<h5>Footer <b>" + pageNumber + " / " + nPages + "</b></h5>"; 
      }) 
   } 
} 
wpage.open(url, function (status) { 
   if (status !== 'success') { 
      console.log('Page is not opening'); 
      phantom.exit(); 
   } else { 
      wpage.render(output); 
      phantom.exit();     
   } 
});

Powyższy program generuje następujące dane output.

The above will convert the page into pdf and will be saved in test.pdf

Przekonwertuj płótno na obraz

Phantomjs może z łatwością przekonwertować Canvas na obraz. Spójrz na poniższy przykład, aby zrozumieć, jak to działa.

var page = require('webpage').create(); 
page.content = '<html><body><canvas id="surface" width="400" height="400"></canvas></body></html>'; 

page.evaluate(function() {
   var context,e1; 
   el = document.getElementById('surface'); 
   
   context = el.getContext('2d'); 
   context.font = "30px Comic Sans MS"; 
   context.fillStyle = "red"; 
   context.textAlign = "center"; 
   context.fillText("Welcome to PhantomJS ", 200, 200); 
   
   document.body.style.backgroundColor = 'white'; 
   document.body.style.margin = '0px'; 
}); 
page.render('canvas.png'); 
phantom.exit();

Powyższy program generuje następujące dane output.

PhantomJS, z pomocą swoich interfejsów API modułu strony internetowej, może manipulować stronami internetowymi i wykonywać operacje, takie jak manipulacja DOM, klikanie przycisków itp.

Pobierz obrazy ze strony

Poniższy program pokazuje, jak można używać PhantomJS do pobierania obrazów ze strony.

var wpage = require('webpage').create();
wpage.onConsoleMessage = function(str) {
   console.log(str.length);
}
wpage.open("http://phantomjs.org", function(status) {
   console.log(status);
   var element = wpage.evaluate(function() {
      var imgdata =  document.querySelectorAll('img');
      var imgsrc = [];
      
      if (imgdata) {
         for (var i in imgdata) {
            imgsrc.push(imgdata[0].src);
         }
      }
      return imgsrc;
   });
   console.log(JSON.stringify(element));
});

Powyższy program generuje następujące dane output.

Success 
["http://phantomjs.org/img/phantomjslogo.png","http://phantomjs.org/img/phantom 
js-logo.png","http://phantomjs.org/img/phantomjslogo.png","http://phantomjs.org 
/img/phantomjs-logo.png"]

Możliwe jest umieszczenie na stronie zewnętrznego kodu JavaScript przy użyciu rozszerzenia injectJS webpage method. Istnieje wiele właściwości i metod, które mogą pomóc w automatyzacji strony i zrobić wiele innych rzeczy. Możesz odnieść się do modułu strony internetowej, w którym szczegółowo wyjaśniono właściwości i metody.

Z pomocą PhantomJS możemy monitorować sieć i weryfikować zachowanie i wydajność określonej strony internetowej. W PhantomJS są wywołania zwrotne, tj.onResourceRequested i onResourceReceived, które pomagają w monitorowaniu ruchu na danej stronie.

Przykład

Poniższy przykład pokazuje, jak można używać PhantomJS do monitorowania ruchu na danej stronie.

function createHAR(address, title, startTime, resources) {  
   
   // this function formats the data which is coming from 
      onresourcerequest and onresourcereceived 
   var entries = []; 
   
   resources.forEach(function (resource) { 
      var request = resource.request, startReply = resource.startReply, 
         endReply = resource.endReply;  
      
      if (!request || !startReply || !endReply) { 
         return; 
      }  
      
      // Exclude Data URI from HAR file because 
      // they aren't included in specification 
      if (request.url.match(/(^data:image\/.*)/i)) { 
         return; 
      }  
      entries.push ({ 
         startedDateTime: request.time.toISOString(), 
         time: endReply.time - request.time, 
         
         request: { 
            method: request.method, 
            url: request.url, 
            httpVersion: "HTTP/1.1", 
            cookies: [], headers: request.headers, 
            queryString: [], 
            headersSize: -1, 
            bodySize: -1 
         }, 
         response: { 
            status: endReply.status, 
            statusText: endReply.statusText, 
            httpVersion: "HTTP/1.1", 
            cookies: [], 
            headers: endReply.headers, 
            redirectURL: "", 
            headersSize: -1, 
            bodySize: startReply.bodySize, 
            
            content: { 
               size: startReply.bodySize, 
               mimeType: endReply.contentType 
            } 
         }, 
         cache: {}, 
         timings: { 
            blocked: 0, 
            dns: -1, 
            connect: -1, 
            send: 0, 
            wait: startReply.time - request.time, 
            receive: endReply.time - startReply.time, 
            ssl: -1 
         }, 
         pageref: address 
      }); 
   });  
   return { 
      log: { 
         version: '1.2', creator: { 
            name: "PhantomJS", 
            version: phantom.version.major + '.' + phantom.version.minor + 
               '.' + phantom.version.patch 
         }, 
         pages: [{ 
            startedDateTime: startTime.toISOString(), 
            id: address, 
            title: title, 
            
            pageTimings: { 
               onLoad: page.endTime - page.startTime 
            } 
         }], 
         entries: entries 
      } 
   }; 
}  
var page = require('webpage').create(), system = require('system'); 
var fs = require('fs');   

if (system.args.length === 1) { 
   console.log('Usage: netsniff.js <some URL>'); 
   phantom.exit(1); 
} else { 
   page.address = system.args[1]; 
   page.resources = []; 
   
   page.onLoadStarted = function () {  // called when page is loaded 
      page.startTime = new Date(); 
   };  
   page.onResourceRequested = function (req) {  
      // called when any files are requested from given page url 
      page.resources[req.id] = { 
         request: req, 
         startReply: null, 
         endReply: null 
      }; 
   };  
   page.onResourceReceived = function (res) {  
      //called when any files are received. 
      if (res.stage === 'start') { 
         page.resources[res.id].startReply = res; 
      } 
      if (res.stage === 'end') { 
         page.resources[res.id].endReply = res; 
      } 
   };  
   page.open(page.address, function (status) {  // open given page url 
      var har; 
      
      if (status !== 'success') { 
         console.log('FAIL to load the address'); 
         phantom.exit(1); 
      } else { 
         page.endTime = new Date(); 
         
         page.title = page.evaluate(function () { // gets the page title 
            return document.title; 
         });             
         har = createHAR(page.address, page.title, page.startTime, page.resources);  
         
         // calls the function createHAR with page url, starttime, and page resources. 
         // console.log(JSON.stringify(har, undefined, 4)); 
         fs.write('log.txt', JSON.stringify(har, undefined, 4), 'w');  
         
         // logs are collected in log.txt file. 
         phantom.exit(); 
      } 
   }); 
}

Przykład log.txt podany do podglądu HAR

{ 
   "log": { 
      "version": "1.2", 
      "creator": { 
         "name": "PhantomJS", 
         "version": "2.1.1" 
      }, 
      "pages": [ 
         { 
            "startedDateTime": "2017-05-21T13:41:21.824Z", 
            "id": "http://www.sample.com", 
            "title": "Free Sample Products – Sample.com ≫ Free Samples, 
               Free Product Samples, Product Test Marketing", 
            "pageTimings": { 
               "onLoad": 11081 
            } 
         } 
      ], 
      "entries": [ 
         { 
            "startedDateTime": "2017-05-21T13:41:21.815Z", 
            "time": 1999, 
            
            "request": { 
               "method": "GET", 
               "url": "http://www.sample.com/", 
               "httpVersion": "HTTP/1.1", 
               "cookies": [], 
               
               "headers": [ 
                  { 
                     "name": "Accept", 
                     "value": "text/html,application/xhtml+xml,
                        application/xml;q = 0.9,*/*;q = 0.8" 
                  }, 
                  
                  { 
                     "name": "User-Agent", 
                     "value": "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 
                        (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1"  
                  } 
               ], 
               
               "queryString": [], 
               "headersSize": -1, 
               "bodySize": -1 
            }, 
            "response": { 
               "status": 301, 
               "statusText": "Moved Permanently", 
               "httpVersion": "HTTP/1.1", 
               "cookies": [], 
               
               "headers": [ 
                  { 
                     "name": "Date", 
                     "value": "Sun, 21 May 2017 13:41:25 GMT" 
                  }, 
                  
                  { 
                     "name": "Server", 
                     "value": "Apache/2.2.14 (Ubuntu)" 
                  }, 
                  
                  { 
                     "name": "Location", 
                     "value": "http://sample.com//" 
                  }, 
                  
                  { 
                     "name": "Vary", 
                     "value": "Accept-Encoding" 
                  }, 
                  
                  { 
                     "name": "Content-Encoding", 
                     "value": "gzip" 
                  }, 
                  
                  { 
                     "name": "Keep-Alive", 
                     "value": "timeout = 15, max = 100" 
                  },
                  
                  { 
                     "name": "Connection", 
                     "value": "Keep-Alive" 
                  }, 
                  
                  { 
                     "name": "Content-Type", 
                     "value": "text/html; charset = iso-8859-1" 
                  } 
               ],  
               "redirectURL": "", 
               "headersSize": -1, 
               "bodySize": 307, 
               
               "content": { 
                  "size": 307, 
                  "mimeType": "text/html; charset = iso-8859-1" 
               } 
            }, 
            
            "cache": {}, 
            "timings": { 
               "blocked": 0, 
               "dns": -1, 
               "connect": -1, 
               "send": 0, 
               "wait": 1999, 
               "receive": 0, 
               "ssl": -1 
            }, 
            "pageref": "http://www.sample.com" 
         }, 
      ]   
      { 
         "startedDateTime": "2017-05-21T13:41:24.898Z", 
         "time": 885, 
         
         "request": { 
            "method": "GET", 
            "url": "http://sample.com/", 
            "httpVersion": "HTTP/1.1", 
            "cookies": [], 
            
            "headers": [ 
               { 
                  "name": "Accept", 
                  "value": "text/html,application/xhtml+xml,
                     application/xml;q = 0.9,*/*;q = 0.8" 
               }, 
               
               { 
                  "name": "User-Agent", 
                  "value": "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 
                     (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1" 
               } 
            ], 
            "queryString": [], 
            "headersSize": -1, 
            "bodySize": -1 
         }, 
         "response": { 
            "status": 200, 
            "statusText": "OK", 
            "httpVersion": "HTTP/1.1", 
            "cookies": [], 
            
            "headers": [ 
               { 
                  "name": "Date", 
                  "value": "Sun, 21 May 2017 13:41:27 GMT" 
               }, 
               
               { 
                  "name": "Server", 
                  "value": "Apache/2.2.14 (Ubuntu)" 
               }, 
               
               { 
                  "name": "X-Powered-By", 
                  "value": "PHP/5.3.2-1ubuntu4.29" 
               }, 
               
               {
                  "name": "X-Pingback", 
                  "value": "http://sample.com/xmlrpc.php" 
               }, 
               
               { 
                  "name": "Link", 
                  "value": "<http://sample.com/wp-json/>; 
                     rel = \"https://api.w.org/\", <http://wp.me/P6Jj5H-4>; 
                     rel = shortlink" 
               }, 
               
               { 
                  "name": "Vary", 
                  "value": "Accept-Encoding"  
               }, 
               
               { 
                  "name": "Content-Encoding",
                  "value": "gzip" 
               },

               { 
                  "name": "Keep-Alive",
                  "value": "timeout = 15, max = 99"
               },

               {
                  "name": "Connection",
                  "value": "Keep-Alive"
               },

               { 
                  "name": "Content-Type",
                  "value": "text/html; charset = UTF-8"
               }
            ],

            "redirectURL": "",
            "headersSize": -1,
            "bodySize": 1969,

            "content": {
               "size": 1969,
               "mimeType": "text/html; charset = UTF-8"
            }
         },

         "cache": {},
         "timings": {
            "blocked": 0,
            "dns": -1,
            "connect": -1,
            "send": 0,
            "wait": 869,
            "receive": 16,
            "ssl": -1
         },

         "pageref": http://www.sample.com
      },

      {
         "startedDateTime": "2017-05-21T13:41:25.767Z",
         "time": 388,

         "request": {
            "method": "GET",
            "url": "http://sample.com/wpcontent/themes/samplecom/style.css",
            "httpVersion": "HTTP/1.1",
            "cookies": [],

            "headers": [
               {
                  "name": "Accept",
                  "value": "text/css,*/*;q = 0.1"
               },

               {
                  "name": "Referer",
                  "value": "http://sample.com/"
               },

               {
                  "name": "User-Agent",
                  "value": "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 
                     (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1"
               }
            ],

            "queryString": [],
            "headersSize": -1,
            "bodySize": -1
         },

         "response": {
            "status": 200,
            "statusText": "OK",
            "httpVersion": "HTTP/1.1",
            "cookies": [],

            "headers": [
               {
                  "name": "Date",
                  "value": "Sun, 21 May 2017 13:41:27 GMT"
               },

               {
                  "name": "Server",
                  "value": "Apache/2.2.14 (Ubuntu)"
               },

               {
                  "name": "Last-Modified",
                  "value": "Fri, 22 Apr 2011 00:32:22 GMT"
               },

               {
                  "name": "ETag",
                  "value": "\"e1d7-1836-4a176fdbbd180\""
               },

               {
                  "name": "Accept-Ranges",
                  "value": "bytes"
               },

               {
                  "name": "Vary",
                  "value": "Accept-Encoding"
               },

               {
                  "name": "Content-Encoding",
                  "value": "gzip"
               },

               {
                  "name": "Keep-Alive",
                  "value": "timeout = 15, max = 98"
               },

               {
                  "name": "Connection",
                  "value": "Keep-Alive"
               },

               {
                  "name": "Content-Type",
                  "value": "text/css"
               }
            ],

            "redirectURL": "",
            "headersSize": -1,
            "bodySize": 3174,
            
            "content": {
               "size": 3174,
               "mimeType": "text/css"
            }
         },

         "cache": {},
         "timings": {
            "blocked": 0,
            "dns": -1,
            "connect": -1,
            "send": 0,
            "wait": 388,
            "receive": 0,
            "ssl": -1
         },
         
         "pageref": "http://www.sample.com"
      }
   }
}

Wynik

Powyższy program generuje następujące dane wyjściowe.

Wszystkie dzienniki są gromadzone w pliku .txt file a później to samo jest konwertowane jak powyżej przy użyciu podglądu HAR, na przykład (http://www.softwareishard.com/har/viewer/)

PhantomJSma dużo API dla strony internetowej, które zawiera wszystkie szczegóły. PhantomJS może być używany do testowania, takich jak pobieranie zawartości strony, udostępnianie ekranu, konwersja strony do formatu PDF itp. Na rynku istnieje wiele popularnych bibliotek testowych, które mogą być używane razem z PhantomJS i mogą być używane do testowania .

Niektóre z popularnych frameworków, które mogą współpracować z PhantomJS, są następujące:

  • Mocha
  • Jasmine
  • Qunit
  • Hiro
  • Laika
  • Buster.JS
  • WebDriver

Przykład - PhantomJS z Qunit

(function () {     
   var url, timeout,args = require('system').args, page = require('webpage').create(); 
   url = args[1]; 
   timeout = parseInt(10, 10); 
   
   page.onConsoleMessage = function (msg) {  
      //prints all the console messages 
      console.log(msg); 
   }; 
   page.onInitialized = function () {  // called when page is initialized 
      page.evaluate(callqunit); 
   }; 
   page.onCallback = function (message) { // called from  
      var result, failed; 
      
      if (message) {  
         if (message.name === 'QUnit.done') { 
            result = message.data; 
            failed = !result || !result.total || result.failed;  
            
            if (!result.total) { 
               console.error('No tests were executed'); 
            } 
            pageexit(failed ? 1 : 0); 
         } 
      } 
   };  
   page.open(url, function (status) { // opening page  
      if (status !== 'success') { 
         console.error('Unable to access network: ' + status); 
         pageexit(1); 

      } else { 
         var checkqunit = page.evaluate(function () { 
            //evaluating page and chcking if qunit object 
               is present on the given page url 
            return (typeof QUnit === 'undefined' || !QUnit); 
         }); 
         
         if (checkqunit) { 
            console.error('Qunit scripts are not present on the page'); 
            pageexit(1); 
         }             
         
         //timeout of 10seconds is used otherwise message from console will get printed. 
         setTimeout(function () { 
            console.error('The specified timeout of ' + timeout + ' seconds has expired. 
               Aborting...'); 
            pageexit(1); 
         }, timeout * 1000);           
      } 
   });  
   function callqunit() {

qunit.html

<!DOCTYPE html> 
<html> 

   <head> 
      <meta charset = "utf-8"> 
      <meta name = "viewport" content = "width = device-width"> 
      <title>QUnit Example</title> 
      <link rel = "stylesheet" href = "https://code.jquery.com/qunit/qunit-2.3.2.css"> 
   </head> 

   <body> 
      <div id = "qunit"></div> 
      <div id = "qunit-fixture"></div> 
      <script src = "https://code.jquery.com/qunit/qunit-2.3.2.js"></script> 
   </body> 
   
</html>

Wynik

Command - phantomjs qunit.js http: //localhost/tasks/qunit.html

Powyższy program generuje następujące dane wyjściowe.

{"passed":3,"failed":2,"total":5,"runtime":23}
Time taken is 23ms to run 5 tests.
3 passed, 2 failed.

REPL oznacza Read Eval Print Loop. W PhantomJS REPL to tryb interaktywny do testowania kodu JavaScript. Możesz zrobić to samo, co jest zrobione w Google Chrome Inspector lub Firebug, aby wykonać jakiś fragment kodu bezpośrednio na konsoli. REPL zwraca tę samą platformę do wykonywania skryptów.

Wpisane polecenie jest wysyłane do interpretera w celu natychmiastowej interpretacji (EVAL) i udzielenia informacji zwrotnej (PRINT). WchodzićPhantomJS w wierszu poleceń i przeniesie Cię do trybu interaktywnego, w którym możesz bezpośrednio wykonać kod.

Składnia

Jego składnia jest następująca -

Phantomjs

Przykład

Poniższy przykład pokazuje, jak działa REPL w PhantomJS.

phantomjs> console.log("Welcome to phantomjs");
Welcome to phantomjs
Undefined

phantomjs> window.navigator {
   "appCodeName": "Mozilla",
   "appName": "Netscape",
   "appVersion": "5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 (KHTML, like Gecko)
      PhantomJS/2.1.1 Safari/538.1",
   "cookieEnabled": true,
   "language": "en-IN",

   "mimeTypes": {
      "length": 0
   },
   "onLine": false,
   "platform": "Win32",

   "plugins": {
      "length": 0
   },
   "product": "Gecko
   "productSub": "20030107",
   "userAgent": "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 (KHTML, like Gecko)
      PhantomJS/2.1.1 Safari/538.1",
   "vendor": "Apple Computer, Inc.",
   "vendorSub": ""
}

phantomjs>
To find the version
phantomjs> phantom.version {
   "major": 2,
   "minor": 1,
   "patch": 1
}
phantomjs>

Każde polecenie jest wykonywane, a wynik jest wyświetlany. Użyj CTRL + C, CTRL + D lubphantom.exit() wyjść z trybu interaktywnego.

Użyj up/down klawisze strzałek, aby słuchać wcześniej wpisanych poleceń.

Jest jeszcze jedna funkcja o nazwie autocompletion, co pomaga zapamiętać polecenie. Po prostu wpisz „fantom” i naciśnij przycisk „Tab”, aby uzyskać listę dostępnych poleceń, które możesz wykonać.

Wynik

Powyższy program generuje następujące dane wyjściowe.

phantomjs> phantom.→| 
phantomjs> phantom.cookies→| 
phantomjs> phantom.exit→| 
phantomjs> phantom.version→|

W tym rozdziale przedstawimy kilka praktycznych przykładów, które pomogą zrozumieć niektóre ważne cechy PhantomJS.

Przykład 1 - Znajdź szybkość strony

W tym przykładzie użyjemy PhantomJS do znalezienia pliku page speed dla dowolnego adresu URL strony.

var page = require('webpage').create(), 
   system = require('system'), 
   t, address;  

if (system.args.length === 1) { 
   console.log('Usage: loadspeed.js <some URL>'); 
   phantom.exit(1); 
} else { 
   t = Date.now(); 
   address = system.args[1]; 
   
   page.open(address, function (status) { 
      if (status !== 'success') { 
         console.log('FAIL to load the address'); 
      } else { 
         t = Date.now() - t; 
         
         console.log('Page title is ' + page.evaluate(function () { 
            return document.title; 
         })); 
         console.log('Loading time ' + t + ' msec'); 
      } 
      phantom.exit(); 
   }); 
}

Powyższy program generuje następujące dane output.

Command - phantomjs pagespeed.js http://www.google.com

Page title is Google 
Loading time 1396 msec

Przykład 2 - wysyłanie zdarzenia kliknięcia do strony

W poniższym przykładzie użyjemy PhantomJS do wysłania pliku click event do strony.

var page = require('webpage').create(); 
page.onConsoleMessage = function(str) { 
   console.log(str); 
} 
page.open('http://phantomjs.org/api/phantom/', function(status) { 
   page.render('beforeclick.png'); 
   console.log(page.url); 
   
   var element = page.evaluate(function() {   
      return document.querySelector('img[src = "http://phantomjs.org/img/phantomjslogo.png"]'); 
   }); 
   page.sendEvent('click', element.offsetLeft, element.offsetTop, 'left'); 
   
   window.setTimeout(function () { 
      console.log(page.url); 
      page.render('afterclick.png'); 
      phantom.exit(); 
   }, 5000); 
   console.log('element is ' + element); 
});

Powyższy program generuje następujące dane output.

http://phantomjs.org/api/phantom/ 
element is [object Object] 
http://phantomjs.org/

Nasz program utworzy dwa poniższe png obrazy w binteczka. Te dwa obrazy pokazują różnicę przed i po wykonaniu powyższego programu.

Przykład 3 - Prześlij formularz

Poniższy przykład pokazuje, jak przesłać formularz przy użyciu PhantomJS.

var wpage = require('webpage').create();  
wpage.open("http://localhost/tasks/submitform.html", function(status) { 
   console.log(status); 
   wpage.uploadFile('input[name = fileToUpload]', 'output.png'); 
   wpage.render("sform.png");  
   
   var element = wpage.evaluate(function() {   
      return document.querySelector('input[type = "submit"]');   
      // getting details of submit button using queryselector. 
   }); 
   wpage.sendEvent('click', element.offsetLeft, element.offsetTop, 'left');  
   
   // sendevent is used to send click event and also giving the left and top 
      position of the submit button. 
   
   window.setTimeout(function () { 
      console.log(wpage.url); 
      wpage.render("submit.png");  // screenshot is saved in submit.png 
      phantom.exit(); 
   }, 5000);  
   console.log('element is ' + element);  
});

submitform.html

Poniższy kod pokazuje, jak używać submitform.html plik.

<html> 
   <head>
      <title>Window 2</title>
   </head> 

   <body>
      <form action = "submitform.php" method = "post" enctype = "multipart/form-data" 
         id = "form1">  
         <input type = "file" name = "fileToUpload" id = "fileToUpload"> 
         <input type = "submit" value = "Upload Image" name = "submit"> 
      </form> 
   </body>  
   
</html>

Po przesłaniu formularz trafia do submitform.php.

submitform.php

submitform.php właśnie drukuje szczegóły plików.

<?php 
   print_r($_FILES); 
?>

Powyższy program generuje następujące dane output.

Success 
element is [object Object] 
http://localhost/tasks/submitform.php

Obrazy

Poniżej znajdują się obrazy dla file upload i form submit.