タイトルの通り、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