Учебники

PhantomJS — Краткое руководство

PhantomJS — Обзор

Говорят , что PhantomJS — это браузер без головы, потому что он не задействует браузер при выполнении кода JavaScript. Выполнение будет отображаться не на дисплее браузера, а в командной строке. Такие функции, как CSS Handling, DOM Manipulation, JSON, Ajax, Canvas, SVG и т. Д., Будут обрабатываться в командной строке. PhantomJS не имеет графического интерфейса и, следовательно, все его выполнение происходит в командной строке.

Используя PhantomJS, мы можем записать в файл, прочитать содержимое файла или загрузить файл, сделать снимок экрана, преобразовать веб-страницу в pdf и многое другое. В безголовых браузерах вы получаете все поведение браузера, то есть куки-файлы, методы Http-запроса, например GET / POST, удаление куки-файлов, удаление куки-файлов и т. Д., Перезагрузка страницы, переход на другую страницу .

PhantomJS использует WebKit, который имеет аналогичную среду просмотра, как известные браузеры — Google Chrome, Mozilla Firefox, Safari и т. Д. Он также предоставляет множество JavaScript API, который помогает делать снимки экрана, загружать файл, записывать в файл, читать файл , взаимодействие с веб-страницами и т. д.

PhantomJS не поддерживает Flash или Video, так как для этого требуются плагины, и их трудно поддерживать в командной строке.

Особенности PhantomJS

Давайте теперь поймем функции, которые предлагает PhantomJS.

Автоматизация страницы

PhantomJS позволяет читать содержимое страницы с помощью его API. Это может помочь манипулировать DOM, использовать внешние библиотеки для выполнения требуемой задачи.

Скриншот

PhantomJS помогает сделать снимок экрана указанной страницы и сохранить его как изображение в различных форматах, таких как PNG, JPEG, PDF и GIF. С помощью снимка экрана, это может легко помочь убедиться, что веб-контент в порядке.

PhantomJS предлагает свойства и методы, с помощью которых он позволяет разработчикам настраивать размер снимков экрана и указывать область, которую они хотят захватить.

Тестирование без головы

PhantomJS помогает тестировать пользовательский интерфейс в командной строке. Хотя с помощью скриншота он может легко помочь найти ошибки в пользовательском интерфейсе. Иногда PhantomJS не может помочь с тестированием в одиночку. Однако его можно обернуть вместе с другими библиотеками тестирования, такими как Mocha, Yoeman и т. Д. Вы можете воспользоваться помощью PhantomJS, чтобы загрузить файл и отправить форму.

PhantomJS можно использовать для проверки входов на сайты и проверки безопасности. PhantomJS может использоваться вместе с другими инструментами, такими как CasperJS, Mocha, Qunit, чтобы сделать тестирование более мощным.

Мониторинг сети

Одной из важных функций PhantomJS является его использование для мониторинга сетевого подключения с использованием доступного API. PhantomJS разрешает проверку сетевого трафика; он подходит для проведения различного анализа поведения и производительности сети.

PhantomJS может использоваться для сбора данных о производительности веб-страницы в реальной среде. PhantomJS можно использовать с такими инструментами, как Yslow, для сбора показателей производительности любых веб-сайтов.

PhantomJS — Настройка среды

PhantomJS является свободным программным обеспечением и распространяется под лицензией BSD . Его легко установить, и он предлагает несколько функций для выполнения сценариев. PhantomJS можно легко запустить на нескольких платформах, таких как Windows, Linux и Mac.

Для загрузки PhantomJS вы можете перейти по адресу — http://phantomjs.org/, а затем нажать на кнопку загрузки.

Для Windows

Страница загрузки показывает вам варианты загрузки для разных ОС. Скачайте zip-файл, распакуйте его, и вы получите исполняемый файл phantom.exe . Задайте для переменной среды PATH путь к файлу phantom.exe. Откройте новую командную строку и введите phantomjs –v . Он должен дать вам текущую версию PhantomJS, которая работает.

Для MAC OS X

Загрузите zip-файл PhantomJS, предназначенный для MAC OS, и извлеките содержимое. Как только содержимое загружено, переместите PhantomJS в — / usr / local / bin / . Выполните команду PhantomJS, т.е. phantomjs –v на терминале, и она должна дать вам описание версии PhantomJS.

Linux 64 бит

Загрузите zip-файл PhantomJS, предназначенный для 64-разрядной ОС Linux, и извлеките содержимое. Как только содержимое загружено, переместите папку PhantomJS в / usr / local / share / и создайте символическую ссылку

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

Выполните phantomjs –v в терминале, и он должен дать версию PhantomJS.

Linux 32 бит

Загрузите zip-файл PhantomJS, предназначенный для 32-разрядной ОС Linux, и извлеките содержимое. Как только содержимое загружено, переместите папку PhantomJS в / usr / local / share / и создайте символическую ссылку —

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

Выполните phantomjs –v в терминале, и он должен дать версию PhantomJS.

Исходный код PhantomJS также можно взять из репозитория git, перейдя по следующей ссылке — https://github.com/ariya/phantomjs/

Для запуска скриптов в PhantomJS, команда выглядит следующим образом:

phantomjs jsfile arg1 arg2… 

PhantomJS — Объект

В этой главе мы рассмотрим четыре важных объекта PhantomJS. Они заключаются в следующем —

  • CookiesEnabled
  • Печенье
  • LibraryPath
  • Версия

Давайте теперь обсудим каждый из них в деталях.

cookiesEnabled

Он сообщает, включены ли файлы cookie или нет. Он вернет истину , если да; иначе ложно .

Синтаксис

Его синтаксис выглядит следующим образом —

phantom.cookiesEnabled

пример

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();

Выход

Команда — phantomjs cookieenabled.js

Cookie Enabled value is : true 

Печенье

Помогает добавлять и устанавливать куки в домен. Возвращает объект со всеми куки, доступными для домена.

Синтаксис

Его синтаксис выглядит следующим образом —

phantom.cookies; 

пример

Имя файла: 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();

Выход

Команда — 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"}]

В приведенном выше примере мы добавили несколько файлов cookie в домен localhost. Затем мы получили его, используя phantom.cookies . Он возвращает объект со всеми файлами cookie, используя метод stringify JSON для преобразования объекта JavaScript в строку. Вы также можете использовать foreach для доступа к имени / значению файлов cookie.

LibraryPath

PhantomJS libraryPath хранит путь к сценарию, который будет использоваться методом injectJS .

Синтаксис

Его синтаксис выглядит следующим образом —

phantom.libraryPath 

пример

Вот пример, чтобы узнать версию.

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;
}; 

Вышеуказанная программа генерирует следующий вывод .

Jquery Tutorial

Версия

Это дает версию PhantomJS, которая работает, и возвращает подробности в объекте. Например: {«major»: 2, «minor»: 1, «patch»: 1}

Синтаксис

Его синтаксис выглядит следующим образом —

phantom.version

пример

Вот пример, чтобы узнать версию.

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

Вышеуказанная программа генерирует следующий вывод .

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

В приведенном выше примере мы использовали console.log для печати версии. В настоящее время мы работаем над версией 2. Он возвращает объект с деталями, показанными в приведенном выше блоке кода.

