centos+python+seleniumでwordpressのPVをslackに通知する

2020年12月21日

centos+python+seleniumでwordpressのPVをslackに通知する

本ブログの閲覧数はまだまだなのですが、少しずつ見て頂けるようになってきました。
PVを確認する際に手動で「ログインしてアナリティクスのページを開いて...」とdry原則を破りまくっていました。さすがに自動化しようと思いプログラムを作ったので載せておきたいと思います。

※wordpressのアナリティクスページは「slimstat」と言うツールを使用しています。

参考:
  ・seleniumでブラウザを自動操作してみよう
  ・pythonでconfigparserを使ってみる
  ・pythonでslackに通知してみた
  ・crontabの書き方
  ・docker環境でcronが実行されないと思ったら

コード


# -*- coding: utf-8 -*-
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
import configparser
import slackweb
import time

# coonfigparser設定
config = configparser.ConfigParser()
config.read('/path/to/define.ini')

# browser設定
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1280,1024')
browser = webdriver.Chrome(executable_path='/usr/local/bin/chromedriver', options=options)

# ページアクセス
browser.get(config['wordpress']['url'])
time.sleep(3)

# ログイン情報入力
browser.find_element_by_id('user_login').send_keys(config['wordpress']['user'])
browser.find_element_by_id('user_pass').send_keys(config['wordpress']['pass'])
time.sleep(3)

# ログインボタン押下
browser.find_element_by_id('wp-submit').click()
time.sleep(3)

# データ取得
element = browser.find_element_by_id('slim_p1_03').text
texts = element.split('\n')
texts.remove('概要')

# 表示形式整形
content = ''
for index, text in enumerate(texts):
    content += text
    if index % 2 != 0:
        # 数値の後に改行を入れいる
        content += '\n'
    else:
        # 文字の後に「-」を入れる
        content += ' - '

# slackに通知
slack = slackweb.Slack(url=config['slack']['webhook_url'])
slack.notify(text=content)

# ブラウザ終了
browser.close()

補足

dockerではデフォルトの状態でcronが使えないので下記のコマンドでインストールしてあげましょう。


yum -y install crontabs

2020年12月21日