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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Chrome

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

selenium

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

Q&A

解決済

5回答

6327閲覧

【未解決】user-data-dirを設定しているSelenium WebDriverでChromeのheadlessモードが利用できない

yoshi_10_11

総合スコア241

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Chrome

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

selenium

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

0グッド

2クリップ

投稿2018/08/22 02:35

編集2019/02/08 02:03

2019/2/8更新
一度「解決済み」にしましたが、後から再度試してみたところ、再現ができなかったので、未解決扱いとしてご確認をお願いいたします。

こんにちは。
現在、SeleniumとChromeDriverを利用してChromeを動かしてスクレイピングを行っております。
今回、SeleniumWebDriverにuser-data-dirheadlessとの設定を両立させることができなくて困っています。

##経緯
これまで、Seleniumの初期設定コードを

ruby

1caps = Selenium::WebDriver::Remote::Capabilities.chrome(chromeOptions: {args: ["--user-data-dir=./profile"]}) 2@d = Selenium::WebDriver.for :chrome, desired_capabilities: caps

とし、問題なくSeleniumが起動しておりました。user-data-dirを設定することで、Cookie値などの情報を残しています。

今回、Seleniumなどのアップデートがあったこと、headlessモードを組み込みたいと思い、

を以下のように追加しました。

ruby

1caps = Selenium::WebDriver::Remote::Capabilities.chrome( 2 options: Selenium::WebDriver::Chrome::Options.new( 3 args: ["--headless", "--user-data-dir=./profile"] 4 ) 5) 6 7@d = Selenium::WebDriver.for :chrome, desired_capabilities: caps

しかし、このプログラムでは毎回Timeoutエラーとなってしまいます。

エラーコード

[0822/111304.239:ERROR:gpu_process_transport_factory.cc(1016)] Lost UI shared context. DevTools listening on ws://127.0.0.1:53760/devtools/browser/d3a80661-b207-45b7-9e12-cb0a5601914d C:/Ruby23/lib/ruby/2.3.0/net/protocol.rb:158:in `rbuf_fill': Net::ReadTimeout (Net::ReadTimeout) from C:/Ruby23/lib/ruby/2.3.0/net/protocol.rb:136:in `readuntil' from C:/Ruby23/lib/ruby/2.3.0/net/protocol.rb:146:in `readline' from C:/Ruby23/lib/ruby/2.3.0/net/http/response.rb:40:in `read_status_line' from C:/Ruby23/lib/ruby/2.3.0/net/http/response.rb:29:in `read_new' from C:/Ruby23/lib/ruby/2.3.0/net/http.rb:1437:in `block in transport_request' from C:/Ruby23/lib/ruby/2.3.0/net/http.rb:1434:in `catch' from C:/Ruby23/lib/ruby/2.3.0/net/http.rb:1434:in `transport_request' from C:/Ruby23/lib/ruby/2.3.0/net/http.rb:1407:in `request' from C:/Ruby23/lib/ruby/2.3.0/net/http.rb:1400:in `block in request' from C:/Ruby23/lib/ruby/2.3.0/net/http.rb:853:in `start' from C:/Ruby23/lib/ruby/2.3.0/net/http.rb:1398:in `request' from C:/Ruby23/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/remote/http/default.rb:121:in `response_for' from C:/Ruby23/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/remote/http/default.rb:76:in `request' from C:/Ruby23/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/remote/http/common.rb:62:in `call' from C:/Ruby23/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/remote/bridge.rb:164:in `execute' from C:/Ruby23/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/remote/bridge.rb:97:in `create_session' from C:/Ruby23/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/remote/bridge.rb:53:in `handshake' from C:/Ruby23/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/chrome/driver.rb:48:in `initialize' from C:/Ruby23/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/common/driver.rb:44:in `new' from C:/Ruby23/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver/common/driver.rb:44:in `for' from C:/Ruby23/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.14.0/lib/selenium/webdriver.rb:86:in `for' from like_follow_comment.rb:221:in `<main>'

これまで試したこと

これらのことが起こったため、これまでに以下の対応策を試しましたが全部ダメでした。

