На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Начало работы с PhantomJS


Понадобилось как-то мне для одного проекта в срочном порядке изучить headless-браузер PhantomJS. И вот решил выложить систематизированные материалы по использованию данной программы: установка, примеры кода, работа и прочее. В этой заметке мы разберемся с установкой и запустим простейший скрипт на JavaScript.

Зачем?

Лично мне потребовалась имитация браузера на сервере для парсинга, так как после пары десятков запросов к сайт донору последний выдавал капчу. Причём капчу не простую, а подгружающуюся по JavaScript. А, увы, Curl не умеет работать с JS. Вот и пришлось искать решение.

Установка

Так как я ставил на сервер под управлением Ubuntu, и PhantomJS есть в репозиториях, то установка прошла быстро и буквально в одну команду.

sudo apt-get install phantomjs
Дальше пользователь, от которого вы запускаете скрипты, должен иметь возможность пользоваться shell. Вот и вся установка.

Коды примеров

Управляется PhantomJS с помощью JS, a запускается shell – то есть необходимо использовать еще и серверный язык программирования. Я выбрал PHP. Код файла script.js:

var webPage = require('webpage'); 
console.log('Пример PhantomJS’);
phantom.exit();
Обратите внимание, что метод console.log будет выводить информацию не на консоль браузера, а прямо на экран – на страницу.

А вот и страница phantom.php. Код PHP для запуска

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);

echo(shell_exec('phantomjs script.js'));
flush();
Включаем вывод ошибок, запускаем, очищаем. Вроде должно работать.

Первый запуск

Не работает. Никаких ошибок – чисто белый экран. Точно, мы же забыли вывод

echo(shell_exec('phantomjs script.js 2>&1'));
Проверяем еще раз. Вылезает ошибка:

QXcbConnection: Could not connect to display
Запускаем с параметром:

echo(shell_exec('phantomjs -platform offscreen script.js 2>&1'));
Заработало! Пробуем получить скрин страницы
var page = require('webpage').create();

page.open('https://google.ru', function(status) {
  if (status !== 'success') {
    console.log('Error');
  } else {

page.render("screen.jpg");
  phantom.exit();
  }
});
Скрин:



Не совсем то, что мы обычно видим, но уже что-то. Дальше уже можно писать на JS собственно сам парсер, добавлять прокси, юзер агент и прочее. Но это тема для другой заметки.




тегизаметки, PhantomJS, php, javascript, парсинг





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




Урок по работе со строками (String) на C#
Как я провел лето


© upread.ru 2013-2019
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.