【はてなブログ】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((By.NAME, "name"))
    )

    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((By.ID, "header-container"))
    )

    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((By.ID, "ogimage-input"))
    )

    WebDriverWait(driver, WAIT_TIME).until(
        EC.presence_of_element_located((By.CLASS_NAME, "image-src-container"))
    )

    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((By.CLASS_NAME, "message-box"))
        )

login()
main()

print("finish !!")