WordPressへのプラグインの自動インストールをデモします|Seleniumで簡単実装

こんにちはボーノです。

今回はブラウザ自動化の初心者の方向けに、プラグインを自動でインストールする方法についてデモをしたいと思います。

WordPressへのプラグインの自動インストールをデモします|Seleniumで簡単実装

これはどういう時に使えるかと言うと、サイトをたくさん運用していて、プラグインを全部のサイトにまとめて入れたい!という時ですね。

サイトをたくさん運用していると、どうしても「あのプラグインを入れ忘れた!」とか「やっぱりこのプラグインを追加したい!」という時があります。そういう時に、1つ1つ手作業でやっているとものすごい時間がかかってしまいますよね。

自分も、アフィリエイトサイトを中心に数十サイトを運用しているんですけど、最初はいちいち手作業でプラグインをインストールしていたんですね。

ただ、やっぱり効率悪いな〜と思って、seleniumを使って自動でインストールするシステムを作る事にしました。
今回はその自作したシステムのデモになります。

たとえあなたが同じような悩みを抱えていなくても、これを見るとブラウザ自動化をどういう風に応用したら良いかのイメージが掴めると思うので、ブラウザ自動化に興味のある方はぜひ最後まで見てみて下さい。

また、プログラムは私のブログにも貼っておくので、興味のある方はコピーして自分の環境で色々と試して見て下さい。

で、デモをやる前に簡単にプログラムの概要を説明しておきます。

今回はやる事はシンプルなので、そんなに難しい事はしていません。

システム概要説明

まずは、関連するライブラリをインストールし、インストールしたいライブラリと、インストール先のURL、wordpressのログイン情報を指定します。

ここのユーザプロファイルの設定は少し複雑なので説明を割愛します。

複数個の自動化システムを並行して使用する場合はこの設定に気をつけなくてはいけない、というところだけ抑えておけばいいかと思います。
この設定で動かない場合は、自分の環境でのwebdriverの場所等を確認してみて下さい。

メインの制御をしているところでは、まずはWordpressにログインし、次にプラグイン新規追加画面に行きます。
この時、こちらのページにもあるように、こちらのURLにインストールしたいプラグインをクエリーとして入れることで、直接そのプラグインの検索ページにいく事ができます。

で、次に、各ボタンの要素を取得して、インストールしたいプラグインの名前と完全に一致したら、そのプラグインの「いますぐインストール」ボタンを押します。
そしてしばらく待機して、「有効化」ボタンが表示されたら再度ボタンを押して、インストール完了です。

そして、最後のメインシーケンスの部分で、今の一連の流れを、サイトの数だけ繰り返しています。

という事で、システムの概要は以上です。

それではデモをやってみましょう。

今回はBroken link checkerというプラグインを入れ忘れていたので、4つのサイトに対してこれを入れていきます。
現時点での状態を見ると、Broken link checkerがないのが確認できます。

では実行ボタンを押して、システムを走らせてみます。

(実際のデモは冒頭のYouTubeをご覧ください)

はい、という事で4つのサイトにプラグインをインストールしてみました。
人が操作している事の大半はSeleniumで代用できるので、皆さんも、自分がやりたいことを明確にして、色々とトライしてみて下さい。

実際に使用したコード

デモで使用したコードを記載しておきます。
サイトURLやパスワードはご自身の環境に合わせて下さい。

############################################################################################################
# 自動プラグインインストール
# ・特定のプラグインを全てのサイトに自動インストールする
#
############################################################################################################

#ブラウザ操作用
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
#所定時間待機用
import time
#エンターキーを押す用
from selenium.webdriver.common.keys import Keys

#プラグインの名前
plugin_query = 'Broken+Link+Checker' #wordpressではORを+として捉えるので
plugin_name = 'Broken Link Checker'

#プラグインをインストールしたいサイトリスト
site_list1 = [
'http://サイトドメイン1',
'http://サイトドメイン2',
]

site_lists = [site_list1]

#wordpressログイン情報 site_list1用
USER1 = "ユーザ名"
PASS1 = "パスワード"

#selenium用ユーザプロファイルを使用する場合
PROFILE_PATH = 'プロファイルのパス'
PROFILE_DIRECTORY = 'プロファイルのディレクトリ'

options = Options()
options.add_argument("--user-data-dir=" + PROFILE_PATH)
options.add_argument("--profile-directory=" + PROFILE_DIRECTORY)
driver = webdriver.Chrome(executable_path = '/usr/local/bin/chromedriver', options = options)
driver.implicitly_wait(1)

######################################################
# ここからはwordpressの操作
######################################################

def setPlugin(site, list_num):

    #ユーザID, パスワードを正規化
    if list_num == 0:
        USER = USER1
        PASS = PASS1

    #wordpressログインページにアクセス
    url_login= site + '/wp-login.php'
    driver.get(url_login)
    time.sleep(1)
    print('ログインページにアクセスしました')

    #IDとパスワードのフォームに入力
    elem = driver.find_element_by_id('user_login')
    elem.clear()
    elem.send_keys(USER)
    elem = driver.find_element_by_id('user_pass')
    elem.clear()
    elem.send_keys(PASS)
    print("フォームを送信")

    #ログインボタンを押してログイン
    driver_from = driver.find_element_by_name('wp-submit')
    driver_from.click()
    print("情報を入力してログインボタンを押しました")

    time.sleep(3)

    #プラグイン新規追加ページに移動
    url_plugin = site + '/wp-admin/plugin-install.php?s=' + plugin_query + '&tab=search&type=term'
    driver.get(url_plugin)

    time.sleep(3)

    #要素を取得
    elems = driver.find_elements_by_class_name('open-plugin-details-modal')
    btns = driver.find_elements_by_class_name('install-now')

    #今すぐインストールをクリック
    for i in range(len(elems)):
        if plugin_name in elems[i].text:
            print('found!')
            btns[i].send_keys(Keys.ENTER)
            break

    time.sleep(10)

    #有効化をクリック
    elems = driver.find_elements_by_class_name('button-primary')
    elems[0].send_keys(Keys.ENTER)

    time.sleep(7)

######################################################
# メインシーケンス
######################################################

#メインの実行
for site_list in site_lists:
    if len(site_list) > 0:
        list_num = site_lists.index(site_list)
        for site in site_list:
            setPlugin(site, list_num)

print('DONE!!!')

#プロセスを終了(これやらないとゾンビプロセスが増える)
driver.quit()

まとめ

今回はブラウザ自動化の初心者の方向けに、プラグインを自動でインストールする方法について説明とデモをしてきました。

ブラウザ自動化は可能性が無限なので、色々とアイデアを考えて、色々と形にしてみて下さい。