MENU

はてなブログのアクセス数を自動で取得、表示するプログラムを作ってみる

こんにちは、のちたままです。

今回は、自動ではてなブログのアクセス数を取得できるプログラムを作ってみました。

この記事でプログラムの紹介をしていくので、ぜひ参考にしてください。

スクリプト形式で書き連ねているので若干読みづらいかもしれません。

動作環境

以下の環境で動作させています。

Chromebook IdeaPadDuet
python 3.7.3
Seleniumパッケージ使用

コード全体

まずはじめにコード全体を載せます。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--headless')
driver=webdriver.Chrome(options=options)
url='https://www.hatena.ne.jp/login?location=https%3A%2F%2Fblog.hatena.ne.jp%2Fgo%3Fblog%3Dhttps%253A%252F%252Fhatenablog.com%252F'
driver.get(url)

l_id='自分のID'
l_pw='自分のパスワード'

login_id=WebDriverWait(driver,30).until(
    expected_conditions.visibility_of_element_located((By.XPATH,'//*[@id="login-name"]'))
)
login_id.send_keys(l_id)


login_pw=WebDriverWait(driver,30).until(
    expected_conditions.visibility_of_element_located((By.XPATH,'//*[@id="container"]/div[1]/form[1]/div/div[2]/div/input'))
)
login_pw.send_keys(l_pw)

button=WebDriverWait(driver,30).until(
    expected_conditions.visibility_of_element_located((By.XPATH,'//*[@id="option"]/input[2]'))
)
button.click()

#iframe
frame=driver.find_element_by_xpath('//*[@id="globalheader"]')
driver.switch_to.frame(frame)
span=WebDriverWait(driver,30).until(
    expected_conditions.visibility_of_element_located((By.XPATH,'//*[@id="header-my"]/span'))
)
span.click()

driver.switch_to.default_content()
frame=driver.find_element_by_xpath('//*[@id="hatena-diary-dropdown-mymenu"]/iframe')
driver.switch_to.frame(frame)
dash=WebDriverWait(driver,30).until(
    expected_conditions.visibility_of_element_located((By.XPATH,'/html/body/div[1]/ul/li[4]/a'))
)
dash.click()

accesslog=WebDriverWait(driver,30).until(
    expected_conditions.visibility_of_element_located((By.XPATH,'//*[@id="admin-menu"]/ul/li[3]/ul[1]/li[6]/a'))
)
accesslog.click()
ans=WebDriverWait(driver,30).until(
    expected_conditions.visibility_of_element_located((By.XPATH,'//*[@id="admin-main-wrapper-inner"]/div[2]/section[1]/div[2]/table/tbody/tr[1]'))
)

l=ans.text
text=l.split()
print('今日:'+text[0])
print('今週:'+text[1])
print('今月:'+text[2])
print('合計:'+text[3])
driver.close()

動作結果

動作結果は以下のようになります。

今日:20
今週:72
今月:260
合計:728

コードの説明

ここからはコードを詳しく見ていきます。

options = Options()
options.add_argument('--headless')
driver=webdriver.Chrome(options=options)
url='https://www.hatena.ne.jp/login?location=https%3A%2F%2Fblog.hatena.ne.jp%2Fgo%3Fblog%3Dhttps%253A%252F%252Fhatenablog.com%252F'
driver.get(url)

まず冒頭部分ですが、これはSeleniumで用いる最初の動作です。

Optionがついてますが、これはブラウザを開かず(可視化せず)に動作させるためにつけてあります。

このオプションを外せば、自動操作しているようすがわかるようになります。

l_id='自分のID'
l_pw='自分のパスワード'

login_id=WebDriverWait(driver,30).until(
    expected_conditions.visibility_of_element_located((By.XPATH,'//*[@id="login-name"]'))
)
login_id.send_keys(l_id)


login_pw=WebDriverWait(driver,30).until(
    expected_conditions.visibility_of_element_located((By.XPATH,'//*[@id="container"]/div[1]/form[1]/div/div[2]/div/input'))
)
login_pw.send_keys(l_pw)

button=WebDriverWait(driver,30).until(
    expected_conditions.visibility_of_element_located((By.XPATH,'//*[@id="option"]/input[2]'))
)
button.click()

続いてはログイン画面での操作です。

はてなブログでは以下のような画面になるので、IDやパスワードを入力する欄のxpathを取得し、入力していきます。

ログイン後、ダッシュボードに入ります。

それが以下の部分です。

#iframe
frame=driver.find_element_by_xpath('//*[@id="globalheader"]')
driver.switch_to.frame(frame)
span=WebDriverWait(driver,30).until(
    expected_conditions.visibility_of_element_located((By.XPATH,'//*[@id="header-my"]/span'))
)
span.click()

driver.switch_to.default_content()
frame=driver.find_element_by_xpath('//*[@id="hatena-diary-dropdown-mymenu"]/iframe')
driver.switch_to.frame(frame)
dash=WebDriverWait(driver,30).until(
    expected_conditions.visibility_of_element_located((By.XPATH,'/html/body/div[1]/ul/li[4]/a'))
)
dash.click()

ダッシュボードに入ったら、アクセス解析の画面に進みます。

accesslog=WebDriverWait(driver,30).until(
    expected_conditions.visibility_of_element_located((By.XPATH,'//*[@id="admin-menu"]/ul/li[3]/ul[1]/li[6]/a'))
)
accesslog.click()

アクセス解析の画面になったら、今日から合計までの数字を取得し、表示していきます。

ans=WebDriverWait(driver,30).until(
    expected_conditions.visibility_of_element_located((By.XPATH,'//*[@id="admin-main-wrapper-inner"]/div[2]/section[1]/div[2]/table/tbody/tr[1]'))
)

l=ans.text
text=l.split()
print('今日:'+text[0])
print('今週:'+text[1])
print('今月:'+text[2])
print('合計:'+text[3])

ans.textの時点では、アクセス数が空白を挟んだ文字列として入っています。

例:20 30 40 50

ですので、.split()で区切って上げてから表示させています。

また、表示に関してはfor文などで繰り返しても良いと思います。

これで、アクセス数の取得、表示ができるようになります。

最後に

このプログラムを使うことで、はてなブログでのアクセス数をわざわざ手動で見なくてもわかるようになります。

アクセス数が気になってしまう人は使ってみると良いと思います。

ちなみに、IdeaPadDuetでやると表示されるまでに20~30秒くらいかかります。

まともなメモリとCPUを積んでいればすぐに取得できると思います。

それでは。