はじめに
最近はてなブログからWordpressに移行しました。リダイレクトの設定やGoogle search consoleの設定など検索しながらなんとかやり遂げる事が出来ましたが2週間ほど経った今でも検索するとはてなブログの記事が検索されるため、力技ですがはてなブログの記事をすべて下書きにすることにしました。
しかし、記事を一括で下書きにするような機能が見つからなく、一つ一つの記事を編集して「下書きに戻す」というボタンを押さなければならなかったためその操作を自動化した際のメモです。
しっかり作りこんだものではありませんが、Sikuliのサンプルとしてはある少しは需要がありそうなため記事にします。
SikuliとはPCの操作の一部を自動化させるのに役立ちます。しかし今回のようなブログの記事を一定の手順で設定を変えていくような場合はSeleniumというWebのテストツールがありますのでそちらの方が向いているかもしれません。
1. 手順をまとめる
SikuliはPCの操作を自動化するツールなので、どのようなPC操作をするかを知る為にも操作手順を知っておく必要があります。手動でやる場合の手順をまとめておきます。
- まずはてなブログにログインしている状態であればタイトル付近にマウスカーソルを持っていけば編集ボタンが表示されます(画像の赤枠)
- その為、まずタイトルにマウスカーソルを持っていきます
- その為、まずタイトルにマウスカーソルを持っていきます
- 編集ボタンを押す
- 「...」ボタンを押す
- 「下書きに戻す」ボタンを押す
- 確認のウィンドウが表示され「OK」または「キャンセル」の選択肢があり「OK」がアクティブになっているためEnter Keyを押す
- 次の記事も続けて同じ操作をする為1に戻る
Sikuliでスクリプト化する
- Sikuliは画像がソース内に含まれるためソース全体を画像化しました。
- 下記がソースです
- テキストバージョンはこの後にあります
- 最初のfindで座標情報を格納したregionというオブジェクトが返されます
- findの引数にある画像は私のブログのヘッダーイメージの一部でヘッダーから200pxマウスカーソルを下に移動させたところへマウスを持って行っています
- sikuliでは action(画像)という コマンドが多く、その意味は画像を探して画像の場所をクリックまたは移動などを定義していきます
- 13行目は下書きに戻すボタンがあるならそれをクリックするような処理にしています。というのも長めのsleepしていますが、タイミングによっては下書きした記事を再度開いて下書きしようとする事があり、2度目の下書き処理では下書きに戻すボタンがなくエラーとなるため条件分岐化しています
- 200回のループにしているのは私のブログの記事が220くらいだったためです
ソース(テキストバージョン)
# はてなをドラフト化する
for i in range(200):
# ヘッダー画像の部分の座標を取得
reg = find("1608118146764.png")
# 1.1 ヘッダー画像からY方向に200下にマウスカーソルを移動させる
mouseMove(reg.offset(0,200))
# 2. 編集ボタンをクリック
click("1608118406651.png")
sleep(3)
# 3. 「…」 ボタンを押す
click(Pattern("1608118446684.png").targetOffset(52,-2))
sleep(2)
if exists("1608118504008.png"):
# 4. 下書きに戻すボタンを押す
click(getLastMatch())
sleep(2)
# 5. OKボタンを押す
type(Key.ENTER)
#click("1608118532576.png")
sleep(5)
# F5を押してトップ画面に戻る
type(Key.F5)
sleep(7)
Code language: PHP (php)
最後に
あまり使わないツールの為使うたびに使い方を忘れてしまいますが、PC上の操作であれば簡単に自動化できるので使うたびに便利さを痛感しています。いいツールです。