【メモ】python HEROKU slackbot作成 urlを渡したらフルスクリーンキャプチャを返してくれるやつ作った
下記参考に勉強中。
SeleniumとChromedriverを使用
■やったこと
仮想通貨はやってなかったので、
slackbotに渡したURLのフルスクリーンキャプチャを取得するようにした。
slack
@xxx ss https://www.itmedia.co.jp/
■つくったもの
my.mention.py (slackbotのルール)
# 指定されたURLのフルスクリーンを取得して返却# @sugoi-bot ss https://news.yahoo.co.jp/@respond_to('ss(.*)')def screenshot(message, url):#WebDriverのオプションを設定するoptions = webdriver.ChromeOptions()options.add_argument('--headless')
# x. ブラウザの新規ウィンドウを開くprint('connectiong to remote brwser...')driver.get(re.sub(r'<|>', '', url))print(driver.current_url)
# ページが完全に読み込まれるまでの時間を加味して最大5秒間待ち、スクリーンショットを保存して、画像をpost。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.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を認識できるように追記)
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つを追加
参考にさせていただいた
これで動いた!!