質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Puppet

Puppetは、Rubyで作られた UNIX系OSのシステム管理を自動で行うためのツールです。

Q&A

0回答

559閲覧

Puppeteerをphpのexec関数で実行するとエラーが出る

takabooo

総合スコア23

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Puppet

Puppetは、Rubyで作られた UNIX系OSのシステム管理を自動で行うためのツールです。

0グッド

1クリップ

投稿2018/05/14 08:39

編集2018/05/14 12:41

Node.jsのライブラリ「Puppeteer」のjsコードをphpから実行したいと思っています。

まず、前提として以下のようなwebページのタイトルを取得してコンソールに表示させる簡単なNode.jsコードを書きました。

sample.js

(async() => { const puppeteer = require('puppeteer'); const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox']}); const page = await browser.newPage(); await page.goto('https://google.co.jp/'); console.log(await page.title()); await browser.close(); })();

ソースは、centos7のサーバーに置いており、
コンソールから、「node sample.js」とするとページタイトルが表示され問題なく動作します。

そこでこの処理を、本題となるphpのexec関数経由で行おうと思い、同一サーバーに以下のようなphpコードを書き、そのphpファイルにブラウザでアクセスしました。

exec('/path/to/node /path/to/sample.js 2>&1',$array); var_dump($array);

すると、以下のようなエラーメッセージが表示されます。

array (size=30) 0 => string '(node:35498) UnhandledPromiseRejectionWarning: Error: Failed to launch chrome!' (length=78) 1 => string '[0514/170117.637027:ERROR:icu_util.cc(133)] Invalid file descriptor to ICU data received.' (length=89) 2 => string '[0514/170117.637161:FATAL:content_main_delegate.cc(57)] Check failed: false.' (length=76) 3 => string '#0 0x563b8fcae82c base::debug::StackTrace::StackTrace()' (length=55) 4 => string '#1 0x563b8fc35290 logging::LogMessage::~LogMessage()' (length=52) 5 => string '#2 0x563b8dee5de3 content::ContentMainDelegate::TerminateForFatalInitializationError()' (length=86) 6 => string '#3 0x563b8f964941 content::ContentMainRunnerImpl::Initialize()' (length=62) 7 => string '#4 0x563b8f96ec12 service_manager::Main()' (length=41) 8 => string '#5 0x563b8f963184 content::ContentMain()' (length=40) 9 => string '#6 0x563b93b3ba39 headless::(anonymous namespace)::RunContentMain()' (length=67) 10 => string '#7 0x563b93b3bac2 headless::HeadlessBrowserMain()' (length=49) 11 => string '#8 0x563b8f96bf8f headless::HeadlessShellMain()' (length=47) 12 => string '#9 0x563b8dee41ac ChromeMain' (length=28) 13 => string '#10 0x7f113a516445 __libc_start_main' (length=36) 14 => string '#11 0x563b8dee402a _start' (length=25) 15 => string '' (length=0) 16 => string '' (length=0) 17 => string '' (length=0) 18 => string 'TROUBLESHOOTING: https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md' (length=94) 19 => string '' (length=0) 20 => string ' at onClose (/path/to/node_modules/puppeteer/lib/Launcher.js:255:14)' (length=91) 21 => string ' at Interface.helper.addEventListener (/paht/to/node_modules/puppeteer/lib/Launcher.js:244:50)' (length=117) 22 => string ' at Interface.emit (events.js:187:15)' (length=40) 23 => string ' at Interface.close (readline.js:374:8)' (length=42) 24 => string ' at Socket.onend (readline.js:152:10)' (length=40) 25 => string ' at Socket.emit (events.js:187:15)' (length=37) 26 => string ' at endReadableNT (_stream_readable.js:1086:12)' (length=50) 27 => string ' at process._tickCallback (internal/process/next_tick.js:63:19)' (length=66) 28 => string '(node:35498) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)' (length=248) 29 => string '(node:35498) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.' (length=204)

上記コードは特に大きな意味をなさないものですが、最終的にやりたいことは、Puppeteerで動的なwebページのブラウジングをして、任意の要素を取得(スクレイピング)したいと思っています。
その実行タイミングをphpからのexecコマンドで制御したいというものです。

当方、Node.jsにはあまり明るくなくて申し訳ないのですが、上記コードで何か問題があるところがあれば、是非ご指摘いただきたく思います。
よろしくお願いいたしますm(_ _)m

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問