Rubyと筋肉とギターとわたし

筋トレが仕事です

【スクレイピング】HerokuでSelenium::WebDriver::Error::SessionNotCreatedError: session not created from tab crashed

あけましておめでとうございます。

どうもてぃです。

HerokuでSeleniumを使ったスクレイピングをした際にエラーが不規則に出たので共有します。

環境

参考

公式のリポジトリをまず参考にしました。issueが上がってましたね。

github.com

要するに、Heroku上のchromedriverのバージョンがサポートされているかどうか問題で動いたり動かなかったりするらしい。

最後の文にも書いてる通り

Yep, v59 confirmed. Not sure how folks are using this pre-59 :)

https://developers.google.com/web/updates/2017/04/headless-chrome

If this issue persists after v59 and associated Chromedriver are released, I'll re-open it.

chromedriverがリリースされた後に問題が上がればまたissueをopenにするぜ

だって。

対策

このスクレイピングに関しては絶対にうまく行くという保証ができないので、エラーが出た際に落ちないようにするしか無いです。

もしくはAWSGCPを使うか、ですね。

今回は一時的にテスト環境としてHerokuを使っているので、本番環境ができるまではHerokuで我慢し、エラーをキャッチする方法で対処します。

require 'selenium-webdriver'

# selenium headlessモードでchromeを立ち上げる
options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('--headless')
options.add_argument('--disable-gpu')

# userAgentの設定
webdriver = Webdriver::UserAgent.driver(browser: :chrome, agent: :random, orientation: :landscape)
user_agent = webdriver.execute_script('return navigator.userAgent')
options.add_argument("--user-agent=#{user_agent}")

begin
  driver = Selenium::WebDriver.for(:chrome, options: options)
rescue => e
  # Selenium::WebDriver::Error::SessionNotCreatedError: session not created from tab crashed
  puts e
  next
end

driver.get(url) # urlにはスクレイピングしたいurlをセットする

終わりに

一旦はこれで解決です。

日本語での解決方法がなかなかみつからなかったので記事にしました。

他に解決方法がありましたら教えていただけると幸いです。

またGitHubの方で進展が有りましたら記事にすると思います。

では、今年もよろしくお願いしますー。