[Power Automate] PADでSharePointからファイルを安全にダウンロードする方法

Robinコード

**REGION 定数定義
SET TARGET_URL TO $'''https://★ドメイン名★.sharepoint.com/sites/★SharePointの名前★/Lists/★リスト名★/AllItems.aspx'''
**ENDREGION
WebAutomation.LaunchChrome.LaunchChrome Url: TARGET_URL WindowState: WebAutomation.BrowserWindowState.Maximized ClearCache: False ClearCookies: False WaitForPageToLoadTimeout: 60 Timeout: 60 BrowserInstance=> Browser
# エクスポートボタンをクリック
WAIT 1
WebAutomation.ExecuteJavascript BrowserInstance: Browser Javascript: $'''function ExecuteScript() {
    const export_buttons = document.querySelectorAll(\'[name=\"エクスポート\"]\');
    export_buttons[0].click();
}''' Result=> Result
# CSVにエクスポートボタンをクリック
WAIT 1
WebAutomation.ExecuteJavascript BrowserInstance: Browser Javascript: $'''function ExecuteScript() {
    const csv_export_buttons = document.querySelectorAll(\'button[name=\"CSV にエクスポート\"]\');
    csv_export_buttons[0].click();
 }''' Result=> Result
WAIT 1
WebAutomation.CloseWebBrowser BrowserInstance: Browser

 

フロー定義

1分解説

SharePointではアクション「Webページでのリンクのクリック」でUI要素を選択しても正常に動作しない。
なぜならば、ページを開くたびにclass属性やid属性に割り振られる末尾の番号が毎回変わるため。
例えば、「セレクター div[id=”row299-0″] > div > div > div ….の要素が見つかりませんでした。」のようなエラーメッセージが表示される。

そのため、アクション「WebページでJavascript関数を実行」により、要素をクリックする必要がある。
Javascriptの実行は2回行っており、1回目がエクスポートボタンのクリック、2回目がCSVにエクスポートボタンのクリックである。

Waitの挿入の必要性について。

  • 6行目のWait
    Webページによっては、ページの表示が完了した後に、DOMが動的に作成される場合がある。
    つまり、ブラウザから200のレスポンスが返却されたタイミングでは「エクスポート」ボタンが存在していない可能性があるということ。そのため、ボタンが完全に表示されるまでに待機を行っている。
    厳密には「ボタンが表示されるまで」の処理の実装は手間であるため「1秒あれば表示されるでしょう」ということにしている。
  • 9行目のWait
    これも6行目と同様の利用。例えば、アコーディオンメニュ―などはクリックしてからメニューが上下に展開されるアニメーションが発生し、その瞬間にはメニュー要素のDOMが作成されていない可能性がある。
    Share Pointではメニューはアニメーションなしで表示されるが、お守りとして入れている。
  • 11行目のWait
    ボタンを押してからダウンロードが始まるまで一瞬のラグが発生することがある。
    そのため、ダウンロード > ブラウザを閉じるの順序を守るために待機を入れている。
    もし、ダウンロードするファイルの容量が大きい場合は、待ち時間をぴったり入れるのも難しいので、ローカルにファイルが落ちたことを確認する処理を入れるとよい。
    今回は、数MBのファイルなので1秒で十分としている。

動作確認

試行回数:50回
実行結果:50個のファイルがダウンロードされたことを確認