wordpressに大量の画像(1万枚以上)をアップロードする必要があり、『Media UP FTP』を使ってやろうとしたが、余りにも多すぎたせいかエラーが出た。そもそも読み込みに時間がかかりすぎて、まともにアップロードが出来なかった。
そこで、pythonでブラウザを操作して、RPA的にWordpressに画像をアップロードすることにした。
なお、WordpressのテーマにはAffinger5を利用している。他のテーマを使ったことがないので、他の環境で動く中は不明。
使用するブラウザはChromeです。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
from selenium.webdriver.common.keys import Keys
import glob
import os
#ブラウザ操作をいったん止めるための関数
def sleep(sleep_time):
time.sleep(sleep_time)
#Wordpressにログインする。
driver = webdriver.Chrome()
wordpress_url = "自分のWordperssのURL"
driver.get(wordpress_url)
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "wp-submit")))
# ID/PASSを入力
sleep(0.1)
ID = driver.find_element_by_id("user_login")
ID.send_keys("ログインするID")
sleep(0.1)
password = driver.find_element_by_id("user_pass")
password.send_keys("ログインするパスワード")
sleep(0.1)
# ログインボタンをクリック
login_button = driver.find_element_by_name("wp-submit")
login_button.click()
sleep(0.1)
#投稿画面に移行
driver.get("投稿画面のURL")
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "footer-upgrade")))
sleep(0.1)
#メディアのアップロードに移動
driver.get("URL")
#画像を保存しているフォルダを指定
#今回はJPGのみを指定
imgs = glob.glob(r"C:\img\*.jpg")
#画像をアップロードするコード
#画像をアップロードする前に、自分で同じ手順で画像をアップロードしないといけない
#エクスプローラーを直接操作するので、『ファイルを選択』のボタンを押したら、アップロードしたいフォルダが開いていないといけない。
for img in imgs:
media = driver.find_element_by_id("plupload-browse-button")
sleep(0.1)
media.click()
sleep(0.3)
#画像の名前は元画像と同じ
img_name = os.path.basename(img)
#画像名のコピペ
pyperclip.copy(img_name)
pgui.hotkey('ctrl', 'v')
sleep(0.3)
#ENTERを押すことで、画像の選択とエクスプローラーを閉じる。
pgui.typewrite(['enter'])
sleep(0.1)
自分の動きをパソコンに代行させているだけなので、コードを実行中はパソコンの使用は不可能になります。
また、webdriverを使うためにChromeDriverが必要になりますので、自分の使っているChromeのバージョンに対応したものをダウンロードしてください。
恐らく環境変数の設定も必要かと思います。
そのあたりは他の人が詳しく解説していると思うので探してください。