こんにちは、のちたままです。
今回は、自動ではてなブログのアクセス数を取得できるプログラムを作ってみました。
この記事でプログラムの紹介をしていくので、ぜひ参考にしてください。
※スクリプト形式で書き連ねているので若干読みづらいかもしれません。
動作環境
以下の環境で動作させています。
・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を積んでいればすぐに取得できると思います。
それでは。