【メモ】python HEROKU slackbot作成 urlを渡したらフルスクリーンキャプチャを返してくれるやつ作った

下記参考に勉強中。

 SeleniumとChromedriverを使用

www.virtual-surfer.com

 

qiita.com

 

■やったこと

仮想通貨はやってなかったので、

slackbotに渡したURLのフルスクリーンキャプチャを取得するようにした。

 

slack

@xxx ss https://www.itmedia.co.jp/

 

f:id:miyako_suteking:20200615162807p:plain

 

■つくったもの

my.mention.py (slackbotのルール)

# 指定されたURLのフルスクリーンを取得して返却
@respond_to('ss(.*)')
def screenshot(messageurl):
    #WebDriverのオプションを設定する
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')

    # x. ブラウザの新規ウィンドウを開く
    print('connectiong to remote brwser...')
    driver = webdriver.Chrome(options=options)
 
    driver.get(re.sub(r'<|>''', url))
    
    print(driver.current_url)

 
    # ページが完全に読み込まれるまでの時間を加味して最大5秒間待ち、スクリーンショットを保存して、画像をpost。
    message.send("スクリーンショットを撮ります。")
    driver.set_page_load_timeout(5)

    # フルスクリーンのキャプチャ取得
    page_width = driver.execute_script('return document.body.scrollWidth')
    print(page_width)
    page_height = driver.execute_script('return document.body.scrollHeight')
    print(page_height)
    driver.set_window_size(page_width, page_height)

    driver.save_screenshot('screenshot.png')
    post_file('./screenshot.png')

    #ブラウザを終了する
    driver.quit()

 

 

  • slackにURLを書くと、 自動で<>で囲まれて渡されてくるので、(slackでco.jpとかが書かれると自動でURLだと認識してリンクになる)渡された値から<>を強引に削除してURL本体を抽出しているw

  • フルスクリーンのキャプチャを撮るには、下記が必要

  options.add_argument('--headless')
  driver.set_window_size

 

 

■エラーの思い出

  • Herokuにデプロイするとエラーがでた

<エラー①>

ModuleNotFoundError: No module named 'selenium'

<エラー②>

ModuleNotFoundError: No module named 'chromedriver_binary'

 

<対応策>

エラー①②について、requirements.txt への追記で対応

requirements.txt (seleniumとchromedriverを認識できるように追記)

selenium==3.141.0
chromedriver-binary==83.0.4103.39.0

 

 

 

  • 更にエラーがでた

<エラー③>

selenium.common.exceptions.WebDriverException: Message: Service chromedriver unexpectedly exited. Status code was: 127

 

<対策>

Herokuでseleniumとchromedriverを動かすために、buildpackの追加が必要とのこと。

requirements.txtの追記もそのまま必要。

 

HerokuのSettings>buildpacksに以下2つを追加

 https://github.com/heroku/heroku-buildpack-google-chrome

 https://github.com/heroku/heroku-buildpack-chromedriver

 

参考にさせていただいた

qiita.com

 

 

これで動いた!!