🎉

2022年版 Python+seleniumでツイッターに自動ログイン

2022/06/19に公開

Python + seleniumでツイッターに自動ログインしたい

※2022年6月時点のツイッターでテスト済み

はじめに

TwitterのAPIを使うのに、APIキーの取得が必要なのですが、これが即時発行ではない上に、英文で使用理由を説明しろだの、何度も申請するとアクセスブロックされるだのと、とにかく時代と逆行していてウザいことこの上ないのです。なので、諦めてスクレイピングでブラウザ操作して自動化することにしました。

環境

OS: CentOS8
Pythonバージョン: Python 3.6.8
※ライブラリは事前にpipするなりしてインストールしてください。

前提

ツイッターの表示言語が日本語に設定されていること

動作の概要

サンプルコード1でログインと新規ツイート処理をモジュールとして定義します。次にサンプルコード2のメイン処理からモジュールを呼び出し、メイン内に記載した引数を渡せば自動ログインと定義した文言をツイートします。

サンプルコード1(処理パート)

mod_tweet_exec.py
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
import chromedriver_binary
import time
import urllib.parse

# twitterログイン
def tweet(TWITTER_BASE, LOGIN_ID, PASSWORD, TEXT):
    options = webdriver.ChromeOptions()
    # ヘッドレスモードに
    options.add_argument('--headless')
    options.add_argument('--no-sandbox')
    # ブラウザーを起動
    driver = webdriver.Chrome(options=options)
    driver.set_window_size('1200', '1000')  #大事。デフォルトが800*600になっている。headlessだと要素部分が表示されないことがあるため。

    twitter_base = TWITTER_BASE + "login/"
    account = LOGIN_ID
    password = PASSWORD

    # ログインページを開く
    driver.get(twitter_base)
    time.sleep(2)

    # account入力
    element_account = driver.find_element_by_name("text")
    element_account.send_keys(account)
    
    # デバッグ1
    driver.save_screenshot('①ログインID入力画面.png')
    
    # 次へボタンクリック
    element_login_next = driver.find_element_by_xpath('//div/span/span[text()="次へ"]')
    #print(element_login_next)
    #driver.close()
    #exit()

    #画像のリンクをクリック
    element_login_next.click()
    time.sleep(2) 

    # パスワード入力
    element_pass = driver.find_element_by_name("password")
    element_pass.send_keys(password)

    # ログインボタンクリック
    element_login = driver.find_element_by_xpath('//div/span/span[text()="ログイン"]')
    #print(element_login)
    #driver.close()
    #exit()

    # デバッグ2
    driver.save_screenshot('②ログインPW入力画面.png')
    #driver.close()
    #exit()
    
    element_login.click()
    time.sleep(5) 

    # デバッグ3
    driver.save_screenshot('③ログイン後の画面.png')

    #自動ツイート
    tweet_text = urllib.parse.quote(TEXT, safe='')
    #print(tweet_text)

    target_url = TWITTER_BASE + "intent/tweet?text=" + tweet_text
    print(target_url)
    #exit()

    # 投稿画面へ遷移
    driver.get(target_url)
    time.sleep(2)

    # デバッグ4
    driver.save_screenshot('④ツイート画面.png')
    #exit()

    # tweetボタンが読み込まれるまで待機(最大sleep2秒)
    time.sleep(2) 
    elem_tweet_btn = driver.find_element_by_xpath('//div[@data-testid="tweetButton"]')
 
    try:
        elem_tweet_btn.click()
        time.sleep(10)
        print("投稿完了!")

        # デバッグ5
        driver.save_screenshot('⑤ツイート完了画面.png')
                
    except:
        print("投稿エラー")

        # 次の投稿までの待機時間
        time.sleep(10)
    driver.close()

サンプルコード2(呼び出しパート)

autotweet-main.py
import mod_tweet_exec

TWITTER_BASE = "https://twitter.com/"
LOGIN_ID = "ログインID" #ツイッターログイン用のメールアドレスかユーザ名
PASSWORD = "パスワード"
TEXT = "ツイートテスト" #ツイートしたい呟きを指定

if __name__ == "__main__":
    # Login and tweet
    mod_tweet_exec.tweet(TWITTER_BASE, LOGIN_ID, PASSWORD, TEXT)

実行

python3 autotweet-main.py

実行結果

自動でツイッターにログインして自動ツイート

これでサクッとPython + seleniumでツイッターに自動ログインして、自動ツイートできました。

Discussion