【はてなブログ】Seleniumを使って、アイキャッチ画像を自動で更新

はてなブログで、たくさんの記事のアイキャッチ画像を自動で更新できるように、pythonSelenium を使ってみました。

流れ

アーカイブ1ページ目、http://【ブログのドメイン】/archiveで、uuid 一覧を取得する

http://blog.hatena.ne.jp/はてなのID】/【ブログのドメイン】/edit?entry=【uuid】の管理画面を開く

「編集オプション」ボタンを押す

アイキャッチ画像のURLが、

・設定したい画像をアップしているドメインの場合、何もしない。
・設定したい画像をアップしているドメインと違う場合、【設定したい画像のURL】を入力して記事を更新する。

1ページ目が全部終わったら、次のページを開く・・・の繰り返し。

コード

# coding:utf-8 import time

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

driver = webdriver.Chrome() WAIT_TIME = 60

def login():

url = "https://www.hatena.ne.jp/login" driver.get(url)

WebDriverWait(driver, WAIT_TIME).until( EC.presence_of_element_located*1 )

driver.find_element_by_name("name").send_keys("【はてなのID】") driver.find_element_by_name("password").send_keys("【パスワード】") driver.find_element_by_class_name("submit-button").click()

def main(): url = "http://【ブログのドメイン】/archive" next(url)

def next(url):

driver.get(url)

WebDriverWait(driver, WAIT_TIME).until( EC.presence_of_element_located*2 )

next_href = "" eles = driver.find_elements_by_tag_name("a") for ele in eles: rel = ele.get_attribute("rel") if rel is not None: if rel == "next": next_href = ele.get_attribute("href")

eles = driver.find_elements_by_class_name("autopagerize_page_element") list = [] for ele in eles: uuid = ele.get_attribute("data-uuid") list.append(uuid)

for uuid in list: update_thumbnail(uuid)

if next_href != "": print("next_href = " + next_href) next(next_href)

def update_thumbnail(uuid):

print("uuid = " + uuid)

url = "http://blog.hatena.ne.jp/はてなのID】/【ブログのドメイン】/edit?entry=" + uuid driver.get(url)

eles = driver.find_elements_by_tag_name("div")

for ele in eles: item = ele.get_attribute("data-track-name") if item is not None: if item.find("curation-option-button") > -1: ele_option = ele break

if ele_option is not None: ele_option.click()

WebDriverWait(driver, WAIT_TIME).until( EC.presence_of_element_located*3 )

WebDriverWait(driver, WAIT_TIME).until( EC.presence_of_element_located*4 )

time.sleep(1)

thumbnail = driver.find_element_by_id("ogimage-input")

if thumbnail.get_attribute("value").find("【画像をアップしているドメイン】") == -1: thumbnail.clear() thumbnail.send_keys("【画像をアップしているドメイン+画像のパス】") driver.find_element_by_id("submit-button").click()

WebDriverWait(driver, WAIT_TIME).until( EC.presence_of_element_located*5 )

login() main()

print("finish !!")

*1:By.NAME, "name"

*2:By.ID, "header-container"

*3:By.ID, "ogimage-input"

*4:By.CLASS_NAME, "image-src-container"

*5:By.CLASS_NAME, "message-box"