あけましておめでとうございます。
どうもてぃです。
HerokuでSeleniumを使ったスクレイピングをした際にエラーが不規則に出たので共有します。
環境
参考
公式のリポジトリをまず参考にしました。issueが上がってましたね。
要するに、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にするぜ
だって。
対策
このスクレイピングに関しては絶対にうまく行くという保証ができないので、エラーが出た際に落ちないようにするしか無いです。
今回は一時的にテスト環境として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の方で進展が有りましたら記事にすると思います。
では、今年もよろしくお願いしますー。