タイトルの通り、python+seleniumでTwitterにログインしてツイートしてみました。
環境
- Mac Book Air(mid2013) OS X
- Python 3.4.3
- selenium 2.46.0
- Firefox 37.0.2
環境構築
python 3.4.3はすでにpyenvを用いてインストールしてあります。詳しくは、以前の記事[Macでpyenvを用いたPython環境構築]を参考にしてみてください。
seleniumのインストール
最初は、pyenvでインストールしたanaconda-2.1.0で作業を行おうと思ったのですが、pipを用いてseleniumをインストールしようとした際にエラーを吐いたので、あまり詳しく調べずに3.4.3を用いることにしました。
pip install selenium
こちらは、3.4.3に変更すると問題なくインストールし、動作させることができました。
firefoxについては、特に何もせずにpythonから操作をすることができました。
プログラム
# coding: utf-8
# Twitter Webにログインしてツイートしてみる
# seleniumの練習
from selenium import webdriver
def post_twitter( user_name, password):
browser = webdriver.Firefox()
browser.get("https://twitter.com/")
# ログイン処理
mail = browser.find_element_by_id('signin-email')
pass_wd = browser.find_element_by_id('signin-password')
mail.send_keys(user_name)
pass_wd.send_keys(password)
pass_wd.submit()
# ツイートの処理
from datetime import datetime
post_body = browser.find_element_by_id("tweet-box-home-timeline")
post_body.send_keys("Python test: "+datetime.now().strftime("%Y/%m/%d %H:%M:%S"))
try:
post_button = browser.find_element_by_css_selector("button.tweet-action")
post_button.click()
print("ツイート成功")
# この時点で、他の操作をするとなんだか失敗するみたい。
except:
print("ツイート失敗")
browser.close()
if __name__ == "__main__":
from getpass import getpass
name = input("user name : ")
pw = getpass("password : ")
post_twitter( name, pw)
プログラムを実行後にユーザ名とパスワードを入力します。この際に、パスワードは表示されませんが、入力できています。よく、コマンドライン上でパスワードを打つ際に使うやつですね〜
(実際にプログラムを書いているときはユーザ名とパスワードを直打ちしてありましたw)
うまくいけば、ユーザ名、パスワードを入力後にそのまま放置していると、しばらくしてFirefoxが立ち上がります。そのまま何もせずにブラウザを見守っていると、Twitterのログイン画面が表示され、先ほど入力したユーザ名とパスワードが勝手に入力されログイン。その後、ツイートボックスに”Python test: (時刻)”と次々に入力され、最終的にツイートボタンが押されブラウザが閉じます。
時刻をツイートするようにしたのは、何度もテストを繰り返すために同じ文章がツイートできないとテストしにくいからです。時刻の取得の説明は…親切な他のサイトをみてください。
注意点
- この流れの際に、他の操作をするとどうやらツイートする画面で処理が失敗するようです。なぜでしょうか…。
- きちんとbrowser.close()を実行しないと、正常に終了していない謎のブラウザが溜まっていきます。きをつけてください。

まとめ
「seleniumなるものを使えば、やりたいことが実装できそう。」という知識の状態から調べ始め、プログラムが1時間ほどで完成しました。これは別に「自分が優秀」とか言ってるわけじゃなく、Pythonやそのライブラリがむっちゃ優秀だからできたことです。
手間取ったところといえば、seleniumのインストールとセレクター(html要素の指定)をどれを使うのが良いかまよったぐらいです。
言い訳ですが、短時間でパパッと作ったプログラムなのでエラー処理とか、ガバガバだったり書き方が汚かったりしますけど、許してください^^
以上、python+seleniumを用いたブラウザ操作の練習でした。
Pingback: TuT休講情報をより見やすく便利に! | たくのこ Web