【2022年10月】PythonでAPIを使わずにTwitter自動ログイン&自動投稿(画像投稿あり)

  • URLをコピーしました!
るなるな

あ、これTwitterの規約違反だからね。

るなるな

あくまで技術的な興味ということでお願いしますね。

【注意】この記事は、プログラミング言語「Python」を使って、Twitterのログインから

ツイートまでを自動化しようという内容です。

「Python」にある程度知識のある方向けの記事となっておりますので、

ご了承下さい。

プログラミング言語「Python」を使って、TwitterAPIを使わずに自動投稿したい!

と思って色々調べてみたんです。

そして、同じことを考えてるサイト様は結構見つかったんですが

そんなサイトにあるソースを実行してみたけれどちゃんと最後まで動く

Pythonのソースを見つけられなかったんです。

全く動かないものから、途中までは動くけど止まっちゃうプログラムとか。

Twitterはしょっちゅう仕様変更するので、その度にプログラムが動かなくなって

いたちごっこではあります。

一応、るなのこのソースは、令和4年10月現在は動いています。

やっぱり、プログラマーの知的好奇心ってやつでしょうか。

こういうこと、やりたくなりますよね。

TwitterAPIを使わないで、ブラウザでTwitterに自動ログイン

更には画像付きのツイートまでしちゃうPythonのプログラム

はい、色々いじって動くようにしました。

このプログラムをタスクスケジューラーで自動実行させれば、

定期的に自動ツイートもできちゃいますよ。

Twitterの規約違反ですけどね!

そうなんです、Twitterはスクレイピングを規約で禁止しています

なにやら、自動フォロバは禁止してないらしいんですけどね。

大枠のプログラムについては、どこかのサイト様のものを使っているのですが

どこのサイトのものだったのか、分からなくなってしまいました・・・。

判明すれば、参照元としてリンクを張らせていただきますね。

では、早速全ソースを公開。

# ライブラリの読み込み
import time
import subprocess
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from webdriver_manager.chrome import ChromeDriverManager 
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import os
from selenium.webdriver.chrome.options import Options
options = Options()
import chromedriver_binary
import sys
import os
import csv



#設定ファイルからログイン情報の取得
#path = os.path.dirname(__file__).replace(os.sep,'/') + '/login.txt'
path = os.path.dirname(sys.argv[0]).replace(os.sep,'/') + '/login.txt'
with open(path) as f:
    loginInfo = [s.strip() for s in f.readlines()]

#ログインID、パスワード、登録メールアドレスの設定
loginid = loginInfo[0]
password =loginInfo[1]
mail = loginInfo[2]


#開始行をファイルから取得
path = os.path.dirname(sys.argv[0]).replace(os.sep,'/') + '/count.txt'
with open(path) as f:
    startColumn = f.readline()

#csvファイルの読み込み
path = os.path.dirname(sys.argv[0]).replace(os.sep,'/') + '/tweetFile.csv'
with open(path,'r') as f:
    tmpData = csv.reader(f)
    csvData = [row for row in tmpData]

#ツイートテキストと動画の設定
tweet = csvData[int(startColumn)-1][0].replace('\\n','\n')
image = csvData[int(startColumn)-1][1]

cmd = 'pip install --upgrade chromedriver_binary' 
res = subprocess.call(cmd, shell=True)
chrome_options = webdriver.ChromeOptions()
prefs = {"profile.default_content_setting_values.notifications" : 2}
chrome_options.add_experimental_option("prefs",prefs)
#options.add_argument('--headless')

drv = webdriver.Chrome(ChromeDriverManager().install(), options=options)


# ツイッターに自動投稿する関数
def auto_tweet():

    #global drv

    #検索要素取得までの最大待ち時間の設定
    drv.implicitly_wait(14)

    drv.get('https://twitter.com/login/')
    #time.sleep(12)
    #ログインIDの入力部分
    drv.find_element_by_name("text")\
    .send_keys(loginid)
    

    #time.sleep(2)
    #ログインIDのボタン押下部分
    drv.find_elements_by_css_selector('.css-18t94o4.css-1dbjc4n')[2]\
    .click()
    
    #time.sleep(3)

    #登録メールアドレスを求められる場合の措置
    if drv.find_elements_by_css_selector('.css-16my406')[2].text == '通常とは異なるログイン操作が行われました。アカウントを安全に保つため、電話番号かメールアドレスを入力し、ご本人確認してください。':
        #メールアドレスの入力部分
        drv.find_element_by_name("text").send_keys(mail)
        time.sleep(2)
        #メールアドレスのボタン押下部分
        drv.find_elements_by_css_selector('.r-sdzlij')[1].click()
    
        #time.sleep(3)

    #パスワードの入力部分
    drv.find_element_by_name("password")\
    .send_keys(password)

    #time.sleep(2)

    #パスワードのボタン押下部分
    drv.find_elements_by_css_selector('.r-sdzlij')[2].click()
    
    time.sleep(2)

    drv.get('https://twitter.com/compose/tweet')

    time.sleep(4)

    #ツイート投稿部分
    if len(tweet) != 0:
        drv.find_element_by_css_selector(
        '.notranslate.public-DraftEditor-content').send_keys(tweet)
        time.sleep(3)

    #動画投稿部分
    if len(image) != 0:
        drv.find_element_by_xpath('//input[@type="file"]').send_keys(image)
        time.sleep(20)

    #投稿のボタン押下部分
    drv.find_elements_by_css_selector('.r-l5o3uw')[1].click()

    #沢山待機してから終了。(動画のアップロードに時間かかるから)
    time.sleep(50)
    drv.quit()


#投稿実行
auto_tweet()

#読み込み開始行のインクリメント
path = os.getcwd() + '\count.txt'
with open(path,mode='w') as f:
    f.write(str(int(startColumn) + 1))

おいおい、プログラムの詳細は説明していきますね。

一応用意するものは、↑のプログラム本体の他には

  • count.txt
  • login.txt
  • tweetFile.csv

の3つのファイルが必要です。

count.txtは、tweetFile.csv(ツイート本文が入っているファイル)の何行目を

ツイートするかの半角数値を入れてるだけのテキスト。

最初は「1」を入れておけば大丈夫。

login.txtは、ログイン情報を入れているテキスト。

1行目:@から始まるTwitterID

2行目:ログイン時のパスワード

3行目:登録されているメールアドレス

メールアドレスは、ログイン時に入力を求められることがあるので、その時に使用。

tweetFile.csvはツイート本文が入っているファイル

1行が1ツイート。

カンマ区切りで、

ツイート本文,投稿画像URL

といった形。改行を含むツイートをしたい場合には、ツイート本文の改行したい位置に「\n」を入れて下さい。

1行開けたかったら「\n\n」となります。

画像を投稿しない場合は、画像URLは入れなくてOK。

プログラム本体は、セレニウムを使っています。

実行できる環境構築は結構大変です。

ここまで読んだならば、検索を駆使して実行環境を構築できると思います。

このプログラムは、画像付きの自動投稿ができるのが素晴らしいと思っています。

登録しておける投稿数も無限

でもTwitterの規約違反ですからね!

何度も言いますけど。

もし、質問があれば分かる範囲でお答えしますのでコメントにどうぞ。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

私の名前は「るなるな」。人呼んで「ブレ中るな」。ただのノウハウコレクターじゃ御座いません。 私が購入したBrainは252個。使った総額は150万以上なのです。
どーん!

コメント

コメントする

目次