scrapbox編集のAPI化
追記だけならば,/help-jp/ページを作る
今回はそれでは足りなかった
常時起動自分でselemiumとNgrokで作るか
ngrokのURLの配布が必要になる
これしかあとは選択肢ないなぁ
FastAPI?
インストールしたもの
brew
ngrok
chromedriver
pip
selenium
fastapi
自宅PCを動かさなくても,全画面の裏で動かしておく
Chromeは自動操作用の避難空間としておき,全画面はSafariまたは Arcでやっておく
Safariの方が描画が想定通りになる
立ち上げるものが複数ある
chromeのデバッグモード
ブラウザのログイン状態を引き継ぐために必要な作業
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222 --profile-directory="Profile 1"
このコマンドを打つと,Chromeウィンドウが一つ立ち上がり,このウィンドウが操作される
デバッグモードを保つにはこのコードを動かしておかないといけない
ダミーのようなウィンドウが立ち上がるが,一つ目のウィンドウで操作される
http://localhost:9222/json にアクセスして,応答するか確認
ngrok
ngrok http {ポート番号}で起動
Pythonコード
code:hoge.py
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
import time
from selenium.webdriver.common.by import By
from fastapi import FastAPI
import urllib.parse
options = webdriver.ChromeOptions()
# ポート9222でデバッグ通信を待ち受けているChromeを操作する
options.add_argument("--remote-debugging-port=9222")
# ブラウザの起動
cService = webdriver.ChromeService(executable_path="/opt/homebrew/bin/chromedriver")
driver = webdriver.Chrome(service=cService, options=options)
# 指定のURLにアクセス
driver.get("https://scrapbox.io/takuzyou/%E5%8D%93%E4%B8%8A")
# ページの読み込みを待つ
# time.sleep(5)
app = FastAPI()
@app.get("/")
async def root(image: str = ""):
# # 画面中央をクリック
actions = ActionChains(driver)
whole_page = driver.find_element(By.TAG_NAME, "html")
actions.move_to_element_with_offset(whole_page, 0, 0)
actions.move_by_offset(300, 130).click().perform() # 画面中央付近の座標を指定
# # 全選択を行う
actions.key_down(Keys.COMMAND).send_keys("a").key_up(Keys.COMMAND).perform()
actions.send_keys(Keys.DELETE).perform()
# # 用意された変数xをキー送出
# image_url = "http://mainichi.jp/showa/graph/TokyoTower50thAnniversary/1.jpg"
actions.send_keys(f"卓上\n[").perform()
time.sleep(0.5)
image_url = urllib.parse.unquote(image)
actions.send_keys(image_url).perform()
actions.send_keys(Keys.ESCAPE).perform()
return {"message": "It's on the table!"}
# # 必要ならスクリプト終了後にブラウザを閉じる
# # driver.quit()
卓上のPythonで詰まったところ
uvicorn main:app --reloadでHTTPサーバー起動
ngrokのapi保護
URLのIDは暗号論的耐性があるのか
デスクトップ操作のAPI化
クラウドBOTを使ってBOT専用アカウントを使ってそこで動かそう
無料枠でもAPI使えるし戦えそう
googleにログインできないぞ
これさえできればなあ
Googleスプレッドシートにログインできません。 - BOTの構築/設計/運用 - Cloud BOT Community
他のツールを試す
Automation Cloud
クラウドで実行できるのかわからん
これぐらい実行できる自前のコンピュータ欲しいな
ちゃんとメモリ積んでるラズパイ買おうね
4GBかな
power automate使うか
時を決めて実行するスケジュール実行や、一定のトリガーを設定して実行するトリガー実行を行うことができません。↗️
クラウドのPower AutomateからDesktopのPower Automateをトリガするという使い方
ちなみにこれは有料化つ組織向け
組織の管理者のOKがなければ使えない
Automation Anywhere
UiPath
RPAはブラウザを操作できるとは限らない
むしろクラウドBOTがすごい