MENU

Python-seleniumでnoteに自動ログイン、記事のタイトル、文章を入力する方法~key_down,key_upで改行の違いも解決~

こんにちは、のちたままです。

今回は、Python-seleniumを使って、noteに自動ログインしてみようと思います。

ついでに内容を書くところまで行ければと思います。

スクリプト全体

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.by import By
import time

driver=webdriver.Chrome()
url='https://note.com/login'
driver.get(url)

l_id='自分のID'
l_pw='自分のパスワード'

lid=driver.find_element_by_xpath('/html/body/main/login/div/section/div/div/form/div/div[1]/input')
lid.send_keys(l_id)

lpw=driver.find_element_by_xpath('/html/body/main/login/div/section/div/div/form/div/div[2]/input')
lpw.send_keys(l_pw)

button=driver.find_element_by_xpath('/html/body/main/login/div/section/div/div/form/button')
button.click()

button=WebDriverWait(driver, 30).until(
    expected_conditions.visibility_of_element_located((By.XPATH, '//*[@id="__layout"]/div/div[2]/div[2]/div[2]/div/div/div[1]/div/div[1]/button'))
)
button.click()

toukoubutton=driver.find_element_by_xpath('//*[@id="__layout"]/div/div[1]/header/div[1]/nav/div[4]/div/div/div/div/div/button')
toukoubutton.click()

text=driver.find_element_by_xpath('//*[@id="__layout"]/div/div[1]/header/div[1]/nav/div[4]/div/div/div/div[2]/div/div[1]/ul/li[1]/a')
text.click()

title=WebDriverWait(driver, 30).until(
    expected_conditions.visibility_of_element_located((By.XPATH, '//*[@id="note-name"]'))
)
title.send_keys('title タイトル')
inputtext=driver.find_element_by_xpath('//*[@id="note-body"]/p')
inputtext.send_keys('test テスト')

注意すべきこと

このスクリプトに関していくつか注意点があるので説明します。

その①ログイン後のポップアップの要素

seleniumで自動ログイン後、以下の画像の左部分が表示されると思います。

これは×を押せば消えるのでseleniumで操作が可能です。

ただ、要素が取得するときには注意が必要で、画像のようにきちんとdivが表示されているとこで取得しましょう。

間違ってアイコンを取得しようとしてうまくいかない場合があるので気をつけてください。

WebDriverWaitについて

これは別記事で説明しているので、そちらを読んでください。

nochitamama.hatenablog.com

time.sleep()を使う方法もありますが、WebDriverWaitを使うほうが結果的に高速になります。

おまけ

noteの仕様として、Enterキーを押したときとShift+Enterの場合で改行の意味が変わります。

Enterキーは段落を変える、Shift+Enterが通常の改行となっています。

seleniumでこれを解決するためにはActionChainsというものを使います。

キーボードを押すときと同じように、Shift+Enterなど複数キーの同時押しが使えるようになります。

それではコードの違いを見ていきます。

まずはEnterだけを押す場合、

element=driver.find_element_by_xpath('<各要素>')
element.send_keys(Keys.ENTER)
from selenium.webdriver.common.action_chains import ActionChains

element=driver.find_elemenet_by_xpath('<各要素>')
action=ActionChains(driver)
action.key_down(Keys.SHIFT)
action.send_keys(Keys.ENTER)
action.key_up(Keys.SHIFT)
action.perform()

少し行数が長くなってしまいますが、これでShift+Enterが使えます。

key_down,key_upは以下の状態を指します。

・key_down...キーを押下している状態
・key_up...キーを押していない状態

これらの状態をperformで実行するということになります。

つまり、「Shiftを押し続ける」→「Enterを押す」→「Shiftを離す」といった動きをしているということです。

最後に

今回はnoteへの自動ログインやタイトルと内容を記述するスクリプトを書いてみました。

前回ははてなブログでやっていたのですが、サイトが変わればスクリプトがガラッと変わりますね。

いろいろなサイトでseleniumを試すとまだ知らなかったseleniumの機能を理解できたりします。

次はまた別のサイトでやってみようと思います。

それでは。