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

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

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

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

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

selenium

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

Q&A

0回答

1207閲覧

HerokuでSeleniumを使った処理がタイムアウトする(H12 Error)為、回避する術を知りたい。(編集)

widget11

総合スコア221

Chrome

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

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

selenium

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

0グッド

0クリップ

投稿2021/03/03 19:29

編集2021/03/03 20:32

selenium web driverを使いheroku上でchromeを起動し自分が仕事で使っているツールをスクレイピング+自動化したいのですがherokuの仕様で30秒超過タイムアウトにより上手く稼働しないです。(汎用的に使いたいのでwebに上げてツール化したいと考えております)

>Web DynoはHTTPリクエストを受信してから30秒以内にレスポンスを返さなければなりません。
30秒を経過すると、Heroku routerによりHTTPコネクションが切断されてしまいます。

ちなみにローカルで立ち上げている際は上手く起動しています。(ローカルではheadlessではなく普通にブラウザが起動します)

まず一部ではありますがコード部分です。
production環境の場合はheadlessで立ち上げる様に条件分岐を書いていて、
option部分をメソッドでまとめています。

アプリのボタンをクリックした後、まず簡単な認証のあるシステムなのでseleniumでidとpassを自動で入力しています。
こちらのコードはログイン処理のみですがそもそもimplicit_waitで20秒は待つ仕様にしている上に認証が終わった後も、
色々ボタン押下操作があるのでresponseが最終的に返ってくるまでに30秒以上は確実にかかってしまいます。

 def login(name, password) Selenium::WebDriver.logger.output = File.join("./", "selenium.log") Selenium::WebDriver.logger.level = :warn if Rails.env.production? Selenium::WebDriver::Chrome.path = ENV.fetch('GOOGLE_CHROME_BIN', nil) @driver = Selenium::WebDriver.for :chrome, options: headless_chrome_options elsif Rails.env.development? @driver = Selenium::WebDriver.for :chrome end @driver.manage.timeouts.implicit_wait = 20 @driver.navigate.to'https://tools' @driver.find_element(:name, 'name').send_keys(name) @driver.find_element(:name, 'password').send_keys(password) sleep 1 @driver.find_element(:name, 'password').send_keys(:return)  end private def headless_chrome_options  options = Selenium::WebDriver::Chrome::Options.new(     prefs: { 'profile.default_content_setting_values.notifications': 2 }, binary: ENV.fetch('GOOGLE_CHROME_SHIM', nil))    options.add_argument('--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.72 Safari/537.36')     options.add_argument('--headless')     options.add_argument('--no-sandbox')     options.add_argument('--disable-gpu')     options.add_argument('--hide-scrollbars')     options.binary = '/app/.apt/usr/bin/google-chrome'     return options   end

どうすればこのタイムアウトを防げますでしょうか?
この様なブラウザ操作を行うアプリはそもそもherokuでやるべきではないのですかね?
もしそうであればherokuの代わりになるホスティングサービスやSaaSがあればご教示いただきたいです。
ご回答いただけると幸いです、よろしくお願いします。

追記

workerなどを使い、認証から何かしらの処理含めた30秒以上かかる処理を非同期で処理する(処理を後置させる分には問題ないです。)ならこれは解決するのですかね?
それともworker内で30秒以上かかる処理もこのH12 errorに引っかかってしまうのでしょうか?

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問