PhantomJS — Методы

PhantomJS — это платформа, которая помогает выполнять JavaScript без браузера. Для этого используются следующие методы, которые помогают в добавлении файлов cookie, удалении, очистке, выходе из сценария, внедрении JS и т. Д.

Мы обсудим больше об этих методах PhantomJS и их синтаксисе в этой главе. Подобные методы, например addcookie, injectjs, существуют в модуле веб-страницы, что будет обсуждаться в последующих главах.

PhantomJS предоставляет следующие методы, которые могут помочь нам выполнить JavaScript без браузера:

  • addCookie
  • clearCookie
  • deleteCookie
  • Выход
  • InjectJS

Давайте теперь разберемся в этих методах подробно с примерами.

addCookie

Метод addcookie используется для добавления файлов cookie и сохранения данных. Это похоже на то, как браузер хранит его. Он принимает один аргумент, который является объектом со всеми свойствами файлов cookie, и синтаксис для него выглядит следующим образом:

Синтаксис

Его синтаксис выглядит следующим образом —

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

Имя, значение, домен являются обязательными свойствами, которые необходимо добавить в функцию addcookie. Если какое-либо из этих свойств отсутствует в объектах cookie, этот метод завершится ошибкой.

  • name — указывает имя куки.

  • значение — указывает значение файла cookie, который будет использоваться.

  • домен — домен, к которому будет применен файл cookie.

name — указывает имя куки.

значение — указывает значение файла cookie, который будет использоваться.

домен — домен, к которому будет применен файл cookie.

пример

Вот пример метода addcookie .

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); 
   } 
}); 

пример

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>

Вышеуказанная программа генерирует следующий вывод .

Added 3 cookies 
Total cookies :3

Комментарии к коду говорят сами за себя.

clearCookies

Этот метод позволяет удалить все куки.

Синтаксис

Его синтаксис выглядит следующим образом —

phantom.clearCookies();

Эта концепция работает аналогично удалению файлов cookie браузера путем выбора в меню браузера.

пример

Вот пример метода clearCookies .

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>

Вышеуказанная программа генерирует следующий вывод .

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

deleteCookie

Удалите любой файл cookie в CookieJar со свойством name, совпадающим с cookieName. Он вернет true , если успешно удален; иначе ложно .

Синтаксис

Его синтаксис выглядит следующим образом —

phantom.deleteCookie(cookiename);

Давайте разберемся с примерами addcookie, clearcookies и deletecookie .

пример

Вот пример, демонстрирующий использование метода deleteCookie:

Файл: 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); 
   } 
});

Вышеуказанная программа генерирует следующий вывод .

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

Выход

Метод phantom.exit закроет скрипт, который он запустил. Он выходит из программы с указанным возвращаемым значением. Выдает «0» , если не передано значение.

Синтаксис

Его синтаксис выглядит следующим образом —

phantom.exit(value);

Если вы не добавите phantom.exit , то командная строка предполагает, что выполнение все еще включено и не будет завершено.

пример

Давайте посмотрим на пример, чтобы понять использование метода выхода .

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); 
}

Вышеуказанная программа генерирует следующий вывод .

phantomjs exit.js

Welcome to phantomJs 
Exit 1 

Любой фрагмент кода после phantom.exit не будет выполнен, поскольку phantom.exit — это метод для завершения скрипта.

injectJs

InjectJs используется для добавления файлов addtionaljs в фантом. Если файл не найден в текущем каталоге пути библиотеки , свойство phantom (phantom.libraryPath) используется в качестве дополнительного места для отслеживания пути. Он возвращает истину, если добавление файла прошло успешно, иначе ложь в случае неудачи, в случае, если он не может найти файл.

Синтаксис

Его синтаксис выглядит следующим образом —

phantom.injectJs(filename);

пример

Давайте посмотрим на следующий пример, чтобы понять использование injectJs .

Имя файла: inject.js

console.log(“Added file”); 

Имя файла: addfile.js

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

Выход

Команда — C: \ phantomjs \ bin> phantomjs addfile.js

Added file // coming from inject.js
true

В приведенном выше примере addfile.js вызывает файл inject.js, используя injectJs. Когда вы выполняете addfile.js, console.log, присутствующий в inject.js, отображается в выходных данных. Он также показывает true для переменной addfile, поскольку файл inject.js был успешно добавлен.

PhantomJS — Свойства модуля веб-страницы

PhantomJS предоставляет довольно много свойств и методов, чтобы помочь нам взаимодействовать с содержимым внутри веб-страницы.

Команда require («webpage»). Create () создает объект веб-страницы. Мы будем использовать этот объект для управления веб-страницей с помощью свойств и методов, перечисленных ниже.

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

В следующей таблице приведен список всех свойств веб-страницы, которые мы собираемся обсудить.

S.No Свойства и описание
1 canGoBack

Это свойство возвращает true, если в истории переходов была предыдущая страница; если нет, ложь .

2 canGoForward

Это свойство возвращает true, если в истории переходов есть следующая страница; если нет, ложь .

3 clipRect

clipRect — это объект со значениями top, left, width и height, который используется для захвата изображения веб-страницы при использовании метода render ().

4 содержание

Это свойство содержит содержимое веб-страницы.

5 печенье

С помощью файлов cookie вы можете установить / получить файлы cookie, доступные по URL. Он также предоставит вам файлы cookie, доступные по URL-адресу, и новые файлы cookie, установленные на странице.

6 customHeaders

customHeaders указывает дополнительные заголовки HTTP-запроса, которые будут отправляться на сервер для каждого запроса, выданного страницей.

7 Событие

Это дает длинный список событий, то есть модификатор, ключи детали.

8 focusedFrameName

Возвращает имя текущего фокуса.

9 frameContent

Это свойство дает содержимое кадра, который активен.

10 frameName

Возвращает имя текущего фокуса.

11 framePlainText

Это свойство также дает содержимое текущего активного кадра, но только содержимое без каких-либо тегов HTML.

12 frameTitle

Дает название активного кадра.

13 frameUrl

Это свойство даст URL-адрес текущего фокуса.

14 framesCount

Дает количество кадров, представленных на странице.

15 framesName

Дает массив имен кадров.

16 libraryPath

Это свойство имеет путь, который используется методом page.inectJs.

17 navigationLocked

Это свойство определяет, разрешена или нет навигация по странице. Если значение равно true, оно будет отображаться на URL текущей страницы, и нажатие на страницу для перехода на следующую страницу не будет разрешено.

18 offlineStoragePath

Это свойство задает путь, по которому данные хранятся с помощью window.localStorage. Путь можно изменить с помощью —local-storage-path из командной строки.

19 offlineStorageQuota

Это свойство определяет максимальный объем данных, который вы можете сохранить в window.localStorage. Значение составляет 5242880 байт, что составляет 5 МБ. Это значение может быть перезаписано в командной строке с помощью следующей команды —localstorage-quota = size здесь.

20 ownsPages

ownsPages возвращает true или false, если страница, открываемая веб-страницей, является дочерней по отношению к веб-странице.

21 pagesWindowName

PagesWindowName выдаст имена окон, открытых с помощью window.open.

22 страницы

