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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

2回答

23239閲覧

SeleniumでChromeのヘッドレスブラウザの動作が遅い

mackerel6.023

総合スコア317

Chrome

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

1グッド

3クリップ

投稿2020/01/28 05:27

編集2020/01/28 07:58

問題の概要

SeleniumでChromeを動かして楽天のTOPページを開いたときに、ヘッドレスじゃないときに比べてヘッドレスにしたときのほうが極端に読み込みが遅くなるという現象が発生しています。
通常はヘッドレスのほうが早くなるという認識なので、なにかご存じの方がおられたら情報をいただけると助かります。

コード

print文はデバッグ用です。
コードは問題部分を抽出して再編しています。

Python

1from selenium import webdriver 2import datetime 3 4start = datetime.datetime.now().timestamp() 5options = webdriver.ChromeOptions() 6options.add_argument('--headless') 7options.add_argument('--no-sandbox') 8browser = webdriver.Chrome(options=options) 9print('open browser:{}s'.format(datetime.datetime.now().timestamp() - start)) 10browser.get('https://www.rakuten.co.jp/') 11print('open top page:{}s'.format(datetime.datetime.now().timestamp() - start)) 12browser.close() 13browser.quit() 14print('close browser:{}s'.format(datetime.datetime.now().timestamp() - start))

バージョン情報

  • Python:3.6.8
  • Chrome:79.0.3945.130
  • ChromeDriver:79.0.3945.36

わかっていること

Windowsローカル上でヘッドレスを付けずに起動すると、およそ以下の時間がかかりました。

  • ブラウザ起動:5.68秒
  • TOPページ表示:9.92秒(TOPページ表示だけにかかっているのは4.24秒)

ヘッドレスをつけてWindowsで起動すると

  • ブラウザ起動:5.38秒
  • TOPページ表示:22.94秒

ヘッドレスをつけてLinuxで起動すると

  • ブラウザ起動:2.16秒
  • TOPページ表示:20.03秒

知りたいこと

最終的にはディスプレイがないLinux環境でヘッドレスで動作させたいので、ヘッドレスで高速に動作させる必要があります。
環境によらず遅いということで、起動パラメータ等で回避させる必要があると考えていますが、なにか情報があればお願いします。

気になるのは例えば動的に切り替えている画像などの要素が読み込まれるまでgetが待っているのでは?という部分です。
特定の要素だけアクセスできればそれでいいので、画像を読み込まない、といった対策ができればいいのではないかなと考えています。

edo159👍を押しています

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

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

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

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

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

guest

回答2

0

自己解決

OptionのUAを設定することで解決。
参考:headless chromeをPythonのseleniumから動かして引数を考えた (Ubuntu 16.04)

他に有効そうなものはあったが、決定的に速度を変えたのはUAの設定。
適当な文字列でも設定すれば早くなった。

Python

1options.add_argument('--user-agent=hogehoge')

おそらくはUAを判定してデザインを調整するタイプのサイトに置いてUAの確認がタイムアウトになるようなケースで発生していたのでは?と思われる。
ヘッドレスにするとUAが消えるというのは勉強になった。

投稿2020/01/28 23:47

mackerel6.023

総合スコア317

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

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

0

python

1options.add_argument('--single-process') 2options.add_argument('--disable-application-cache') 3options.add_argument('--ignore-certificate-errors') 4options.add_argument('--start-maximized')

このあたりどうでしょうか。

投稿2020/01/28 06:55

shirai

総合スコア1289

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

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

mackerel6.023

2020/01/28 07:03

ご回答ありがとうございます。 試してみたところブラウザ起動はやや早くなりましたが、ページの読み込みは相変わらずでした。 ちなみにWindows環境では'--single-process'のオプションは使えず、変化なしでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問