Seleniumでchoromeを操り、pythonで自動ツイートする方法

自動化

こんにちは。

 

今回はツイッターを自動でツイートするプログラムを組んでいきたいと思います。

 

ツイッターを自動でツイートしようとする時、主に二つの方法があります。一つ目はツイッターAPIを使うという方法です。こちらは有名であり王道ですね。また機会がありましたら、詳しく解説したいと思います。(twitterAPIは審査大変ですよね、、、笑)

 

そして、今回解説するのが、二つ目である、Seleniumを使用する方法です。

 

Seleniumとは、様々なブラウザーを自動で操作する便利なライブラリーのことです。SeleniumはJavascriptを解釈できるので、例えばマウスでクリックするとか、入力フォームでクリックするとか、スクロールするとか、ほとんどのことは実装できます!

 

APIとは違って、画面が勝手に開いたり、閉じたり、動くのでなんか興奮できるのがSeleniumの良いとこでもあります笑

 

この便利さにより、SeleniumじゃWebアプリケーションの自動テストツールで主に活躍しているんですね!スクレイピングとかもできてしまうので、色々なことができて楽しいですよ。

 

今回は、このSeleniumの中でも、chromeに対応した、chromedriverをインストールして、ツイッターで遊んでみましょう!

 

スポンサーリンク

SeleniumとchromeDriverのインストール

①Seleniumのインストール

まずはpipでseleniumをインストールします。

$ pip install selenium

余裕ですね笑

 

②ChromeDriverのインストール

次にChromeDriverをインストールします。

$ pip install chromedriver-binary

余裕ですね笑

 

この二つの手順によりpythonにおけるchoromeDriverの環境構築は終わりです!

 

楽チン!!

pythonでコードを組む

ここからはちょっとseleniumを使ってコードを組んで行きます。

 

まずは、このように、使うライブラリーを定義します。

使うのは、webを探索するwebdriver、chromeに対応したwebdreiber、待ち時間を決めるtimeのライブラリーです。

from selenium import webdriver
import chromedriver_binary
import time

 

ツイート内容を指定します。これは実行の際、コマンドラインから入力できるようにします。

#ツイート内容を入力
tweet=input("何をtweetしますか?\n")

 

ドライバーを定義します。今回はchromeを使うのでChromeを指定します。

#driverの定義
driver = webdriver.Chrome()

 

次にTwitterのページを開くために、Googleを使って、twitterのページを検索します。

driver.get('https://www.google.com/')
time.sleep(1) #1秒待つ
search_box = driver.find_element_by_name("q") #クエリーを取得
search_box.send_keys('twitter') #q=twitter
search_box.submit() #クエリーを送信
time.sleep(1) #1秒待つ

 

ツイッターページでの操作です。クリックする場所をブラウザデバッガのCSS SELECTORで取得し、driver.find_element_by_css_selector(‘css selector’).click()の形で、コードを書きます。これは、driverが指定したcss selecotorの場所を取得し、クリックするという意味です。

#Twitterをクリック
driver.find_element_by_css_selector('#rso > div:nth-child(1) > div > div > div > div > div.r > a > h3').click()
time.sleep(2)

#ログインをクリック
driver.find_element_by_css_selector('#doc > div > div.StaticLoggedOutHomePage-content > div.StaticLoggedOutHomePage-cell.StaticLoggedOutHomePage-utilityBlock > div.StaticLoggedOutHomePage-signupBlock > div.StaticLoggedOutHomePage-noSignupForm > div > a.js-nav.EdgeButton.EdgeButton--medium.EdgeButton--secondary.StaticLoggedOutHomePage-buttonLogin').click()
time.sleep(2)

#IDを入力
driver.find_element_by_css_selector('#page-container > div > div.signin-wrapper > form > fieldset > div:nth-child(2) > input').send_keys("ID")
time.sleep(2)

#パスワードを入力
driver.find_element_by_css_selector('#page-container > div > div.signin-wrapper > form > fieldset > div:nth-child(3) > input').send_keys("password")
time.sleep(2)

#ログインを実行
driver.find_element_by_css_selector('#page-container > div > div.signin-wrapper > form > div.clearfix > button').click()
time.sleep(2)

