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個のファイルがダウンロードされたことを確認