seleniumを使ってtwitterに自動ログイン&投稿【Python/初学者向け】
「seleniumを使って、自動でログインするコードを使いたい。」
「ログインをしてその後の画面で処理する方法を知りたい」
今回はこのような方に向けて記事を書きます。
この記事を読み実践することで、ログインを必要とするページの処理の前知識が得られます。
実際に、twitterのログイン画面を通って、メッセージを投稿してみます。
目次(クリックで読みたい部分にジャンプできます)
必要な前準備
今回の実装に必要なモジュールは以下のようなものです。
- ChromeDriverのインストール
- seleniumのインストール
今回、これらのインストールがすでに済んでいる前提で話を進めます。
まだインストールしていない方は以下の記事内でもインストール方法を紹介していますので、併せてご覧ください。
まずは、全体のコードの流れを整理します。
全体の流れ
実装は以下の順番で進めていきます。
全体の流れ
①ログイン画面にアクセス
②ユーザーネーム・パスワードを入力
③投稿内容を入力
twitterで実装していますが、ツイートはしないので(する場合の実装も紹介します。)
では、全体の流れの順番でコードを見ていきます。
①ログイン画面にアクセス
url = "https://twitter.com/login"
username = "<twitterでログインするユーザーネーム"
password = "パスワード"
text = "<ツイートするテキストを入力"
driver = webdriver.Chrome()
driver.get(url)
time.sleep(3)
URLにアクセスするために、webDriverを使ってアクセスします。
driver.get()で引数に指定したURLのリクエストを出し、サーバーから返ってきたレスポンスを変数driverに格納しています。
この処理は、seleniumなどの、googleドライバーでアクセスする処理の場合は必ず使う処理なので、覚えておくとよいと思います。
なお、ユーザーネームやパスワード、投稿するテキストは次のところで使うので一旦ここで変数に代入しておきます。
②ユーザーネーム・パスワードを入力
username_form = driver.find_element(By.XPATH,'//input[@autocomplete="username"]')
username_form.send_keys(username)
time.sleep(1)
username_form.send_keys(Keys.ENTER)
time.sleep(1)
password_form = driver.find_element(By.XPATH,'//input[@autocomplete="current-password"]')
print(password_form)
time.sleep(1)
password_form.send_keys(password)
password_form.send_keys(Keys.ENTER)
ユーザーネーム、パスワードを入力する処理はそれぞれ、以下のステップで行っています。
- find_element()で枠を指定
- .send_keys()で要素を入れる
- .sen_keys()でエンターを押す
この処理を、ユーザーネームとパスワードでそれぞれ行っています。
ログインなどの、枠を探して要素を入れるような処理を実装する場合は、よくページの動きを見ておくことが重要です。
今回は、ユーザーネームとパスワードは別々のページで入れているので、それぞれ処理を分けています。
実際にページを動かしてみて、どのような順番でログイン動作を行っているか試してみるとよいでしょう。
ちなみに、今回、time.sleepで何秒か処理を待つようにしています。動作をかくにんできるように入れていますので不要な方は削除していただいて構いません。
③投稿内容を入力
tweet_area = driver.find_element(By.CLASS_NAME,"public-DraftEditor-content")
tweet_area.send_keys(text)
こちらも、先ほどのユーザーネームとパスワードを入力する処理と同じです。
最後のエンターキーを押す処理だけなくしています。
もし、投稿もしちゃいたい場合は、最後の.send_keys()でエンターキーを押す処理を加えればよいでしょう。
今回の実装の課題点
今回の実装の課題点を整理します。
・2回目に実行する場合は、twitterはすでにログインしている状態となっているため、ログインフォームが出ずエラーとなる。
このように、ページによってはセッションにログイン情報が保存してある場合があり、1回目のログインの処理と2回目以降の処理の動きが違う場合があります。
その場合、セッションの値によって処理を分けるなどの実装が必要なわけですが、その解説はまた次回行うとします。(ちなみに、seleniumはセッションの値を管理することもできるので、興味のある方は調べてみるとよいでしょう。)
全体コード
#twitterにメッセージを自動投稿させる
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome()
url = "https://twitter.com/login"
username = "<ユーザーネーム>"
password = "<パスワード>"
text = "<投稿する文章>"
driver.get(url)
time.sleep(3)
username_form = driver.find_element(By.XPATH,'//input[@autocomplete="username"]')
username_form.send_keys(username)
time.sleep(3)
username_form.send_keys(Keys.ENTER)
time.sleep(3)
password_form = driver.find_element(By.XPATH,'//input[@autocomplete="current-password"]')
print(password_form)
time.sleep(3)
password_form.send_keys(password)
password_form.send_keys(Keys.ENTER)
time.sleep(3)
tweet_area = driver.find_element(By.CLASS_NAME,"public-DraftEditor-content")
tweet_area.send_keys(text)
まとめ
今回は、seleniumを使ったログイン画面のログイン処理を実装しました。
seleniumには、このように自動でwebページを処理してくれるものが多数あります。
特定のワードを自動検索する処理もその一つでです。
以下の記事では、seleniumの自動検索&結果を自動取得する処理を紹介しています。併せて読んでみてください。