Свойство pages предоставит массив страниц, открытых на странице с помощью window.open. Если страница закрыта в URL, ссылка на нее не будет рассматриваться.

23 размер бумаги

Это свойство дает размер, т.е. размеры веб-страницы, когда ее необходимо использовать для преобразования веб-страницы в формат pdf. PaperSize содержит размеры, необходимые для объекта.

24 простой текст

Это свойство также дает содержимое текущего активного кадра, но только содержимое без каких-либо тегов HTML.

25 scrollPosition

Содержит объект, указывающий положение прокрутки. Это дает слева и сверху.

26 настройки

Это свойство будет предоставлять настройки веб-страницы при использовании метода page.open. После загрузки страницы изменения в настройках параметров не окажут никакого влияния.

27 заглавие

Это свойство даст вам название страницы, которую вы читаете.

28 URL

Это свойство даст URL страницы.

29 viewportSize

Это свойство позволяет изменить размер отображения окна. Он содержит ширину и высоту, которые вы можете прочитать или изменить его в соответствии с потребностями.

30 WindowName

Дает название окна.

31 zoomFactor

Это свойство определяет коэффициент масштабирования для методов render и renderBase64. Это помогает увеличить страницу и сделать снимок экрана, если это необходимо.

Это свойство возвращает true, если в истории переходов была предыдущая страница; если нет, ложь .

Это свойство возвращает true, если в истории переходов есть следующая страница; если нет, ложь .

clipRect — это объект со значениями top, left, width и height, который используется для захвата изображения веб-страницы при использовании метода render ().

Это свойство содержит содержимое веб-страницы.

С помощью файлов cookie вы можете установить / получить файлы cookie, доступные по URL. Он также предоставит вам файлы cookie, доступные по URL-адресу, и новые файлы cookie, установленные на странице.

customHeaders указывает дополнительные заголовки HTTP-запроса, которые будут отправляться на сервер для каждого запроса, выданного страницей.

Это дает длинный список событий, то есть модификатор, ключи детали.

Возвращает имя текущего фокуса.

Это свойство дает содержимое кадра, который активен.

Возвращает имя текущего фокуса.

Это свойство также дает содержимое текущего активного кадра, но только содержимое без каких-либо тегов HTML.

Дает название активного кадра.

Это свойство даст URL-адрес текущего фокуса.

Дает количество кадров, представленных на странице.

Дает массив имен кадров.

Это свойство имеет путь, который используется методом page.inectJs.

Это свойство определяет, разрешена или нет навигация по странице. Если значение равно true, оно будет отображаться на URL текущей страницы, и нажатие на страницу для перехода на следующую страницу не будет разрешено.

Это свойство задает путь, по которому данные хранятся с помощью window.localStorage. Путь можно изменить с помощью —local-storage-path из командной строки.

Это свойство определяет максимальный объем данных, который вы можете сохранить в window.localStorage. Значение составляет 5242880 байт, что составляет 5 МБ. Это значение может быть перезаписано в командной строке с помощью следующей команды —localstorage-quota = size здесь.

ownsPages возвращает true или false, если страница, открываемая веб-страницей, является дочерней по отношению к веб-странице.

PagesWindowName выдаст имена окон, открытых с помощью window.open.

Свойство pages предоставит массив страниц, открытых на странице с помощью window.open. Если страница закрыта в URL, ссылка на нее не будет рассматриваться.

Это свойство дает размер, т.е. размеры веб-страницы, когда ее необходимо использовать для преобразования веб-страницы в формат pdf. PaperSize содержит размеры, необходимые для объекта.

Это свойство также дает содержимое текущего активного кадра, но только содержимое без каких-либо тегов HTML.

Содержит объект, указывающий положение прокрутки. Это дает слева и сверху.

Это свойство будет предоставлять настройки веб-страницы при использовании метода page.open. После загрузки страницы изменения в настройках параметров не окажут никакого влияния.

Это свойство даст вам название страницы, которую вы читаете.

Это свойство даст URL страницы.

Это свойство позволяет изменить размер отображения окна. Он содержит ширину и высоту, которые вы можете прочитать или изменить его в соответствии с потребностями.

Дает название окна.

Это свойство определяет коэффициент масштабирования для методов render и renderBase64. Это помогает увеличить страницу и сделать снимок экрана, если это необходимо.

PhantomJS — методы модуля веб-страницы

Модуль веб-страницы имеет методы для файлов cookie, фреймов, навигации по страницам, перезагрузки, рендеринга и загрузки файлов .

Ниже приведены методы, доступные на веб-странице.

S.No Методы и описание
1 addCookie ()

Метод addCookie добавляет файлы cookie на указанную страницу.

2 childFramesCount ()

Этот метод не рекомендуется согласно http://phantomjs.org.

3 childFramesName ()

Этот метод не рекомендуется согласно http://phantomjs.org.

4 clearCookies ()

Удалит все куки для указанной страницы.

5 близко()

Этот метод используется для закрытия страницы и освобождения используемой памяти. Любой из методов или свойств веб-страницы не будет работать после вызова закрытия.

6 currentFrameName ()

Этот метод не рекомендуется согласно http://phantomjs.org.

7 deleteCookie ()

Это приведет к удалению файла cookie с именем, совпадающим с существующим списком файлов cookie, присутствующих для данного URL-адреса страницы.

8 evaluateAsync ()

Оцените данную функцию асинхронно на странице, не блокируя текущее выполнение. Эта функция помогает выполнять определенные сценарии асинхронно.

9 evaluateJavascript ()

EvaluateJavaScript помогает выполнить функцию, переданную ему в виде строки. Обратите внимание, что передаваемая строка должна быть только функцией.

10 оценки ()

Evaluate выполнит переданную ему функцию. Если функция содержит консольные сообщения, она не отображается непосредственно в терминале. Для отображения любых сообщений консоли вам необходимо использовать фантомный обратный вызов onConsoleMessage.

11 GetPage ()

Это даст вам дочернюю страницу, которая совпадает с именем пользователя, переданным в getpage.

12 вернитесь()

Это дает предыдущую страницу в истории навигации, если только навигация не заблокирована.

13 иди вперед()

Это дает следующую страницу в истории навигации, если только навигация не заблокирована.

14 идти()

Этот метод позволяет вам перемещаться по страницам.

15 includeJs ()

Includejs выполняет внешний JS-файл на странице и выполняет функцию обратного вызова по завершении.

16 injectJs ()

InjectJs включает в себя внешний скрипт из указанного файла на странице. Если файл недоступен в текущем каталоге, он использует libraryPath для дополнительного поиска файла. Возвращает true, если файл введен, иначе false.

17 OpenURL ()

OpenUrl открывает веб-страницу. Это похоже на открытый метод PhantomJS. OpenUrl имеет несколько дополнительных параметров, таких как httpConf, настройки и функции обратного вызова.

18 открыть()

Открыть используется для открытия веб-страницы.

19 релиз()

Release освободит использование кучи памяти для страницы. Не используйте методы экземпляра страницы после вызова релиза. Этот метод похож на метод close и его использование не рекомендуется. Вместо этого используйте wpage.close ().

20 перезагрузить ()

Перезагрузка используется для перезагрузки текущей страницы.

21 renderBase64 ()

