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

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

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

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

Q&A

解決済

1回答

2449閲覧

puppeteerでHeadlessChromeの立ち上がりを高速化したい

pikopikopiko

総合スコア11

Node.js

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

0グッド

1クリップ

投稿2018/06/25 06:47

編集2018/06/26 08:25

現在、業務の効率化のための簡単なWeb操作の自動化や、スクレイピングを行うツールを作成しています。
個人用ツールですのでクライアントPC(Windows7)より実行します。

現在はnode.jspuppeteerパッケージを使っていますが、どうもHeadless Chromeの立ち上がりに
毎回時間がかかり、テストや実際の処理がスムーズに行かず困っています。

この立ち上がり処理のネックを低減する方法はありませんでしょうか?
Headless Chromeのデーモン化等できればと考えているのですが、、
(Chromeはメモリ使用量が非常に大きいイメージがあるので常駐させるのも少し躊躇いますが)

puppeteer以外のパッケージを利用する方法でも構いませんので、どなたかご存知でしたらご教示ください。

素人質問で拙い面が多々あると思いますが、よろしくお願いします。

どのようなコードなのかとのご意見頂きましたので、
コードの一部を記載します。

node.js

1(async() => { 2 const browser = await puppeteer.launch({ "ignoreHTTPSErrors" : true }); 3 const page = await browser.newPage(); 4 await page.goto(uri.uri); 5 /* Web操作 */ 6 browser.close(); 7)

立ち上がりの高速化を検討しているため、Webページに対する操作は省略しています。
また、ignoreHTTPSErrors : trueは、接続先のページで証明書エラーが出るため記載しています。

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

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

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

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

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

HayatoKamono

2018/06/25 07:31

どういうコードでどのような使い方をしていて、どのくらいの時間がかかっているのかを具体的に記載した方が質問の前提を閲覧者側と共有出来ると思います。
pikopikopiko

2018/06/26 08:25

ご指摘ありがとうございます。立ち上がり処理のコードを追記しました。ほぼサンプル通りといった形ですが、よろしくお願いします。
guest

回答1

0

ベストアンサー

puppeteerに限らずChromeDriverを使う場合でもheadlessオプションを指定してChromeを起動すると処理時間が数倍から数十倍以上かかる現象があります。

対策として、以下の2つの起動オプションを追加します。

  • "--proxy-server='direct://'"
  • "--proxy-bypass-list=*"

Java

1// Selenium 環境で ChromeDriver から起動する場合 2ChromeOptions options = new ChromeOptions(); 3options.addArguments("--headless"); 4options.addArguments("--proxy-server='direct://'"); 5options.addArguments("--proxy-bypass-list=*"); 6ChromeDriver driver = new ChromeDriver(options); 7

puppeteerについては私は未検証ですが、恐らく以下のような起動方法になるかと。

JavaScript

1// puppeteer の場合 2const browser = await puppeteer.launch({ 3 headless: true, 4 args: ["--proxy-server='direct://'", "--proxy-bypass-list=*"] 5});

ご参考になれば

投稿2018/06/26 02:25

編集2018/06/26 02:27
tkanda

総合スコア2425

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

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

pikopikopiko

2018/06/26 08:37

tkandaさん ご回答ありがとうございます。 >headlessオプションを指定してChromeを起動すると処理時間が数倍から数十倍以上かかる現象があります。 こちら初耳でした。そのような現象が発生するのですね。 ご提示頂いたオプションを追加するとProxyを経由しなくなるのでしょうか? 調べた限りではそのようなオプションだと読み取れました。 Proxy環境下で作業を行っているので、そうであればこのオプションは使用できないかもしれません。。 もう1点質問なのですが、このオプションを追加すると、なぜ立ち上がりが早くなるのでしょうか?
tkanda

2018/06/26 12:39

このオプションはProxy設定を検証したり、実際にProxyサーバーに接続を試みる処理をスキップする効果があるのだと思います。なぜ、ヘッドレスの場合にだけこのオプションが必要になるのかは、実際のところよく知りません。Proxy環境下であれば、Proxyサーバーを明示的に指定すると同じ効果が得られるかもしれません。このオプションが有効という情報は以前にJava+Seleniumの環境で同じ現象に遭遇した際に検索してたどり着きました。" chrome headless slow" でググるといくつかのスレッドが見つかると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問