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

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

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

1547閲覧

ヘッドレスChrome - Chrome failed to start: exited abnormally

kgm

総合スコア275

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

1クリップ

投稿2018/10/11 11:52

ヘッドレスchromeでスクレイピングを行う処理をlaravelに組み込んでいます。
使っているドライバはfacebookのphp-webdriverです。
以下のようなChromeClientクラスを作り、コンストラクタの中でchromeを起動しています。

<?php namespace App\Lib; use Facebook\WebDriver\Chrome\ChromeDriver; use Facebook\WebDriver\Chrome\ChromeOptions; use Facebook\WebDriver\Exception\WebDriverException; use Facebook\WebDriver\Remote\DesiredCapabilities; use Facebook\WebDriver\Remote\RemoteWebDriver; use Facebook\WebDriver\Remote\RemoteWebElement; use Facebook\WebDriver\WebDriverBy; use Facebook\WebDriver\WebDriverExpectedCondition; class ChromeClient { public $driver; public function __construct() { putenv('webdriver.chrome.driver=/usr/local/bin/chromedriver'); $option = new ChromeOptions(); $option->addArguments(['--no-sandbox']); $option->addArguments(['--headless']); $option->addArguments(['--disable-gpu']); $option->addArguments(['--disable-dev-shm-usage']); $option->addArguments(['--disable-extensions']); $option->addArguments(['--no-zygote']); $chrome = DesiredCapabilities::chrome(); $chrome->setCapability(ChromeOptions::CAPABILITY, $option); $this->driver = ChromeDriver::start($chrome); }

webアクセスでコントローラからChromeClientクラスのインスタンスを作る時は問題ありませんでした。
しかし、バッチ処理としてコマンドクラスからChromeClientクラスのインスタンスを生成すると、ChromeDriver::start($chrome)で落ちてしまいます。
どちらも実行ユーザはapacheです。

[2018-10-11 20:10:06] local.ERROR: unknown error: Chrome failed to start: exited abnormally (unknown error: DevToolsActivePort file doesn't exist) (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.) (Driver info: chromedriver=2.42.591071 (0b695ff80972cc1a65a5cd643186d2ae582cd4ac),platform=Linux 3.10.0-327.4.5.el7.x86_64 x86_64) {"exception":"[object] (Facebook\WebDriver\Exception\UnknownServerException(code: 0): unknown error: Chrome failed to start: exited abnormally (unknown error: DevToolsActivePort file doesn't exist) (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.) (Driver info: chromedriver=2.42.591071 (0b695ff80972cc1a65a5cd643186d2ae582cd4ac),platform=Linux 3.10.0-327.4.5.el7.x86_64 x86_64) at /vagrant/SampleSite/vendor/facebook/webdriver/lib/Exception/WebDriverException.php:114)

また、httpdのphp.confに、

SetEnv webdriver.chrome.driver /usr/local/bin/chromedriver

を追加してみましたが、同様のエラーが吐き出されchromeは起動できませんでした。

対処方法をご存知の方、ご教授下さい。

環境

  • CentOS7.2
  • apache2.4
  • Laravel5.5
  • php7.2
  • php-webdriver2.42

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

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

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

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

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

guest

回答1

0

自己解決

解決はしていませんが、代替が見つかったので記します。

composer updateしてみたらエラーメッセージが変わりました。
落ちた箇所は同じChromeDriver::start($chrome)です。

[2018-10-12 22:20:32] local.ERROR: Curl error thrown for http POST to /session with params: {"desiredCapabilities":{"browserName":"chrome","platform":"ANY","chromeOptions":{"binary":"","args":["--no-sandbox","--headless","--disable-gpu","--disable-dev-shm-usage","--disable-extensions"]}}} Operation timed out after 30001 milliseconds with 0 out of -1 bytes received {"exception":"[object] (Facebook\WebDriver\Exception\WebDriverCurlException(code: 0): Curl error thrown for http POST to /session with params: {\"desiredCapabilities\":{\"browserName\":\"chrome\",\"platform\":\"ANY\",\"chromeOptions\":{\"binary\":\"\",\"args\":[\"--no-sandbox\",\"--headless\",\"--disable-gpu\",\"--disable-dev-shm-usage\",\"--disable-extensions\"]}}} Operation timed out after 30001 milliseconds with 0 out of -1 bytes received at /vagrant/SampleSite/vendor/facebook/webdriver/lib/Remote/HttpCommandExecutor.php:292)

このバッチ処理をジョブ(DBキュー)にしてみたら、なぜか上手くいきました。

queueリスナー

sudo -u apache php artisan queue:listen --tries=1 --sleep=20 --timeout=80

ジョブ

<?php namespace App\Jobs; use Illuminate\Bus\Queueable; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; class ProcessCrawlingBatch implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; public function handle() { $client = new \App\Lib\ChromeClient(); $client->crawl(); } }

やっている処理は同じで実行ユーザも同じapacheなのに何でですかね?
理由不明ですが、ご報告まで。

投稿2018/10/12 14:38

kgm

総合スコア275

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問