Этот метод делает снимок экрана и выдает изображение в виде строки в base46. Renderbase64 поддерживает такие форматы, как PNG, JPEG и JPG. Это не поддерживает GIF на данный момент. Вы можете использовать свойство clipRect, чтобы определить часть для захвата изображения.

22 renderBuffer ()

RenderBuffer переносит захват веб-страницы в буфер изображения, который можно напрямую отправить на сервер. Поддерживаемые форматы: PNG, GIF и JPEG.

23 рендеринга ()

Визуализация помогает взять буфер изображения и сохранить его в соответствии с указанным форматом.

24 SendEvent ()

Он используется для отправки события на веб-страницу. Они не дом события. Каждое из этих событий отправляется на веб-страницу на основе взаимодействия с пользователем.

25 setContent ()

setcontent изменит содержимое страницы указанного URL с указанным содержимым.

26 стоп()

Это помогает остановить загрузку страницы.

27 switchToChildFrame ()

Не рекомендуется использовать switchToFrame ();

28 switchToFocusedFrame ()

Он выбирает кадр, который находится в фокусе.

29 switchToFrame ()

Выбирает кадр с указанным именем, который является дочерним по отношению к текущему кадру.

30 switchToMainFrame ()

Выбирает мэйнфрейм, т.е. корневое окно.

31 switchToParentFrame ()

Он принимает родительский кадр текущего дочернего кадра.

32 загрузить файл()

Этот метод используется для обработки загрузки файла, выполненного с использованием формы в формате HTML. PhantomJS не имеет прямого способа сделать это, используя формы, чего можно добиться с помощью метода uploadFile. Для выбора местоположения файла и места назначения, куда его нужно скопировать, требуется селектор тегов html.

Метод addCookie добавляет файлы cookie на указанную страницу.

Этот метод не рекомендуется согласно http://phantomjs.org.

Этот метод не рекомендуется согласно http://phantomjs.org.

Удалит все куки для указанной страницы.

Этот метод используется для закрытия страницы и освобождения используемой памяти. Любой из методов или свойств веб-страницы не будет работать после вызова закрытия.

Этот метод не рекомендуется согласно http://phantomjs.org.

Это приведет к удалению файла cookie с именем, совпадающим с существующим списком файлов cookie, присутствующих для данного URL-адреса страницы.

Оцените данную функцию асинхронно на странице, не блокируя текущее выполнение. Эта функция помогает выполнять определенные сценарии асинхронно.

EvaluateJavaScript помогает выполнить функцию, переданную ему в виде строки. Обратите внимание, что передаваемая строка должна быть только функцией.

Evaluate выполнит переданную ему функцию. Если функция содержит консольные сообщения, она не отображается непосредственно в терминале. Для отображения любых сообщений консоли вам необходимо использовать фантомный обратный вызов onConsoleMessage.

Это даст вам дочернюю страницу, которая совпадает с именем пользователя, переданным в getpage.

Это дает предыдущую страницу в истории навигации, если только навигация не заблокирована.

Это дает следующую страницу в истории навигации, если только навигация не заблокирована.

Этот метод позволяет вам перемещаться по страницам.

Includejs выполняет внешний JS-файл на странице и выполняет функцию обратного вызова по завершении.

InjectJs включает в себя внешний скрипт из указанного файла на странице. Если файл недоступен в текущем каталоге, он использует libraryPath для дополнительного поиска файла. Возвращает true, если файл введен, иначе false.

OpenUrl открывает веб-страницу. Это похоже на открытый метод PhantomJS. OpenUrl имеет несколько дополнительных параметров, таких как httpConf, настройки и функции обратного вызова.

Открыть используется для открытия веб-страницы.

Release освободит использование кучи памяти для страницы. Не используйте методы экземпляра страницы после вызова релиза. Этот метод похож на метод close и его использование не рекомендуется. Вместо этого используйте wpage.close ().

Перезагрузка используется для перезагрузки текущей страницы.

Этот метод делает снимок экрана и выдает изображение в виде строки в base46. Renderbase64 поддерживает такие форматы, как PNG, JPEG и JPG. Это не поддерживает GIF на данный момент. Вы можете использовать свойство clipRect, чтобы определить часть для захвата изображения.

RenderBuffer переносит захват веб-страницы в буфер изображения, который можно напрямую отправить на сервер. Поддерживаемые форматы: PNG, GIF и JPEG.

Визуализация помогает взять буфер изображения и сохранить его в соответствии с указанным форматом.

Он используется для отправки события на веб-страницу. Они не дом события. Каждое из этих событий отправляется на веб-страницу на основе взаимодействия с пользователем.

setcontent изменит содержимое страницы указанного URL с указанным содержимым.

Это помогает остановить загрузку страницы.

Не рекомендуется использовать switchToFrame ();

Он выбирает кадр, который находится в фокусе.

Выбирает кадр с указанным именем, который является дочерним по отношению к текущему кадру.

Выбирает мэйнфрейм, т.е. корневое окно.

Он принимает родительский кадр текущего дочернего кадра.

Этот метод используется для обработки загрузки файла, выполненного с использованием формы в формате HTML. PhantomJS не имеет прямого способа сделать это, используя формы, чего можно добиться с помощью метода uploadFile. Для выбора местоположения файла и места назначения, куда его нужно скопировать, требуется селектор тегов html.

События веб-страницы модуля / Обратные вызовы

Обратные вызовы, доступные с модулем веб-страницы, описаны в следующей таблице.

S.No Обратные звонки и описание
1 onAlert ()

Этот обратный вызов вызывается, когда на странице есть предупреждение; обратный вызов принимает строку и ничего не возвращает.

2 onCallback ()

OnCallback используется для передачи значений из веб-страницы в объект веб-страницы, и это делается с помощью метода window.callPhantom (), который внутренне вызывает функцию onCallback.

3 onClosing ()

Это вызывается, когда окно закрывается с помощью метода page.close () или метода window.close ().

4 onConfirm ()

Этот обратный вызов вызывается, когда на странице есть подтвержденное сообщение с ок / отмена.

5 onConsoleMessage ()

Этот обратный вызов используется, когда на веб-странице используются консольные сообщения. Метод onConsoleMessage принимает 3 аргумента.

6 OnError ()

Вызывается, когда есть ошибка JavaScript. Аргументами для onError являются msg и stack trace, который является массивом.

7 onFilePicker ()

Это используется для загрузки файла, обратный вызов вызывается, когда пользователь хочет загрузить файл.

8 onInitialized ()

Этот обратный вызов вызывается, когда страница вызывается перед загрузкой.

9 onLoadFinished ()

Эта функция вызывается, когда открытая страница полностью загружена. У него есть один аргумент, который сообщает, когда загрузка была успешной или неудачной.

10 onLoadStarted ()

Этот обратный вызов вызывается, когда страница начинает загружаться.

11 onNavigationRequested ()

Этот обратный вызов сообщает, когда происходит событие навигации.

12 onPageCreated ()

Этот обратный вызов вызывается, когда страница открывает новое дочернее окно.

13 onPrompt ()

Этот обратный вызов вызывается, когда веб-страница вызывает запрос. Требуется 2 аргумента, сообщение и ответ. Возвращаемое значение является строкой.

