MENU

Python-seleniumではてなブログ自動投稿プログラムを作ってみる①~基本動作スクリプト編~

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

ブログを初めて半月が立つのですが、オフライン環境で記事を書いたときにブログにいちいちコピペするの面倒だなあと感じていました。

せっかくseleniumが使えるようになったので、txtファイルなりを読み込んで自動で投稿できるプログラムを作ってしまおうと思いました。

この記事ではpython-seleniumを使った自動投稿スクリプトを紹介しようと思います。

今後はGUIを作って即時公開や予約投稿、下書きを保存するを分けて動作できるようにしようと思います。

動作環境

動作環境は以下になります。

Chromebook Ideapad Duet  
Chromium:88.0.4324.182   
Debian:10.8  
Python:3.7.3  
Selenium:3.141.0

プログラムの仕組みについて

プログラム使っている仕組みは簡単で以下の2つで行えます。

I).対象の要素を取得する
II).ボタンを押すor文字列を送る

それでは実際にはてなブログの要素を見ながら説明していきます。

プログラムの動きについて

今回作成したプログラムの動きは以下の通りになります。

①はてなブログのログイン画面を開く
②ログインする
③「記事を書く」を押して記述画面を開く
④タイトル、内容の記述
⑤「公開する」ボタンを押す
⑤' 「下書き保存」するには?
⑤''「予約投稿」するには?

各項目ではidやxpathを取得してボタンを押したり、文字列を送ったりします。

実際に画面を使いながら説明していきます。

①ログイン画面を開く

まずはブラウザでログイン画面を開きます。

はてなブログのトップページからログイン画面に移っても良いですが、直接開いたほうが簡単なので直接ログインページを指定します。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver=webdriver.Chrome()
weburl='https://blog.hatena.ne.jp/'
driver.get(weburl)

このURLでログイン画面が開かなかったら、https://www.hatena.ne.jp/loginに変えてみてください。

②ログインする

ログインするためには、はてなidとパスワードが必要です。

要素を取得し、send_keys()を使うことで各項目の入力ができます。

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

'''id入力'''
login_id=driver.find_element_by_id('login-name')
login_id.send_keys(l_id)

'''パスワードの入力'''
login_pw=driver.find_element_by_name('password')
login_pw.send_keys(l_pw)

'''ログインボタンをクリック'''
button=driver.find_element_by_xpath('//*[@id="option"]/input[2]')
button.click()

③「記事を書く」を押して記述画面を開く

「記事を書く」はボタンなので、要素を取得してclick()を使います。

button=driver.find_element_by_xpath('//*[@id="admin-menu"]/ul/li[3]/ul[1]/li[2]/a')
button.click()

④タイトル、内容の記述

タイトルの要素を取得して記述、内容欄の要素を取得して記述ということをします。

'''タイトル'''
input_title=driver.find_element_by_id('title')
input_title.send_keys('タイトル')

'''内容の入力'''
input_text=driver.find_element_by_id('body')
input_text.send_keys('内容')

⑤「公開する」ボタンを押す

これも同じように要素を取得してボタンを押すだけです。

button=driver.find_element_by_xpath('//*[@id="submit-button"]')
button.click()

⑤' 「下書き保存」するには?

下書き保存するには、ボタンをいくつか押す必要があります。

ただ、結局のところ、要素を取得してボタンを押すだけなので難しくありません。

'''vを押す'''
button=driver.find_element_by_xpath('//*[@id="editor-main"]/div/div[3]/div[2]/div[2]/span[1]/div/a')
button.click()

'''「下書き保存する」を押す'''
button=driver.find_element_by_xpath('//*[@id="editor-main"]/div/div[3]/div[2]/div[2]/div/ul/li[2]/a')
button.click()

'''下書き保存する'''
button=driver.find_element_by_xpath('//*[@id="editor-main"]/div/div[3]/div[2]/div[2]/span[1]/button')
button.click()

⑤''「予約投稿」するには?

予約投稿は少し複雑です。

予約投稿には、日付の設定と時間の設定が必要があるからです。

day='2021-03-31'
time='07:00'
editbutton=driver.find_element_by_xpath('//*[@id="editor-support-container"]/div/div[1]/div[2]/div[3]')
editbutton.click()

'''日付設定'''
date=driver.find_element_by_xpath('//*[@id="datetime"]/div[1]/input')
date.send_keys(day)

'''時刻設定'''
daytime=driver.find_element_by_xpath('//*[@id="datetime"]/div[1]/div/span/input')
daytime.click()
daytime.send_keys(Keys.BACK_SPACE)
daytime.send_keys(Keys.BACK_SPACE)
daytime.send_keys(Keys.BACK_SPACE)
daytime.send_keys(Keys.BACK_SPACE)
daytime.send_keys(Keys.BACK_SPACE)
daytime.send_keys(time)

book=driver.find_element_by_xpath('//*[@id="datetime"]/div[2]/p[2]/label/input')
book.click()

'''予約投稿する'''
button=driver.find_element_by_xpath('//*[@id="editor-main"]/div/div[3]/div[2]/div[2]/span[2]/input')
button.click()

僕もすべてを理解しているわけでは無いのでもっと効率の良いやり方があるかと思いますが、これでとりあえずは動作しました。

一点わからないのは、時刻の設定をするときに一度時刻を消してから再度入れ直さないとうまく動かないことです。

なにか解決方法があれば教えて下さい。

最後に

今回ははてなブログに記事を投稿するための基本スクリプトの紹介をしました。

今回はタイトルも内容も一行であるため簡単に書いてますが、実際の記事は何行もあります。

それらについては今後アップデートしていこうと思います。

それでは。

更新情報

nochitamama.hatenablog.com

nochitamama.hatenablog.com

nochitamama.hatenablog.com

nochitamama.hatenablog.com

nochitamama.hatenablog.com