4
1

More than 3 years have passed since last update.

Python:文字列を画像にしてtwitterでseleniumで自動投稿

Last updated at Posted at 2020-11-25

他の記事を参考にしながら書きました。
一度image.pngで保存してから投稿しています。
pywinautoについては、Python3.9にして動作しました。

strtoimage_tweet.py
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
import chromedriver_binary 
import pywinauto
import PIL.Image
import PIL.ImageDraw
import PIL.ImageFont
import time

account=""
password=""
#ログイン用

def strtoimage(text):
  ttfontname = "C:\\Windows\\Fonts\\meiryob.ttc"
  fontsize = 12

  # 画像サイズ,背景色,フォントの色を設定
  canvasSize    = (1024, 750)
  backgroundRGB = (256, 256, 256)
  textRGB       = (0, 0, 0)

  # 文字を描く画像の作成
  img  = PIL.Image.new('RGB', canvasSize, backgroundRGB)
  draw = PIL.ImageDraw.Draw(img)

  # 用意した画像に文字列を描く
  font = PIL.ImageFont.truetype(ttfontname, fontsize)
  textWidth, textHeight = draw.textsize(text,font=font)
  textTopLeft = (canvasSize[0]//6, canvasSize[1]//2-textHeight//2) # 前から1/6,上下中央に配置
  draw.text(textTopLeft, text, fill=textRGB, font=font)
  img.save("image.png")

def upload_item_photo():
    #import pdb; pdb.set_trace()
    # # フォルダを取得
    photo_folder = os.path.abspath(R"C:\Users\----\Downloads")

    # 開くダイアログを探して接続する
    # ダイアログタイトルを手掛かりにwindowを探す
    findWindow = lambda: pywinauto.findwindows.find_windows(title=u'開く')[0]

    # 上記Wndowを探す処理が完了したかチェックする
    # pywinauto.timings.wait_until(タイムアウトまでの時間, 繰り返す間隔(Sec), 組み込み関数)
    dialog = pywinauto.timings.wait_until_passes(20, 1, findWindow)

    # pywinauto に探し出したダイアログを接続
    pwa_app = pywinauto.Application()
    pwa_app.connect(handle=dialog)
    window = pwa_app[u"開く"]

    addres = window.children()[39]
    addres.click()

    # エクスプローラーのフォルダパス変更
    exp_folder_path = window.children()[43]
    exp_folder_path.type_keys(photo_folder+'{ENTER}',with_spaces=True)

    file_name = "image.png"

    # テキストボックス(ファイル名)にPATHを入力
    tb = window[u"ファイル名(&N):"]
    if tb.is_enabled():
        tb.click()
        edit = window.Edit4
        edit.set_focus()
        # ファイルを選択し、Alt + Oを押下
        edit.type_keys(file_name + '%O',with_spaces=True)    

def login_twitter():
    global browser
    # ログインページを開く
    options=Options()
    browser = webdriver.Chrome(options=options)
    browser.get('https://twitter.com/login/')
    time.sleep(2)  # 待ち
    # account入力
    element_account = browser.find_element_by_name("session[username_or_email]")
    element_account.send_keys(account)
    time.sleep(2)  # 待ち
    # パスワードを入力する
    element_pass = browser.find_element_by_name("session[password]")
    element_pass.send_keys(password)
    time.sleep(3)  # 動作止める
    # ログインボタンクリック
    element_login = browser.find_element_by_xpath('//*[@data-testid="LoginForm_Login_Button"]')
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    element_login.click()
    time.sleep(3) # 待ち

def remove_emoji(src_str):
    import emoji
    return ''.join(c for c in src_str if c not in emoji.UNICODE_EMOJI)
#Seleniumで絵文字の入力はできないことがあるので、その場合は絵文字を取り除いてください

login_twitter()
browser.find_element_by_class_name("public-DraftEditor-content").send_keys("テキストとしてツイートしたい内容")
strtoimage("画像に変換したい文字列")
browser.find_element_by_xpath("//div[@class=\"css-18t94o4 css-1dbjc4n r-1niwhzg r-42olwf r-sdzlij r-1phboty r-rs99b7 r-1w2pmg r-1vuahiu r-mvpalk r-1imd94c r-1vuscfd r-53xb7h r-1ny4l3l r-mk0yit r-o7ynqc r-6416eg r-lrvibr\"]").click()
#画像添付ボタンをクリック
time.sleep(3)
upload_item_photo()
time.sleep(3)
browser.find_element_by_xpath('//*[@data-testid="tweetButtonInline"]').click()
#ツイートボタンを押す
4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1