14 onResourceError ()

Этот обратный вызов вызывается, когда веб-страница не может загрузить файл.

15 onResourceReceived ()

Этот обратный вызов вызывается при получении ресурса, запрашиваемого страницей.

16 onResourceRequested ()

Эта функция вызывается, когда страница запрашивает ресурс.

17 onResourceTimeout ()

Этот обратный вызов вызывается, когда истекает время запрашиваемого ресурса, когда используется settings.resourceTimeout.

18 onUrlChanged ()

Вызывается, когда URL-адрес изменяется с текущего с помощью навигации. У него есть один аргумент для обратного вызова, который представляет собой новую строку URL targetUrl.

Этот обратный вызов вызывается, когда на странице есть предупреждение; обратный вызов принимает строку и ничего не возвращает.

OnCallback используется для передачи значений из веб-страницы в объект веб-страницы, и это делается с помощью метода window.callPhantom (), который внутренне вызывает функцию onCallback.

Это вызывается, когда окно закрывается с помощью метода page.close () или метода window.close ().

Этот обратный вызов вызывается, когда на странице есть подтвержденное сообщение с ок / отмена.

Этот обратный вызов используется, когда на веб-странице используются консольные сообщения. Метод onConsoleMessage принимает 3 аргумента.

Вызывается, когда есть ошибка JavaScript. Аргументами для onError являются msg и stack trace, который является массивом.

Это используется для загрузки файла, обратный вызов вызывается, когда пользователь хочет загрузить файл.

Этот обратный вызов вызывается, когда страница вызывается перед загрузкой.

Эта функция вызывается, когда открытая страница полностью загружена. У него есть один аргумент, который сообщает, когда загрузка была успешной или неудачной.

Этот обратный вызов вызывается, когда страница начинает загружаться.

Этот обратный вызов сообщает, когда происходит событие навигации.

Этот обратный вызов вызывается, когда страница открывает новое дочернее окно.

Этот обратный вызов вызывается, когда веб-страница вызывает запрос. Требуется 2 аргумента, сообщение и ответ. Возвращаемое значение является строкой.

Этот обратный вызов вызывается, когда веб-страница не может загрузить файл.

Этот обратный вызов вызывается при получении ресурса, запрашиваемого страницей.

Эта функция вызывается, когда страница запрашивает ресурс.

Этот обратный вызов вызывается, когда истекает время запрашиваемого ресурса, когда используется settings.resourceTimeout.

Вызывается, когда URL-адрес изменяется с текущего с помощью навигации. У него есть один аргумент для обратного вызова, который представляет собой новую строку URL targetUrl.

Модуль дочернего процесса веб-страницы

Дочерний модуль процесса Phantomjs помогает взаимодействовать с подпроцессами и общаться с ними, используя stdin / stdout / stderr . Дочерние процессы могут использоваться для таких задач, как печать, отправка почты или для вызова программ, написанных на другом языке. Чтобы создать дочерний модуль процесса, вам нужны ссылки.

Например —

var process = require("child_process");

Метод появления

С помощью дочернего процесса spawn вы можете подписаться на его потоки stdout и stderr, чтобы получать данные в режиме реального времени.

Синтаксис

Его синтаксис выглядит следующим образом —

var spawn = require('child_process').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)
})

Выход

Вышеуказанная программа генерирует следующий вывод.

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 

PhantomJS — Свойства модуля файловой системы

Модуль файловой системы имеет множество API для работы с файлами и каталогами. Вы можете создать / написать и удалить файл / каталог. Чтобы начать использовать модуль файловой системы, вам необходимо указать ссылку на модуль fs .

var fs = require('fs');

Для модуля файловой системы доступны два свойства: Разделитель и Рабочий каталог . Позвольте нам понять их в деталях.

Разделитель

Он говорит вам разделитель, используемый для путей к файлам.

  • Для окон: \
  • Для Linux: /

Синтаксис

Его синтаксис выглядит следующим образом —

fs.seperator

пример

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

Вышеуказанная программа генерирует следующий вывод .

undefined

WorkingDirectory

Рабочий каталог — это каталог, в котором выполняется PhantomJS.

Синтаксис

Его синтаксис выглядит следующим образом —

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

пример

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

Вышеуказанная программа генерирует следующий вывод .

C:/phantomjs/bin

PhantomJS — Методы модуля файловой системы

В следующей таблице приведены все методы и их описания, доступные в модуле файловой системы.

S.No Методы и описание
1 абсолютный

Этот метод дает абсолютный путь запуска PhantomJS.

2 changeWorkingDirectory

Это позволяет вам изменить рабочий каталог и возвращает true, если это успешно, в противном случае возвращает false.

3 copyTree

copyTree скопирует каталог из одного пути в другой. Первый параметр — это исходная папка, а второй параметр — папка назначения.

4 копия

Этот метод помогает копировать файл из одного места в другое. Требуется два параметра. Первый параметр — это исходный файл, а второй параметр — путь к файлу, куда он должен быть скопирован. Он выдаст ошибку, если исходный или целевой файл не существует.

5 существует

Он проверяет, существует ли указанный путь к файлу в системе. Возвращает true, если оно присутствует, иначе false.

6 isAbsolute

Этот метод вернет true, если путь к файлу является абсолютным, и false, если относительный.

7 isDirectory

isDirectory сообщает, является ли данный файл каталогом или нет. Возвращает true, если каталог иначе false. Это дает ложь в случае, если данный путь не существует.

8 isExecutable

Этот метод скажет, является ли данный файл исполняемым или нет. Возвращает true, если исполняемый, иначе false.

9 ISFILE

Это дает подробную информацию о том, является ли данный путь к файлу файлом или нет. Он возвращает истину, если это файл, и ложь, если это не так.

10 isLink

Это даст вам значение true, если путь к файлу является символической ссылкой, в противном случае — false.

11 isReadable

Он проверяет, доступен ли данный файл для чтения или нет. Это дает истину, если да, и ложь, если нет.

12 isWritable

Он сообщает, доступен ли для записи данный файл. Возвращает true, если да, в противном случае false.

13 Последнее изменение

Предоставляет информацию о последней модификации файла. Он сообщает дату и время последнего изменения файла.

14 список

Это дает все файлы, присутствующие в каталоге.

15 MakeDirectory

Создает новый каталог.

16 makeTree

makeTree создает все необходимые папки, чтобы иметь возможность формировать конечные каталоги. Это вернет true, если создание было успешным, иначе false. Если каталог уже существует, он вернет true.

17 переехать

Это переместит файл с одного пути на другой.

18 открыть

Он используется для открытия файла.

19 readLink

Это вернет абсолютный путь к файлу или папке, указанной символической ссылкой (или ярлыком в Windows). Если путь не является символической ссылкой или ярлыком, он вернет пустую строку.

20 читать

Это прочитает данный файл.

21 RemoveDirectory

Это удалит данный каталог.

22 removeTree

Он удалит все файлы и папки из данной папки и, наконец, удалит саму папку. Если во время этого процесса возникнет какая-либо ошибка, он выдаст ошибку — «Невозможно удалить дерево каталогов PATH» и приостановить выполнение.

23 Удалить

Удаляет данный файл.

24 размер