######以前のコード様式に書き足してみた

ruby

1caps = Selenium::WebDriver::Remote::Capabilities.chrome(chromeOptions: {args: ["--headless", "--user-data-dir=./profile"]}) 2@d = Selenium::WebDriver.for :chrome, desired_capabilities: caps

結果…Timeoutエラー

######以前のコード様式でheadlessのみ書いてみた

ruby

1caps = Selenium::WebDriver::Remote::Capabilities.chrome(chromeOptions: {args: ["--headless"]}) 2@d = Selenium::WebDriver.for :chrome, desired_capabilities: caps

結果…headlessがちゃんと動いた!(でも、当然user-data-dirは機能しないです)

######新しいコード様式でheadlessのみ書いてみた

ruby

1caps = Selenium::WebDriver::Remote::Capabilities.chrome( 2 options: Selenium::WebDriver::Chrome::Options.new( 3 args: ["--headless"] 4 ) 5)

結果…普通にChromeが立ち上がってしまう

######設定値にdisable-gpuを組み込んだ

ruby

1--disable-gpu

変化なし(というか、今のバージョンではいらないらしいですね!)

######Capabilitiesとかのコードを省いた

ruby

1options = Selenium::WebDriver::Chrome::Options.new 2options.add_argument("--headless") 3options.add_argument("--user-data-dir=./profile") 4@d = Selenium::WebDriver.for :chrome, options: options

Timeoutエラー
※ちなみに、なぜかMac環境では動いた…がdriver.find_elementsなどのコードでXPATHを特定することができなくなってた

######この形式を試してみたその1

ruby

1caps = Selenium::WebDriver::Remote::Capabilities.chrome("chromeOptions" => {args: ["--headless","--user-data-dir=./profile"]})

結果…エラー

C:/Ruby23/lib/ruby/2.3.0/net/protocol.rb:158:in `rbuf_fill': Net::ReadTimeout (Net::ReadTimeout) from C:/Ruby23/lib/ruby/2.3.0/net/protocol.rb:136:in `readuntil' from C:/Ruby23/lib/ruby/2.3.0/net/protocol.rb:146:in `readline' from C:/Ruby23/lib/ruby/2.3.0/net/http/response.rb:40:in `read_status_line' from C:/Ruby23/lib/ruby/2.3.0/net/http/response.rb:29:in `read_new' from C:/Ruby23/lib/ruby/2.3.0/net/http.rb:1437:in `block in transport_request' from C:/Ruby23/lib/ruby/2.3.0/net/http.rb:1434:in `catch' from C:/Ruby23/lib/ruby/2.3.0/net/http.rb:1434:in `transport_request' from C:/Ruby23/lib/ruby/2.3.0/net/http.rb:1407:in `request' from C:/Ruby23/lib/ruby/2.3.0/net/http.rb:1400:in `block in request' from C:/Ruby23/lib/ruby/2.3.0/net/http.rb:853:in `start' from C:/Ruby23/lib/ruby/2.3.0/net/http.rb:1398:in `request'

######この形式を試してみたその2

ruby

1caps = Selenium::WebDriver::Remote::Capabilities.chrome("chromeOptions" => {args: ["--headless"]})

結果…headlessのみ、user-data-dirの設定であれば問題なく動いた!

開発環境

Windows…Windows Server 2016 Datacenter バージョン1607

Ruby… 2.3.3p222

ChromeDriver… 2.41.578737
ダウンロードしたexeファイルをCドライブ>Ruby23>binに格納
Selenium-WebDriver… 3.14.0
…gem install selenium-webdriverで導入

すべてパスなども問題なく通っています

このような状況でございます。解決策がわからない状況なので、ご教授のほどよろしくお願いいたします。。。設定コード以下についてはおそらく今回のエラーに関係ないと思われることと、企業秘密であるため公開しておりません。

9/21追記
結局、Windows(AWS EC2)ではheadlessは機能せず、Mac上では機能する…ということがわかり、ベトナムのエンジニアさんにも確認をしてみましたが解決せず現状は今も変わっておりません。仕方がないので、実現しようと思っていたことを違う方法で試してみたいと思いますが、もし、解決方法をご存知の方がいらっしゃいましたらご教授いただければ幸いです。

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

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

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

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

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

