LoginSignup
10
4

More than 3 years have passed since last update.

PythonとヘッドレスChromeを使って障害情報チェッカーを作ってみた

Last updated at Posted at 2019-12-09

概要

RSS配信されてない障害情報ページをPythonでHTMLを取得して文字列判定するコードを書いてみた。

他にいい方法あればコメントなどで教えてください。

コード概要

  • URLにアクセスしてHTMLを取得
  • HTMLの文章を抜き出す
  • 文章チェック(指定の文字列があるかどうか)
  • 異常があればSlackに飛ばす

参考サイト

PyEnv
Chrome Driver
SlackのWebhook作成手順

事前準備

Amazon Linux2を前提としています。

  • インスタンス作成(t2.microとか適当に)
  • Python環境の用意

もう環境がある人は適当に読み飛ばしましょう。

sudo yum update -y

#Pyenvを取得
sudo yum install git -y
git clone git://github.com/yyuu/pyenv.git ~/.pyenv

#環境変数を設定してリロード
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
source ~/.bash_profile

#Pythonビルド関連の準備
sudo yum install gcc -y
sudo yum install @development zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel xz xz-devel libffi-devel findutils -y

#インストール出来るバージョンの一覧を取ってインストール
#Pyenv global 3.7.5とかするとサーバ全体に反映される
pyenv install --list
pyenv install 3.7.5
pyenv local 3.7.5
  • ヘッドレスChromeのインストール
sudo yum -y install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
#テスト
google-chrome --headless --disable-gpu --window-size=1024,768 --hide-scrollbars --screenshot='yahoo.png' https://www.yahoo.co.jp
  • Pythonのライブラリインストール
pip install --upgrade pip
pip install selenium
pip install beautifulsoup4
pip install slackweb
pip install chromedriver-binary==78.0.3904.70

注意点ですがChromeDriverが対応しているバージョンと、Chromeのバージョンが違うとエラーを起こします。

/opt/google/chrome/chrome --version

上記でChromeのバージョンを取れるので、
このページ
でバージョンを確認して指定するほうが安全です。

コード

本編です。
「vim check.py」とかで編集します。
最後2行は稼働を確認したらコメントアウトしておきましょう。

# coding: UTF-8
# URLにアクセスしてHTMLを取得
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import chromedriver_binary

options = Options()
options.binary_location = '/opt/google/chrome/chrome'
options.add_argument('--headless')
options.add_argument("--no-sandbox");
driver = webdriver.Chrome(options=options)
driver.get('チェック先URL')
html = driver.page_source
driver.quit()

#HTMLの文章を抜き出す
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "html.parser")
html=soup.find('div').get_text()

#文章チェック
word = '障害情報現在、正常にサービスをご利用いただけます。'.encode('utf-8')
pos=html.find(word.decode("utf-8"))

#異常があればSlackに飛ばす
import slackweb
slack = slackweb.Slack(url="SlackのWEBHOOKURL")
if pos == -1:
    slack.notify(text="異常が発生しているようですURLを確認してください\nURL")
#else:
#    slack.notify(text="現在、正常です")

動作確認

python check.py

おまけ

cronに登録する場合はこんな感じ
pyenvの下のPythonを見に行くように書きましょう。

*/10 * * * * /home/ec2-user/.pyenv/shims/python /root/check.py >> /var/log/check.log 2>&1
10
4
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
4