news ウェブサイトへのログインとファイルダウンロードを自動化する方法

本記事はAutoMate製品開発元Helpsystems社の記事を翻訳したものです。

Python、JavaScript、 C#、 PowerShell、 それともノーコード?

コンピューターは単純で反復的な仕事を行うことに優れているため、人間の作業負担を軽減してくれます。RPA(ロボティック・プロセス・オートメーション)は、そういった単純な仕事を記録し、繰り返し行わせる機能が容易になったため、組織内の担当者に新しい機会を創出し、IT部門の負担の軽減にもつながります。

では手順書からバグレポートまで、あらゆるものを取得するためにユーザーが毎日手作業で行っている作業、ウェブサイトへのログインとファイルダウンロードを自動化する方法について見ていきましょう。

ウェブサイトにログインしてファイルをダウンロードするスクリプトの書き方

従来は、Python、Java、C#、PowerShellなど、開発者がよく使う言語を使ってスクリプトを書くことで、この2つのプロセスを自動化することができました。

Pythonを使ってウェブサイトにログインし、ファイルダウンロードをするには、ちょっとした作業が必要です。最もわかりやすい方法としては、Python Requestライブラリを使用して、ログイン・フォームのaction属性内のURLにアクセスすることが挙げられます。つまり、手動でページソースを読み取ってそのURLを検索し、requests.post命令を使用してユーザー名とパスワードの値を渡します。

JavaではHttpURLConnectionクラス、C#ではHttpWebRequestクラスとHttpWebResponseクラスを使って同様のことができます。PowerShellを使用してログインし、ファイルをダウンロードする場合は、まずブラウザーをオブジェクトとして開き、Navigateアクションを使用してログインURLにアクセスし、ユーザー名とパスワードを渡してから、click () を使用してログインボタンをクリックする方法が挙げられます。

これらは基本的なログイン方法ではありますが、失敗する傾向があります。ログインフォームの構造によっては、一切使用できない場合があります。例えば、サイトによってはリクエストにURLエンコードされたセッション・トークンが含まれていることを要求し、それらを渡すことができない場合は、400 Bad Requestとして返ってきます。

こういった様々なハードルがあるため、スクリプトでウェブサイトのログインを自動化しようとする初期の段階で失敗することが多く、その先にも多くの課題が待ち受けています。

パスワードの保管と検索

ログイン時にウェブフォームに何を入力する必要がありますか?当然、自分のユーザー名とパスワードを入力する必要があります。一見単純なことに思えるかもしれませんが、これらの認証情報はどこに保存されるのでしょうか?最もわかりやすいのはスクリプト内ですが、プレーンテキストのまま保存されることになるため、とても危険です。別の方法として、システム上の別の暗号化されたファイルにエンコードすることも可能ですが、その場合、自動的に復号化する必要があります。つまり、強制的にユーザーに復号化用のパスワードを入力させることになります。

これらのパスワードはすべて一元管理なしでローカルに保存されます。もし、あなたやユーザーがパスワードを更新したい場合、またはユーザーが退職した場合はどうすればいいのでしょうか?このようなスクリプトによるアプローチでは、自分で解決するしかありません。

また、使用しているサイトが多要素認証(MFA)に対応している場合、スクリプトはより複雑になります。MFAはサイトの安全性を高める素晴らしい方法ですが、MFAで一般的に使用されるトークンベースのシステムであるOAUTHを理解する必要があり、別の複雑なレイヤーをスクリプトに追加しなくてはいけなくなります。

コードの複雑性

次に、複数の結果を処理するという問題があります。スクリプトは、if-then文やcase文を使用して複数の結果に対応できるので、この点では優れていますが、全ての結果に対応させるとなるとコードの複雑さが増してしまいます。堅牢なスクリプトは、HTTPヘッダー内の異なるレスポンスコードからログインエラーメッセージまで、あらゆる種類の例外を処理する必要があります。

これらすべてを考慮していくとコードがさらに複雑化し、より多くのウェブページを処理すればするほど複雑さが増します。また、各ページには異なるコードを必要とするプロパティがあります。そのため、ページごとに異なるパラメータのリストを読み込むマスタースクリプトを作成するか、より現実的な方法として、新しいページにアクセスするたびに全く新しいスクリプトを作成する必要があります。いずれにしても、リストに新しいページを追加するたびに、スクリプトの調整やデバッグする必要があります。

保守性

作業はそこで終わりではありません。ウェブサイトの開発者が、コードを変更することはよくあります。例えば、ログインフォームの要素し使用していたクラス名が変わっていたり、ダウンロードするファイルの命名規則が変更されていたりすることもあります。これにより、スクリプトのポートフォリオが脆く、壊れやすくなり、開発費の増加となります。

このような課題は、一度ログインした後にファイルをダウンロードしようとしたときにも残ります。それは、ユーザーマニュアルのような滅多に変更されない静的ファイルの場合もありますが、定期的に更新されるファイルの可能性が高いです。HTMLコード内のリンクの位置に基づいてファイルをダウンロードしたり、ファイル名を解析したりしなければならない場合があり、正規表現を使用した作業が必要になるかもしれません。