guest

回答5

0

自己解決

ruby

1USER_AGENT = "xxxxx" 2option = Selenium::WebDriver::Chrome::Options.new(args: ["--headless", "--lang=ja", "--user-data-dir=./profile", "--user-agent=#{USER_AGENT}"]) 3 4driver = Selenium::WebDriver.for :chrome, options: option

自己解決したので更新します

投稿2019/01/23 05:58

yoshi_10_11

総合スコア241

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

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

b_b_b

2019/02/01 07:07

同じコードで試してみたのですが、headlessではできる自動ログイン処理をheadlessモードにすると、user-data-dirが効いていないようで期待している結果が得られません。@Toku1011さんはこのコードでログイン処理成功しているのですよね、、?
yoshi_10_11

2019/02/08 02:04

すみません、確認のため私の方で再度試してみたところ、セレニウムドライバーが立ち上がらないという事態になり再現性がありませんでした。 そのため、再度この質問ページを質問中扱いにするため、【未解決】の文字を入れました。大変申し訳ございませんでした。再度、こちらでも調査を進めていきます。
guest

0

こちらの問題に自分も引っかかったのですが、何か解決策がありましたらご教示いただければありがたいです。

投稿2019/01/23 05:51

b_b_b

総合スコア32

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

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

yoshi_10_11

2019/01/23 05:57 編集

現在、このコードで利用できるようになりましたので更新して解決済みにしておきます。質問したままで解決後もほったらかしにしてしまいすみません。 USER_AGENT = "xxxxx" option = Selenium::WebDriver::Chrome::Options.new(args: ["--headless", "--lang=ja", "--user-data-dir=./profile", "--user-agent=#{USER_AGENT}"]) driver = Selenium::WebDriver.for :chrome, options: option
guest

0

Ruby

1profile_dir = File.expand_path("profile",__dir__).encode("UTF-8") 2 3U_d_Dir = "--user-data-dir=" + profile_dir 4options = Selenium::WebDriver::Chrome::Options.new(args: ["--headless" ,'--no-sandbox', U_d_Dir]) 5driver = Selenium::WebDriver.for :chrome, options: options

Windows 10 ですが‥‥

投稿2019/10/28 04:34

編集2019/10/28 06:37
Reach

総合スコア733

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

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

kankan0

2019/11/10 17:49

debug.logに「Failed to add sandbox rule. error = 2」とあったので、--no-sandboxが必要になるのでしょうかね。
guest

0

大変申し訳ございません。
自己解決としていたのですが、再度実行する機会があり自己解決コードで試したところ、実行できなかったという事態がありました。
そのため、再度「質問中」扱いとしております。(システム上、一度解決済みにしてしまうと変更ができないみたいなので、表題に書いてあります)

私の方でも再度調査を進めてまいります。よろしくお願いいたします。

投稿2019/02/08 02:12

yoshi_10_11

総合スコア241

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

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

oh_rusty_nail

2019/02/08 03:35

ステータス変更ありがとうございます。 私も同現象を追っているので何かわかったことがあればメモしていきます。 よろしくお願いします。
guest

0

Toku1011 さん

結局、headlessモードでuser-data-dirは有効(=ログイン状態の保持などができる)にできたということでしょうか?
また、その場合は何をすることでできるようになったのでしょうか?
上記コードにSNSログインをするコードを付け足して試してみたところ、
非headlessでは認証情報が保持されて、headlessでは保持されていませんでした。

投稿2019/02/05 15:12

oh_rusty_nail

総合スコア319

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

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

yoshi_10_11

2019/02/08 02:02

すみません、確認のため私の方で再度試してみたところ、セレニウムドライバーが立ち上がらないという事態になり再現性がありませんでした。 そのため、再度この質問ページを質問中扱いにするため、【未解決】の文字を入れました。大変申し訳ございませんでした。再度、こちらでも調査を進めていきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問