スナックelve 本店

バツイチ40代女の日記です

はてなブログのカテゴリをタグにする

各カテゴリページの1ページ目だけ対応。
FC東京タグ荒らし状態になってしまった。すみません(-_-;)

ログインした後の編集画面では設定済みタグが取れなかったので再読み込みしてます。
なんかたぶん、表示待ちってこうじゃない気がするw

切り貼りなのであまり突っ込まれると困るw

Google Chrome
バージョン: 86.0.4240.75(Official Build) (64 ビット)

Pythonの関数の書き方よくわかってないのでベタ打ちです。

途中でタブ開いたりウィンドウ開いたりすると多分おかしなことになりますのでご注意ください。
基本自己責任でお願いいたします。

#よくわかってない
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
import urllib.parse
#タグをセットするカテゴリ(〓〓〓変更してね〓〓〓)
setTags=['C#','Excel','JavaScript','jQuery','Outlook','php','PowerPoint','python3','vba','Word','FC東京']

#ログイン画面設定フラグ
loginFig=False
#タグ設定画面初回フラグ
fastTaguSet=False
#chrome開くよ
with webdriver.Chrome() as driver:
    #よくわかってない
    wait = WebDriverWait(driver, 10)
    i=1
    for setTag in setTags:
        #記事の管理画面のURL(〓〓〓変更してね〓〓〓)
        driver.get("https://snack.elve.club/archive/category/" + urllib.parse.quote(setTag))
        print("==="+setTag+"===")
        WebDriverWait(driver, 15).until(EC.presence_of_all_elements_located)#読み込み待ち
        # Store the ID of the original window 現在画面のハンドル保存
        original_window = driver.current_window_handle

        #記事の一覧画面
        html = driver.page_source.encode('utf-8')
        #解析用
        soup = BeautifulSoup(html, 'lxml')
        entrys=soup.find_all("section", class_="archive-entry test-archive-entry autopagerize_page_element")
        for entry in entrys:
            print(i,":",entry["data-uuid"])
            driver.execute_script("window.open()")
            driver.switch_to.window(driver.window_handles[-1])
            #(〓〓〓変更してね〓〓〓)
            driver.get("https://blog.hatena.ne.jp/elve/elve.hatenadiary.jp/edit?entry=" + entry["data-uuid"])
            WebDriverWait(driver, 15).until(EC.presence_of_all_elements_located)#読み込み待ち
            #ログイン 画面(初回のみ)
            if loginFig==False:
                #(〓〓〓変更してね〓〓〓)
                driver.find_element_by_xpath("//*[@id='login-name']").send_keys("はてなID")
                driver.find_element_by_xpath("//*[@id='container']/div[1]/form[1]/div/div[2]/div/input").send_keys("パスワード")
                driver.find_element_by_xpath("//*[@id='option']/input[2]").send_keys(Keys.RETURN)
                WebDriverWait(driver, 15).until(EC.presence_of_all_elements_located)#読み込み待ち
                #(〓〓〓変更してね〓〓〓)
                driver.get("https://blog.hatena.ne.jp/elve/elve.hatenadiary.jp/edit?entry=" + entry["data-uuid"])
                WebDriverWait(driver, 15).until(EC.presence_of_all_elements_located)#読み込み待ち
                loginFig=True
                
            #編集画面読み込み
            html2 = driver.page_source.encode('utf-8')
            soup2 = BeautifulSoup(html2, 'lxml')
            item2 = soup2.find("ul", class_="editor-tag-editor_tag-list")
            tags=item2.find_all("li")
            setTagFlg=True
            if tags==None:
                setTagFlg=True
            else:
                for tag in tags:
                    if tag.text=="#"+setTag:
                        setTagFlg=False

            if setTagFlg==True: #タグが付いてない
                #タグをつける
                driver.find_element_by_xpath("//*[@id='tag-editor-root']/div/button").send_keys(Keys.RETURN)
                WebDriverWait(driver, 15).until(EC.presence_of_all_elements_located)#読み込み待ち
                if fastTaguSet==False:
                    #初回のみの画面が出ちゃう時
                    driver.find_element_by_xpath("/html/body/div[10]/div/div/div/button").send_keys(Keys.RETURN)
                    WebDriverWait(driver, 15).until(EC.presence_of_all_elements_located)#読み込み待ち
                    fastTaguSet=True
                driver.find_element_by_xpath("/html/body/div[11]/div/div/div[1]/div[2]/span/input").send_keys(setTag)
                driver.find_element_by_xpath("/html/body/div[11]/div/div/div[1]/div[2]/span/input").send_keys(Keys.RETURN)
                print(i,"SET:",setTag)
                driver.find_element_by_xpath("/html/body/div[11]/div/div/div[2]/button").send_keys(Keys.RETURN)
                WebDriverWait(driver, 15).until(EC.presence_of_all_elements_located)#読み込み待ち
                driver.find_element_by_xpath("//*[@id='submit-button']").send_keys(Keys.RETURN)
                WebDriverWait(driver, 15).until(EC.presence_of_all_elements_located)#読み込み待ち
                        
            #Close the tab or window タブを閉じる
            driver.close()
            #Switch back to the old tab or window 保存してた元のハンドラ
            driver.switch_to.window(original_window)
            WebDriverWait(driver, 15).until(EC.presence_of_all_elements_located)#読み込み待ち
            i+=1