【Python】Seleniumを使ってTwitterを自動化してみる。

自分のブログがアップデートされた時にいい感じに整形しツイートしたかったのでSeleniumを使って自動化できないかと思い。調べてみました。 (API取得でもいいのですが大変そうだったので)

Seleniumとは?

ブラウザ自動化用のツールです。
自分が操作したいブラウザに対応するWebdriverを使用することで、多種のブラウザでの操作を共通のソースで自動化することができます。
詳しくは以下を参照のこと。 WebDriver :: Seleniumドキュメント

サポートされている言語はC#JavaPerlRubyPHPPythonと多種多様ですが、扱いやすさからPythonで実装していきます。

インストールしよう

インストールはとっても簡単です。Webdriverと使用する言語に対応するSleniumのインストールを行います。

WebDriverをインストールします。

今回はchromedriverを使用します。 Macの場合は以下

$ brew install chromedriver

もしも「No available fomula with name "chromedriver ~"」的なエラーが出たら以下のコマンドを実行します。少し調べた感じだとGUIMacにコマンドでインストールするための指定方法なそうです。

$ brew tap homebrew/cask
$ brew cask install chromedriver

Seleniumのインストール

今回はPythonでの実装を予定しているのでpipを使ってインストールします。

pip install selenium

ツイッターにログインしてみよう。

今回以下のようなソースを作ってみた。
アカウントとパスワードは適宜読み替えてください。

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys

# アカウント情報
account = 'xxxxxxxx'
password = 'xxxxxxxxx'

# ツイートしたい文字列
text = "テストでござる"

# Twitterログイン実行する処理
def login_twitter():
    # ログインページを開く
    driver.get('https://twitter.com/login/')
    time.sleep(2)  # 待ち
    # account入力
    element_account = driver.find_element_by_name("session[username_or_email]")
    element_account.send_keys(account)
    time.sleep(2)  # 待ち
    # パスワードを入力する
    element_pass = driver.find_element_by_name("session[password]")
    element_pass.send_keys(password)
    time.sleep(3)  # 動作止める
    # ログインボタンクリック
    element_login = driver.find_element_by_xpath('//*[@data-testid="LoginForm_Login_Button"]')
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    element_login.click()
    time.sleep(3) # 待ち

# seleniumを起動
options=Options()
driver=webdriver.Chrome(chrome_options = options)

# ログイン処理
login_twitter()
time.sleep(10)

# ブラウザを閉じseleniumを終了
driver.close()
driver.quit()

ツイート方法までは漕ぎ着けることができなかったので今回はここまで。
今後更新予定です。

5/10追記:ツイートをしてみる。

ツイートに成功したので追記します。
以下のような関数を作成し引数textにツイート文を指定したらツイートできました。

def send_tweet(text):
    element_text = driver.find_element_by_class_name("notranslate")
    element_text.click()
    element_text.send_keys(text)
    tweet_button = driver.find_element_by_xpath('//*[@data-testid="tweetButtonInline"]')
    tweet_button.click()

画像付きのやつがやりたいんだが。。。無理かなぁ。。

入門 Python 3

入門 Python 3

  • 作者:Bill Lubanovic
  • 発売日: 2015/12/01
  • メディア: 単行本(ソフトカバー)