各カテゴリページの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