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 с помощью 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" } } }
Выход
Вышеуказанная программа генерирует следующий вывод.
Все журналы собраны в файл .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
Изображений
Ниже приведены изображения для загрузки файла и отправки формы .