他の記事を参考にしながら書きました。
一度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()
#ツイートボタンを押す