問題の概要
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が待っているのでは?という部分です。
特定の要素だけアクセスできればそれでいいので、画像を読み込まない、といった対策ができればいいのではないかなと考えています。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。