#ツイートをクリック
driver.find_element_by_css_selector('#global-new-tweet-button').click()
time.sleep(2)

 

最初にコマンドラインで入力したツイートの文字列を入力し、ツイートを実行します。

#ツイート内容を自動入力
driver.find_element_by_css_selector('#Tweetstorm-tweet-box-0 > div.tweet-box-content > div.tweet-content > div.RichEditor.RichEditor--emojiPicker.is-fakeFocus > div.RichEditor-container.u-borderRadiusInherit > div.RichEditor-scrollContainer.u-borderRadiusInherit > div.tweet-box.rich-editor.is-showPlaceholder').send_keys(tweet)
time.sleep(2)

#ツイート実行
driver.find_element_by_css_selector('#Tweetstorm-tweet-box-0 > div.tweet-box-content > div.TweetBoxToolbar > div.TweetBoxToolbar-tweetButton > span > button.SendTweetsButton.EdgeButton.EdgeButton--primary.EdgeButton--medium.js-send-tweets').click()
time.sleep(2)

 

最後にブラウザを閉じます。閉じないとそのままアプリケーションが閉じないので、これを実行するのは大切です。

#ブラウザを閉じる
driver.close()
driver.quit()

 

まとめるとこんな感じのコードになります!

 

from selenium import webdriver
import chromedriver_binary
import time

#ツイート内容を入力
tweet=input("何をtweetしますか?\n")

#driverの定義
driver = webdriver.Chrome()

#Google検索
driver.get('https://www.google.com/')
time.sleep(1)
search_box = driver.find_element_by_name("q")
search_box.send_keys('twitter')
search_box.submit()
time.sleep(1)

#Twitterをクリック
driver.find_element_by_css_selector('#rso > div:nth-child(1) > div > div > div > div > div.r > a > h3').click()
time.sleep(2)

#ログインをクリック
driver.find_element_by_css_selector('#doc > div > div.StaticLoggedOutHomePage-content > div.StaticLoggedOutHomePage-cell.StaticLoggedOutHomePage-utilityBlock > div.StaticLoggedOutHomePage-signupBlock > div.StaticLoggedOutHomePage-noSignupForm > div > a.js-nav.EdgeButton.EdgeButton--medium.EdgeButton--secondary.StaticLoggedOutHomePage-buttonLogin').click()
time.sleep(2)

#IDを入力
driver.find_element_by_css_selector('#page-container > div > div.signin-wrapper > form > fieldset > div:nth-child(2) > input').send_keys("@anipo1415")
time.sleep(2)

#パスワードを入力
driver.find_element_by_css_selector('#page-container > div > div.signin-wrapper > form > fieldset > div:nth-child(3) > input').send_keys("mukuanipo-1415")
time.sleep(2)

#ログインを実行
driver.find_element_by_css_selector('#page-container > div > div.signin-wrapper > form > div.clearfix > button').click()
time.sleep(2)

#ツイートをクリック
driver.find_element_by_css_selector('#global-new-tweet-button').click()
time.sleep(2)

#ツイート内容を自動入力
driver.find_element_by_css_selector('#Tweetstorm-tweet-box-0 > div.tweet-box-content > div.tweet-content > div.RichEditor.RichEditor--emojiPicker.is-fakeFocus > div.RichEditor-container.u-borderRadiusInherit > div.RichEditor-scrollContainer.u-borderRadiusInherit > div.tweet-box.rich-editor.is-showPlaceholder').send_keys(tweet)
time.sleep(2)

#ツイート実行
driver.find_element_by_css_selector('#Tweetstorm-tweet-box-0 > div.tweet-box-content > div.TweetBoxToolbar > div.TweetBoxToolbar-tweetButton > span > button.SendTweetsButton.EdgeButton.EdgeButton--primary.EdgeButton--medium.js-send-tweets').click()
time.sleep(2)

#ブラウザを閉じる
driver.close()
driver.quit()

 

css selectorは時間が経つと変更されている可能性があるので、上記を参考に作ってみてください!

 

実行できたでしょうか?笑

勝手に操作されるのでSeleniumの便利さを痛感できるはずです。

 

まとめ

Seleniumで自動ツイートは簡単に実装することができました。これを応用すれば、他にも色々なことができそうですね!面白そうなのがありましたら、また解説します。

コメント