Это дает размер файла.

25 потрогать

Создает данный файл.

26 записывать

Пишет в данный файл.

Этот метод дает абсолютный путь запуска PhantomJS.

Это позволяет вам изменить рабочий каталог и возвращает true, если это успешно, в противном случае возвращает false.

copyTree скопирует каталог из одного пути в другой. Первый параметр — это исходная папка, а второй параметр — папка назначения.

Этот метод помогает копировать файл из одного места в другое. Требуется два параметра. Первый параметр — это исходный файл, а второй параметр — путь к файлу, куда он должен быть скопирован. Он выдаст ошибку, если исходный или целевой файл не существует.

Он проверяет, существует ли указанный путь к файлу в системе. Возвращает true, если оно присутствует, иначе false.

Этот метод вернет true, если путь к файлу является абсолютным, и false, если относительный.

isDirectory сообщает, является ли данный файл каталогом или нет. Возвращает true, если каталог иначе false. Это дает ложь в случае, если данный путь не существует.

Этот метод скажет, является ли данный файл исполняемым или нет. Возвращает true, если исполняемый, иначе false.

Это дает подробную информацию о том, является ли данный путь к файлу файлом или нет. Он возвращает истину, если это файл, и ложь, если это не так.

Это даст вам значение true, если путь к файлу является символической ссылкой, в противном случае — false.

Он проверяет, доступен ли данный файл для чтения или нет. Это дает истину, если да, и ложь, если нет.

Он сообщает, доступен ли для записи данный файл. Возвращает true, если да, в противном случае false.

Предоставляет информацию о последней модификации файла. Он сообщает дату и время последнего изменения файла.

Это дает все файлы, присутствующие в каталоге.

Создает новый каталог.

makeTree создает все необходимые папки, чтобы иметь возможность формировать конечные каталоги. Это вернет true, если создание было успешным, иначе false. Если каталог уже существует, он вернет true.

Это переместит файл с одного пути на другой.

Он используется для открытия файла.

Это вернет абсолютный путь к файлу или папке, указанной символической ссылкой (или ярлыком в Windows). Если путь не является символической ссылкой или ярлыком, он вернет пустую строку.

Это прочитает данный файл.

Это удалит данный каталог.

Он удалит все файлы и папки из данной папки и, наконец, удалит саму папку. Если во время этого процесса возникнет какая-либо ошибка, он выдаст ошибку — «Невозможно удалить дерево каталогов PATH» и приостановить выполнение.

Удаляет данный файл.

Это дает размер файла.

Создает данный файл.

Пишет в данный файл.

PhantomJS — Свойства системного модуля

В этой главе мы обсудим различные свойства системного модуля PhantomJS.

арг

Системный модуль PhantomJS имеет различные свойства, которые помогают передавать аргументы, узнавать исполняемый файл и т. Д.

Свойство args в основном возвращает аргументы, переданные в командной строке. Вы также можете передать URL-адрес страницы, который хотите прочитать. Если вы хотите сохранить pdf-файл снимка экрана или загрузить файл, подробности можно передать в командную строку и прочитать с помощью свойства args .

Давайте найдем длину и способ получения каждого аргумента, переданного в командную строку.

Синтаксис

Его синтаксис выглядит следующим образом —

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

пример

Посмотрите на следующий пример, чтобы понять, как работает это свойство.

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

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

Вышеуказанная программа генерирует следующий вывод .

Команда — phantomsjs args.js http: //localhost/tasks/request.html

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

Первое значение — это имя файла, а следующее значение — переданный URL. Вы можете передать больше аргументов в командной строке и получить их с помощью system.args .

окр

Свойство env возвращает сведения о системе.

Синтаксис

Его синтаксис выглядит следующим образом —

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

пример

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

Вышеуказанная программа генерирует следующий вывод.

{"=::":"::\\","=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"}

Операционные системы

Возвращает сведения об используемой операционной системе. Возвращает объект с архитектурой, именем ОС и версией.

Синтаксис

Его синтаксис выглядит следующим образом —

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

пример

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

Вышеуказанная программа генерирует следующий вывод.

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

ПИД-регулятор

Это свойство возвращает идентификатор процесса.

Синтаксис

Его синтаксис выглядит следующим образом —

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

пример

Давайте посмотрим на пример свойства pid .

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

Вышеуказанная программа генерирует следующий вывод.

2160

Платформа

Это свойство возвращает платформу, над которой мы работаем.

Синтаксис

Его синтаксис выглядит следующим образом —

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

пример

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

Вышеуказанная программа генерирует следующий вывод.

Phantomjs

PhantomJS — Свойства модуля веб-сервера

PhantomJS использует встроенный веб-сервер mongoose . В настоящее время PhantomJS не может подключиться ни к какому другому производственному веб-серверу. Что касается соединения, он может обрабатывать 10 соединений одновременно, и более 10 запросов будут ожидать в очереди.

Чтобы запустить веб-сервер, нам нужно использовать следующий синтаксис —

var webserver = require (‘webserver’);

Давайте разберемся со свойством Port , которое используется для прослушивания запросов, отправляемых веб-серверу.

порт

Свойство Port для веб-сервера используется для прослушивания отправленного ему запроса.

Синтаксис

Его синтаксис выглядит следующим образом —

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

пример

Давайте рассмотрим пример, чтобы понять, как работает свойство порта .

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); 

Вышеуказанная программа генерирует следующий вывод.

server started - http://localhost:8080

PhantomJS — Методы модуля веб-сервера

В этой главе мы обсудим различные методы модуля веб-сервера PhantomJS.

близко

Метод close используется для закрытия веб-сервера.

Синтаксис

Его синтаксис выглядит следующим образом —

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

пример

В следующем примере показано, как вы можете использовать метод close .

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);

Вышеуказанная программа генерирует следующий вывод .

server started - http://localhost:8080 
8080

Здесь мы утешаем server.port после закрытия сервера. Следовательно, он не будет отвечать, так как веб-сервер уже закрыт.

Слушать

Метод server.listen принимает функцию port и callback с двумя аргументами, а именно: объект запроса и объект ответа .

Объект запроса содержит следующие свойства:

  • Метод — определяет метод GET / POST.

  • URL — отображает запрошенный URL.

  • httpVersion — отображает актуальную версию http.

  • Заголовки — отображает все заголовки с парами ключ-значение.

  • Post — тело запроса применимо только для метода post.

  • postRaw — если для заголовка Content-Type установлено значение application / x-www-formurlencoded, исходное содержимое сообщения будет сохранено в этом дополнительном свойстве (postRaw), а затем это сообщение будет автоматически обновлено с помощью URL-декодирования. версия данных.

Метод — определяет метод GET / POST.

URL — отображает запрошенный URL.

httpVersion — отображает актуальную версию http.

Заголовки — отображает все заголовки с парами ключ-значение.

Post — тело запроса применимо только для метода post.

postRaw — если для заголовка Content-Type установлено значение application / x-www-formurlencoded, исходное содержимое сообщения будет сохранено в этом дополнительном свойстве (postRaw), а затем это сообщение будет автоматически обновлено с помощью URL-декодирования. версия данных.

