はじめに
本記事は各SNSに同じような投稿をしたいのに、一々各サイトをめぐってコピペするのがアホくさかったので、自動化できないかと試みた結果をまとめたものです
よりベストな方法があろうことは想像に難くないですが、見つけられなかったので備忘録的に残しておきます
また、新規開発要素はありませんので、外部リンクばかりです
Power Automate Desktopを実行するためのPCが別途必要なので、汎用性および実用性は薄いです
有料版であればO365のPower Automateと繋げてできそうなことを無理やりやっているのでおすすめできません
まとめ
- Twitterの投稿をzapierで拾ってメールへ転送する
- 特定の未読メールを周期的にPower Automate Desktopでポーリング取得する
- メールの本文をPower Automate Desktopでクリップボードへ保存
- Facebook/LinkedinをChromeで開く
- Power Automate DesktopのWebUI操作を実行し、投稿する
1. Twitterの投稿をzapierで拾ってメールへ転送する
Twitterの自分の投稿をzapierで取得する
こちらを参考にしました
TwitterからSlackに投稿するには?Zapierで簡単!
Twitterで取得した結果をGmailへ送信する
こちらを参考にしました
Slackとzapierを使ってメール送信を自動化してみた
2. 特定の未読メールを周期的にPower Automate Desktopでポーリング取得する
特定の未読メールを取得する
ポーリングする
こちらを参考にしました
Power Automate Desktop:無料バージョンだけで定期的にフローを自動実行する方法(アイデア)
3. メールの本文をPower Automate Desktopでクリップボードへ保存
Clipboard.SetText Text: PostText
MouseAndKeyboard.SendKeys TextToSend: $'''{Control}({V})''' DelayBetweenKeystrokes: 10 SendTextAsHardwareKeys: True
キー入力によるショートカットキー利用はこちらを参考にしました
ドキュメント Power Platform Power Automate Power Automate Desktop デスクトップ アクションのリファレンス マウスとキーボード
PostTextはMailObject.Bodytextが入ります
4. Facebook/LinkedinをChromeで開く
例: Linkedinの場合
System.RunApplication ApplicationPath: $'''\"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe\"''' CommandLineArguments: $'''https://www.linkedin.com/feed/''' WindowStyle: System.ProcessWindowStyle.Normal ProcessId=> AppProcessId
WebAutomation.AttachToChromeByUrl TabUrl: $'''https://www.linkedin.com/feed/''' BrowserInstance=> Browser
WAIT (UIAutomation.Windows.ToOpenByTitleClass Title: $'''フィード | LinkedIn - Google Chrome''' Class: $'''Chrome_WidgetWin_1''' FocusWindow: True)
chrome.exeのパスは環境変数なりに入れるとか変数で渡せるようにするとか工夫したほうが良さそうだけど、個人利用だしいっかの精神
2行目のWebAutomation.AttachToChromeByUrlでWeb操作可能なオブジェクトを取得するため必須
3行目はWindowが立ち上がってないと操作に移れないための待機。オプションでフォーカスを合わせることもできるので、設定しておく
※バックグラウンド実行できるのであればしたいが、試行錯誤コスト高そうだったので今回は保留
環境によって、各行実行時にまだページが開いてないとか、色々あると思うので、waitをうまく挟んだほうが良さげ
5. Power Automate DesktopのWebUI操作を実行し、投稿する
Webレコーダーを使用してやりたい操作を登録した
レコーダーを使わずにUIの要素をポチポチ拾ってあげようとすると、一時トークンも含む限定的なオブジェクトと認識されてしまい再利用できなかった
セレクターの編集から頑張ればできるっぽいけど、ハマりそうだったのでレコーダーで進めた
Webレコーダーの利用方法についてはこちらを参考にしました
【初心者向け】Microsoft RPA Power Automate Desktop はじめてのWebレコーダー
成果物イメージ
できなかったこと、わからなかったこと、やりたいこと
次の機会に向けた自分へのまとめ。コメントもらえるとありがたいところ。
できなかったこと
- クラス、関数分けのようにフローを分けて呼び出す
- Chromeインスタンスの再利用
- 投稿入力フォームへの直接入力(クリップボードを使わない)
わからなかったこと
- UI要素のセレクターの書き方、作り方
- バックグラウンド実行
やりたいこと
- Pythonなどを用いてSaaS APIを呼び出す処理との連動
- 仕事で、UIを含むアプリケーションのテスト自動化