概要
とある用途でSeleniumを使用してWebスクレイピングをするときにヘッドレスChromeを利用しました。
職場でもテストするときにヘッドレスで動かせるようにしたろ!って設定したら動かなかったのです
お前の環境だけじゃい!という内容かもしれないが、動くようにするまでの設定をまとめます
環境
Selenium Gridのhubもnodeも全てローカル環境のみで試しています。
ソフト | バージョン |
---|---|
OS | Windows7 64bit |
Chrome | 67.0.3396.99 |
ChromeDriver | 2.40 |
試したら動かなかった
Selenium(Java)でE2Eテスト環境を構築するで作成した環境に対し、ヘッドレス Chrome ことはじめを参考に設定を変えました。
argsの詳細はCapabilities & ChromeOptionsとかList of Chromium Command Line Switchesで見れます。
prefsはPreferencesとConfiguring Other Preferencesですかね。
良い一覧が見つかりませんでした。
Pitalium環境でなくても org.openqa.selenium.remote.DesiredCapabilities に同じような設定をすれば動くんじゃないかと思います。
[
{
"browserName": "chrome",
"chromeOptions": {
"args": [
"headless",
"disable-gpu",
"remote-debugging-port=9222"
],
"prefs": {
"download.prompt_for_download":false
}
}
}
]
動かしてみるとブラウザは画面に表示されないが・・・
http://localhost:4444/grid/console を確認するとブラウザは使われている。
しかし指定した要素が見つからないエラーで終わってしまいます。
もちろんヘッドレスの設定でなければ要素は見つかり操作が進みます。
動かなかったのでChromeのデバッグをしてみた
ここで念のため設定していた『remote-debugging-port=9222』が活躍します。
Chromeを開き http://localhost:9222 にアクセスすると開いているタブがリンクで一覧表示されます。
そのリンクを開くとヘッドレスで動いているブラウザの画面が見れるのですが、以下のように驚きの白さ
プロキシの設定をしたら動いた
とりあえずプロキシ環境下だからプロキシ設定してみるかなと以下のように設定。
[
{
"browserName": "chrome",
"chromeOptions": {
"args": [
"headless",
"disable-gpu",
"proxy-server=http://proxyserver:8080",
"remote-debugging-port=9222"
],
"prefs": {
"download.prompt_for_download":false
}
}
}
]
先ほどと同様に http://localhost:9222 にアクセスして画面を見ると表示されてるやん!
※問題あるとき以外はこの画面開かない方が良さそう。操作を取ってしまい進まなくなることがある。
んーヘッドレスの時はユーザープロファイルがなんか違うのか?
Stack Overflowとか色々調べたら原因わかりそうだけど解決したから良しとしとこ