Объект ответа содержит следующие свойства:

  • Заголовки — содержит все заголовки HTTP в виде пар ключ-значение. Это должно быть установлено перед вызовом write в первый раз.

  • SetHeader — это устанавливает определенный заголовок.

  • Заголовок (имя) — возвращает значение данного заголовка.

  • StatusCode — устанавливает возвращаемый код состояния HTTP.

  • SetEncoding (encoding) — используется для преобразования данных, переданных в write (). По умолчанию данные будут преобразованы в UTF-8. Укажите «двоичный», если данные являются двоичной строкой. Не требуется, если данные являются буфером (например, из page.renderBuffer).

  • Запись (данные) — отправляет данные для тела ответа. Можно вызывать несколько раз.

  • WriteHead (statusCode, headers) — отправляет заголовок ответа на запрос. Код состояния представляет собой трехзначный код состояния HTTP (например, 404). Последние аргументы и заголовки являются заголовками ответа.

  • Закрыть — закрывает http соединение.

  • CloseGracefully — это похоже на close (), но оно гарантирует, что заголовки ответа были отправлены первыми.

Заголовки — содержит все заголовки HTTP в виде пар ключ-значение. Это должно быть установлено перед вызовом write в первый раз.

SetHeader — это устанавливает определенный заголовок.

Заголовок (имя) — возвращает значение данного заголовка.

StatusCode — устанавливает возвращаемый код состояния HTTP.

SetEncoding (encoding) — используется для преобразования данных, переданных в write (). По умолчанию данные будут преобразованы в UTF-8. Укажите «двоичный», если данные являются двоичной строкой. Не требуется, если данные являются буфером (например, из page.renderBuffer).

Запись (данные) — отправляет данные для тела ответа. Можно вызывать несколько раз.

WriteHead (statusCode, headers) — отправляет заголовок ответа на запрос. Код состояния представляет собой трехзначный код состояния HTTP (например, 404). Последние аргументы и заголовки являются заголовками ответа.

Закрыть — закрывает http соединение.

CloseGracefully — это похоже на close (), но оно гарантирует, что заголовки ответа были отправлены первыми.

Синтаксис

Его синтаксис выглядит следующим образом —

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

пример

Давайте рассмотрим пример, чтобы понять, как работает метод listen .

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(); 
});

Вышеуказанная программа генерирует следующий вывод .

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 — интерфейс командной строки

PhantomJS может быть выполнен с использованием ключевого слова «phantomjs» и имени файла. Например, «phantomjs file.js».

Вы также можете передать аргументы в «file.js» следующим образом:

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

Давайте рассмотрим некоторые параметры, доступные в командной строке.

S.No Вариант и описание
1

—помощь или –h

Будет отображаться все параметры командной строки. Немедленно останавливается и не запустит пройденный скрипт.

2

— версия или –v

Печатает версию работающего PhantomJS. Это остановит выполнение скрипта для запуска.

3

—debug [правда | ложь]

Печатает предупреждения и отладочные сообщения. По умолчанию установлено значение false. Вы также можете использовать [да | нет].

4

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

Имя файла для хранения постоянных файлов cookie.

5

—diskcache = [правда | ложь]

Включает дисковый кеш. Он также принимает значения [да | нет]

6

—disk-Cahe-путь

Путь к дисковому кешу.

7

—ignore-sslerrors = [правда | ложь]

Игнорировать ошибки SSL. Например — просроченные или самозаверяющие ошибки сертификата. По умолчанию установлено значение false. Он также принимает значения [да | нет].

8

—loadimages = [правда | ложь]

Загружает все встроенные изображения. По умолчанию установлено значение true. Это также занимает [да | нет].

9

—local-storagepath = / некоторые / путь

Путь для сохранения содержимого LocalStorage и содержимого WebSQL.

10

—local-StorageQuota = номер

Максимальный размер, чтобы учесть данные.

11

—local-URL-доступ

Позволяет использовать URL-адреса «file: ///» (по умолчанию true).

12

—local к дистанционным urlaccess = [верно | ложь]

Позволяет локальному контенту получать доступ к удаленному URL. По умолчанию установлено значение false. Он также принимает значения [да | нет].

13

—max-диск-CacheSize = размер

Ограничивает размер дискового кэша (в КБ)

14

—offline-хранения-путь

Определяет местоположение для автономного хранилища.

15

—offline квоты хранения

Устанавливает максимальный размер автономного хранилища в КБ.

16

—outputencoding = кодирование

Устанавливает кодировку, используемую для вывода на терминал. По умолчанию используется utf-8.

17

—proxy = адрес: порт

Указывает используемый прокси-сервер (например, — proxy = 192.168.1.1: 8080)

18

—proxytype = [HTTP | socks5 | ни]

Определяет тип прокси-сервера (по умолчанию http)

19

—proxy-авт

Информация аутентификации для прокси. Например —

—proxy-AUTH = имя пользователя: пароль

20

—scriptencoding = кодирование

Устанавливает кодировку, используемую для скрипта. По умолчанию utf8.

21

—script язык

Устанавливает язык скрипта.

—помощь или –h

Будет отображаться все параметры командной строки. Немедленно останавливается и не запустит пройденный скрипт.

— версия или –v

Печатает версию работающего PhantomJS. Это остановит выполнение скрипта для запуска.

—debug [правда | ложь]

Печатает предупреждения и отладочные сообщения. По умолчанию установлено значение false. Вы также можете использовать [да | нет].

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

Имя файла для хранения постоянных файлов cookie.

—diskcache = [правда | ложь]

Включает дисковый кеш. Он также принимает значения [да | нет]

—disk-Cahe-путь

Путь к дисковому кешу.

—ignore-sslerrors = [правда | ложь]

Игнорировать ошибки SSL. Например — просроченные или самозаверяющие ошибки сертификата. По умолчанию установлено значение false. Он также принимает значения [да | нет].

—loadimages = [правда | ложь]

Загружает все встроенные изображения. По умолчанию установлено значение true. Это также занимает [да | нет].

—local-storagepath = / некоторые / путь

Путь для сохранения содержимого LocalStorage и содержимого WebSQL.

—local-StorageQuota = номер

Максимальный размер, чтобы учесть данные.

—local-URL-доступ

Позволяет использовать URL-адреса «file: ///» (по умолчанию true).

—local к дистанционным urlaccess = [верно | ложь]

Позволяет локальному контенту получать доступ к удаленному URL. По умолчанию установлено значение false. Он также принимает значения [да | нет].

—max-диск-CacheSize = размер

Ограничивает размер дискового кэша (в КБ)

—offline-хранения-путь

Определяет местоположение для автономного хранилища.

—offline квоты хранения

Устанавливает максимальный размер автономного хранилища в КБ.

—outputencoding = кодирование

Устанавливает кодировку, используемую для вывода на терминал. По умолчанию используется utf-8.

—proxy = адрес: порт

Указывает используемый прокси-сервер (например, — proxy = 192.168.1.1: 8080)

—proxytype = [HTTP | socks5 | ни]

Определяет тип прокси-сервера (по умолчанию http)

—proxy-авт

Информация аутентификации для прокси. Например —

—proxy-AUTH = имя пользователя: пароль

—scriptencoding = кодирование

Устанавливает кодировку, используемую для скрипта. По умолчанию utf8.