各言語には独自のアプローチがあり、一般的には、ページのドキュメントオブジェクトモデル(ページを構成するさまざまな要素の階層構造)をナビゲートすることになります。Pythonでは、HTML要素を解析するための独自の構文(シンタックス)を持っているBeautifulSoupのようなライブラリを使用することになります。

ここで直面する大きな問題のひとつが、保守のタイミングです。ウェブページが作成された初期の頃は、ログインページは静的なHTMLで構成されたシンプルなものでした。しかし今では、メインページの後に何らかのコンテンツを読み込むJavaScriptがよく使用されています。そのため、ページのローディング直後に読み込もうとするシンプルなスクリプトが邪魔になることがありますが、BeautifulSoupはそれらの要素を認識しません。

そのため、nativeクラスを使用したスクリプト作成は、熟練した開発者以外にはレベルの高い作業となっています。しかしブラウジング専用に設計されたサードパーティのフレームワークがあり、このプロセスを容易にすることができます。Pythonにはtwillとwebbotがあります。Python、Java、C#、PowerShellの開発者は、ブラウザの動作を自動化するライブラリであるSeleniumを使用することもでき、テストやブラウザの自動化に適しています。これらは物事をより単純化しますが、スクリプトソリューションであることに変わりはありません。一部の課題は軽減されますが、すべての課題が軽減されるわけではありません。

ウェブサイトにログインしてファイルをダウンロード
〜ーコードソリューションAutoMateの活用〜

スクリプトの代わりに、すべてのステップをキャプチャするRPAツールを使用することです。HelpSystemsのAutoMateは、ブラウザベースまたはデスクトップアプリケーション上でのユーザのインタラクションをキャプチャすることで、ユーザ自身によるUI駆動の自動化を可能にするレコーダー機能を提供しています。それぞれの新しいアクションが各ステップとなり、ユーザーはコードを書くことなく、シンプルなダイアログボックスを使っていつでも編集することが可能です。

さらにAutoMateは、700種類以上のアクションから選択することが可能です。GUIレコーダーのメニューから「Webブラウザ -ブラウザを開く」アクションを選択し、閲覧したいURLを入力することから始めることができます。このツールは、自動的にページ全体が読み込まれるのを待ちます。また、次に進む前にすべてが読み込まれたことを確認するために、ユーザーがオプションで待ち時間を入力することもできます。

このツールは、ユーザーのインタラクションを追跡し、フォーム内の個々のフィールドのクリックを記録します。ユーザーは、自分の電子メールアドレスを入力し、パスワードを選択し、ページの「ログイン」または「送信」ボタンをクリックすることができます。またこれらのステップを個別に記録し、プロセスで静的な画面座標を使用しません。

自前のスクリプティングソリューションとは異なり、AutoMateは安全な中央レポジトリにパスワードを保存します。これらのパスワードは保護され、管理者でも見ることができず、権限のあるユーザーのみがアクセスできるようになっています。

サイトにログインした後、ダウンロードするファイルのURLを入力するか、必要に応じてユーザーナビゲーションを模倣することができます。ブラウザがファイルの場所に到達すると、特定のマウスクリックやキーストロークを入力して、「保存」コマンドを発行するシミュレーションを行い、その後ファイルを開くこともできます。このツールは、テーブル、ファイル名、ページ上のリンク位置などを解析するスクレイパー機能も備えています。

ユーザーは、さまざまなヘッダーレスポンスを処理するための例外処理ステップを入力し、いずれかの自動化が失敗した場合、自動的に有益な例外情報をメールに組み込んで送信するなど、積極的な対処策を取ることができます。

自動化タスクを記録した後、ユーザーは他の自動化タスクを含む、または単独で実行するシンプルなワークフローを介して、そのタスクをスケジュールすることができます。ユーザーがアクセスできるネットワーク上のどのシステムでも実行でき、様々なシステム間で動的に負荷分散することも可能です。

AutoMateの利点は、ノーコードソリューションでありながら、アクションの各ステップが人間が読める形になっており、テストしてすぐにフィードバックが得られることです。このため、ユーザーは必要に応じてステップを見直し、編集、ステップの移動、コピー等ができます。ユーザーは、これらのステップを異なるサイトで再利用し、パラメータを変更したり、ステップを編集して、自動化をすばやくカスタマイズすることができます。AutoMateの企業向けソリューションでは、中央データベースを介して他のユーザーとスクリプトを共有することも可能です。

スクリプトの作成には多くの課題があり、開発者の裏をかいているように感じられることもあります。しかし、ほとんどのビジネスユーザーは、そのような作業をする時間もスキルも持ち合わせていません。グラフィカルなRPAを利用することで、迅速かつ簡単に自動化することができ、AutoMateが残りの作業を行うため、ユーザーは本来の業務に専念することができます。

■業務自動化ツール「AutoMate」については下記をご参照ください。
https://automate.sct.co.jp/products/reason/

■「AutoMate」のレコーダー機能については下記をご参照ください。
https://lp.sct.co.jp/cloud-server/rpa-automate11-6