はてなブログで、たくさんの記事のアイキャッチ画像を自動で更新できるように、python で Selenium を使ってみました。
流れ
アーカイブ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 !!")