—script язык

Устанавливает язык скрипта.

PhantomJS — Захват экрана

PhantomJS очень помогает сделать снимок экрана веб-страницы и преобразовать веб-страницу в PDF. Мы привели здесь простой пример, чтобы продемонстрировать, как это работает.

пример

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

Выполните вышеуказанную программу, и результат будет сохранен как phantom.png .

Оптимальным решением

Преобразование веб-страниц в PDF-файлы

PhantomJS также помогает конвертировать веб-страницы в PDF-файлы с добавленными в них верхними и нижними колонтитулами. Посмотрите на следующий пример, чтобы понять, как это работает.

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();     
   } 
});

Вышеуказанная программа генерирует следующий вывод .

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

Конвертировать холст в изображение

Phantomjs может легко конвертировать холст в изображение. Посмотрите на следующий пример, чтобы понять, как это работает.

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(); 

Вышеуказанная программа генерирует следующий вывод .

Добро пожаловать Phantomjs

PhantomJS — Автоматизация страниц

PhantomJS с помощью API-интерфейсов модуля веб-страниц может манипулировать веб-страницами и выполнять такие операции, как манипулирование DOM, нажатие кнопок и т. Д.

Извлекать изображения со страницы

Следующая программа показывает, как вы можете использовать PhantomJS для извлечения изображений со страницы.

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));
});

Вышеуказанная программа генерирует следующий вывод .

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"]

Можно включить внешний JavaScript- код на страницу, используя метод веб-страницы injectJS . Существует множество свойств и методов, которые могут помочь в автоматизации страниц и во многом другом. Вы можете обратиться к модулю веб-страницы, где подробно описаны свойства и методы.

PhantomJS — Сетевой мониторинг

С помощью PhantomJS мы можем контролировать сеть и проверять поведение и производительность определенной веб-страницы. В PhantomJS есть обратные вызовы, то есть onResourceRequested и onResourceReceived , которые помогают отслеживать трафик для данной страницы.

пример

В следующем примере показано, как вы можете использовать PhantomJS для мониторинга трафика для данной страницы.

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(); 
      } 
   }); 
}

Пример файла log.txt для предварительного просмотра 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"
      }
   }
}

Выход

Вышеуказанная программа генерирует следующий вывод.

Har Preview

Все журналы собраны в файл .txt, а затем преобразуются так же, как описано выше, с помощью предварительного просмотра HAR, например, ( http://www.softwareishard.com/har/viewer/).

PhantomJS — Тестирование

PhantomJS имеет много API для веб-страницы, которая дает все подробности. PhantomJS может использоваться для тестирования, такого как получение содержимого страницы, совместное использование экрана, преобразование страницы в pdf и т. Д. На рынке существует множество популярных библиотек тестирования, которые можно использовать вместе с PhantomJS и использовать для тестирования. ,

Вот некоторые из популярных фреймворков, которые могут работать с PhantomJS:

  • кофе мокко
  • жасмин
  • QUnit
  • Хиро
  • лайка
  • Buster.JS
  • WebDriver

Пример — PhantomJS с 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> 

Выход

Команда — phantomjs qunit.js http: //localhost/tasks/qunit.html

Вышеуказанная программа генерирует следующий вывод.

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

PhantomJS — REPL

REPL расшифровывается как Read Eval Print Loop . В PhantomJS REPL — это интерактивный режим для тестирования кода JavaScript. Вы можете сделать то же самое, что и в Google Chrome Inspector или Firebug, чтобы выполнить какой-то фрагмент кода прямо на консоли. REPL возвращает вам ту же платформу для выполнения сценариев.

Введенная команда отправляется переводчику для немедленного перевода (EVAL) и для предоставления обратной связи (PRINT). Введите PhantomJS в командной строке, и он перейдет в интерактивный режим, в котором вы сможете выполнить свой код напрямую.

Синтаксис

Его синтаксис выглядит следующим образом —

 Phantomjs

пример

Следующий пример демонстрирует, как REPL работает в PhantomJS.

 phantomjs> console.log («Добро пожаловать в phantomjs»);
 Добро пожаловать в фантомы
 Неопределенный

 phantomjs> window.navigator {
    "appCodeName": "Mozilla",
    "appName": "Netscape",
    "appVersion": "5.0 (Windows NT 6.2; WOW64) AppleWebKit / 538.1 (KHTML, как Gecko)
       PhantomJS / 2.1.1 Safari / 538.1 ",
    "cookieEnabled": правда,
    "язык": "en-IN",

    "mimeTypes": {
       "длина": 0
    },
    "onLine": ложь,
    «платформа»: «Win32»,

    "плагины": {
       "длина": 0
    },
    "product": "Gecko
    "productSub": "20030107",
    "userAgent": "Mozilla / 5.0 (Windows NT 6.2; WOW64) AppleWebKit / 538.1 (KHTML, как Gecko)
       PhantomJS / 2.1.1 Safari / 538.1 ",
    "vendor": "Apple Computer, Inc.",
    "vendorSub": ""
 }

 phantomjs>
 Чтобы найти версию
 phantomjs> phantom.version {
    "Major": 2,
    "несовершеннолетний": 1,
    «патч»: 1
 }
 phantomjs>

Каждая команда выполняется и результат отображается. Используйте CTRL + C, CTRL + D или phantom.exit (), чтобы выйти из интерактивного режима.

Используйте клавиши со стрелками вверх / вниз для прослушивания ранее набранных команд.

Есть еще одна функция, называемая автозаполнением , которая помогает запомнить команду. Просто введите «фантом» и нажмите кнопку «Tab», чтобы получить список доступных команд, которые вы можете выполнить.

Выход

Вышеуказанная программа генерирует следующий вывод.

 фантомы> фантом. → | 
 phantomjs> phantom.cookies → | 
 phantomjs> phantom.exit → | 
 phantomjs> phantom.version → |

PhantomJS — Примеры

В этой главе мы приводим еще несколько практических примеров, чтобы понять некоторые важные особенности PhantomJS.

Пример 1 — Найти скорость страницы

В этом примере мы будем использовать PhantomJS для определения скорости страницы для любого заданного URL-адреса страницы.

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(); 
   }); 
}

Вышеуказанная программа генерирует следующий вывод .

Команда — phantomjs pagespeed.js http://www.google.com

Page title is Google 
Loading time 1396 msec 

Пример 2 — Отправка события клика на страницу

В следующем примере мы будем использовать PhantomJS для отправки события клика на страницу.

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); 
}); 

Вышеуказанная программа генерирует следующий вывод .

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

Наша программа создаст следующие два изображения PNG в папке bin . Эти два изображения показывают разницу до и после выполнения вышеуказанной программы.

Перед кликом

Оптимальным решением

Пример 3 — Отправить форму

В следующем примере показано, как отправить форму с помощью 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

Следующий код показывает, как использовать файл submitform.html .

<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>

Как только форма отправлена, она отправляется на submitform.php .

submitform.php

submitform.php просто печатает информацию о файлах.

<?php 
   print_r($_FILES); 
?> 

Вышеуказанная программа генерирует следующий вывод .

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

Изображений

Ниже приведены изображения для загрузки файла и отправки формы .

Файл загружен