普通のレンタルサーバーでphp-phantomjsを使えるようにしてみた話
レンタルサーバー上でWebスクレイピングする時
javascriptを実行させたWebページを取得したい場合、レンタルサーバーだとこれ以外に手段がないんですよね。
なので、いまだに、たまに使うPhantomJS。
そのインストール方法の解説です。
composer version2のレンタルサーバーでも使えます。
一応、明記しておきますが、
PhantomJSのサポートは終了しているので、他のheadlessを使ったほうがいいです。
>【おすすめはどっち?】エックスサーバーとmixhostの違い・注意点・優れたところを比較
目次
レンタルサーバーにphp-phantomjsをインストールする前提条件
- レンタルサーバーにsshログインできる
- レンタルサーバーにftpログインできる
この2つは必須です。
※以下で解説する方法は、mixhostでなくても、レンタルサーバー(エックスサーバーとか)であればいけると思います。
レンタルサーバーにphp-phantomjsをインストールする方法(その1)
まずは、オーソドックスなインストール方法です。
この方法は、sshのみ。ftpは不要です。
普通(?)に「composer install」する方法です。
composer version1であれば、この方法でインストールできるはず。
エックスサーバーは、比較的新しいサーバーであってもcomposer v1なので、この方法でインストールできます。
ちなみに、composerのバージョンの確認方法は、
composer -V
composer version1だったら、こんな感じ、
[hoge@hoge ~]$ composer -V Composer version 1.10.8 2020-06-24 21:23:30
で表示されます。
composer.jsonファイルを作成して、以下を記載します。
{
"scripts": {
"post-install-cmd": [
"PhantomInstaller\\Installer::installPhantomJS"
],
"post-update-cmd": [
"PhantomInstaller\\Installer::installPhantomJS"
]
},
"require": {
"jonnyw/php-phantomjs": "4.*"
}
}あとは、php-phantomjsをインストールしたいフォルダにcomposer.jsonをレンタルサーバーのFTPでアップロードして、sshログイン・そのフォルダに移動し、
composer install
を実行します。
これでインストール完了です。
レンタルサーバーにphp-phantomjsをインストールする方法(その2)
mixhostの場合、composerはversion2なのですが、その場合(その1)のやり方だとエラーが出てインストールできません。
たぶん、こんな感じのエラーが出ます。
Fatal error: Uncaught TypeError: Argument 3 passed to Composer\Downloader\DownloadManager::download() must implement interface Composer\Package\PackageInterface or be null, boolean given, called in /hogehoge/vendor/jakoch/phantomjs-installer/src/PhantomInstaller/Installer.php on line 192 and defined in phar:///opt/cpanel/composer/bin/composer/src/Composer/Downloader/DownloadManager.php:182
Stack trace:
#0 /hogehoge/vendor/jakoch/phantomjs-installer/src/PhantomInstaller/Installer.php(192): Composer\Downloader\DownloadManager->download(Object(Composer\Package\Package), '/hoge/...', false)
#1 /hogehoge/vendor/jakoch/phantomjs-installer/src/PhantomInstaller/Installer.php(121): PhantomInstaller\Installer->download('/hoge/...', '2.1.1')
#2 /hogehoge/vendor/jakoch/phantomjs-installer/src/PhantomInstaller/Installer.php(94): PhantomInstaller\Installer->__invoke()
#3 phar:///opt/cpanel/composer/bin/composer/src/Composer/EventDispatcher/EventDispatcher.php(323): P in phar:///opt/cpanel/composer/bin/composer/src/Composer/Downloader/DownloadManager.php on line 182composerをv1にダウングレードすればいいのかもしれませんが、レンサバではたぶん無理です。
なので、なんとかcomposer v2でインストールしたいなぁ、と思いたどりついたのが、こちら。
composer version2でphp-phantomjsをインストールするには、このページにあるcomposer.jsonを使います。
{
"name": "jonnyw/php-phantomjs",
"description": "A PHP wrapper for loading pages through PhantomJS",
"keywords": ["PhantomJS", "Testing", "Headless Browser"],
"type": "library",
"license": "MIT",
"authors": [
{
"name": "Jonny Wenmoth",
"email": "contact@jonnyw.me",
"homepage": "http://jonnyw.me/"
}
],
"minimum-stability": "stable",
"require": {
"php": ">=5.4.0",
"symfony/config": "^5.0",
"symfony/dependency-injection": "^5.0",
"symfony/filesystem": "^5.0",
"symfony/yaml": "^5.0",
"twig/twig": "^3.0",
"jakoch/phantomjs-installer": "^3.0"
},
"require-dev": {
"phpunit/phpunit": "^4.0",
"zendframework/zendpdf": "^2.0",
"smalot/pdfparser": "^0.9"
},
"autoload": {
"psr-0": {
"JonnyW\\PhantomJs\\": "src"
},
"classmap": ["src/"]
},
"config": {
"bin-dir": "bin"
},
"scripts": {
"post-install-cmd": [
"PhantomInstaller\\Installer::installPhantomJS"
],
"post-update-cmd": [
"PhantomInstaller\\Installer::installPhantomJS"
]
}
}このcomposer.jsonをアップロードして、同じフォルダに「src」フォルダを作成しておき、composer installします。
composer install完了後、srcフォルダに「JonnyW」フォルダを丸ごとアップロードすれば、無事php-phantomjsが使えるようになります。
「JonnyW」は上記githubからダウンロードできます。
レンタルサーバーでphp-phantomjsを使えるように方法(その3)
(その2)でもダメな場合、最後の手段です。
それは、composer version1のサーバー上で、(その1)の方法でphp-phantomjsをインストールし、そのフォルダごと、composer version2のレンタルサーバー側にコピー(FTPなど)する方法です。
このやり方の場合、コピー後にphantomjsの実行ファイルのみ実行権限をつける(chmod 755)必要があります。
php-phantomjsでページを取得してもjavascrptが実行されてなかった場合の対処方法
javascriptを実行する前にページ取得を完了してしまってる可能性もありますので、delayを使うと解決する、かもしれません。
$delay = 5; // 5 seconds $request->setDelay($delay);



コメント