Начало работы с 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 собственно сам парсер, добавлять прокси, юзер агент и прочее. Но это тема для другой заметки.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.