【Automation Anywhere】Salesforce からWebスクレイピングでデータを抜き出す

Salesforce と Automation Anywhereの連携については、Bot StoreにはAA公式の「[Get Custom and Standard Objects of Salesforce](https://botstore.automationanywhere.com/bot/get-custom-and-standard-objects-of-salesforce-aa/)」「[Run Query to get Sales Data](https://botstore.automationanywhere.com/bot/run-query-to-get-sales-data/)」などが存在していますが、いずれもAPI連携でありセキュリティトークンの入手など、Salesforce管理者との間で手続きが必要になります。

そこで、今回は最もお手軽なWebスクレイピングでSalesforceからデータを取ってくることを考えてみます。

# あらかじめ別画面でログイン、Classic、アクセシビリティの設定を行う
Salesforceへのサインイン処理を省くために、今回は**あらかじめ別のInternet Explorerの画面でログインをしておく**ことにします。こうすることで、別のInternet ExplorerでロボットがSalesforceを開こうとしたときにサインインの処理を省略することができます。

また、Salesforceのユーザーインターフェイスには**Lightning**と**Classic**の2種類が存在します。デフォルトはLightningになっているはずです。ただし、Lightningは長いリストを下にスクロールしていくと非同期で追加のレコードがどんどん表示されていく構造のためスクレイピングがうまく動きません。その場合は、画面右上の写真アイコンを開いて、「**Salesforce Classicに切り替える**」を選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/4daa151b-8e2b-d0d4-ca77-6bf6c4016128.png)

これで、URLが`https://*****.lightning.force.com/lightning/`から`https://*****.my.salesforce.com/`になったのが確認できるとともに、画面がClassicに切り替わります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/1ebb125d-799e-937b-d088-c3624d07a35f.png)

さらに、Classicモードの右上のメニューで「私の設定」を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/532f89f2-805e-2827-507a-b5cece7c3407.png)

表示された画面の左側のメニューで「私の設定」-「表示とレイアウト」-「アクセシビリティ」を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/f9a5de1c-d171-e2a7-153f-3ea7721c95c9.png)

そして「**アクセシビリティモード (Classicのみ)**」をONにして「保存」します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/999050d2-189a-642b-f5a5-712e774676fc.png)

これで必要な設定は完了です。


# 一覧からのデータの抜き出し
### 一覧画面の構造
通常のClassicモードでは、「リード」「取引先」「取引先責任者」「商談」の一覧ビューは、いずれも以下のような同じ構造をしています。表の下には「次へ>>」ボタンがあり、ページをめくることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/0fd93f5e-73d9-db84-8d32-59c2a49132f3.png)

HTMLソースを見てみると、表のように見える部分のタグは`div`タグになっています。しかし、WebレコーダーのExtract Dataコマンドで繰り返しパターンとしてデータを抜こうとすると、以下のように`div`タグの中に`table`タグが入っている構造になっているので`table`タグ内を繰り返しパターンとして認識してしまい、実際に実行してみると1行しか取り込めません。

```HTML:
<div>
  <table>
    <tbody>
      <tr>
        <td>コンテンツ1</td>
        <td>コンテンツ2</td>
        ...
        <td>コンテンツn</td>
      <tr>
    </tbody>
  </table>
</div>

```

これが「アクセシビリティモード (Classicのみ)」がONになると、タグの構造がより簡単なしくみとなり、一覧は全体が`table`タグでのみ描かれるようになります。

アクセシビリティモードでの一覧の描画は以下のようになります。ぱっと見、通常のClassicモードと同じですが、よく見ると表の装飾が簡単になっており、「次へ>>」の位置も別の場所になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/131c326a-d05d-e2d8-e4cb-c1ab28b73720.png)

### Webレコーダーで記録する
それでは、アクセシビリティモードでWebレコーダーを使ってスクレイピングしてみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/07c23a2a-6d3b-3c0b-76ab-1f901d5df904.png)

まず、一覧のURL (リード一覧など) を入力して進めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/49ba5f0d-7387-59a1-572e-e9477bfac156.png)

Webレコーダーでは、「Extract Table」ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/2f6e2a33-e7df-15aa-6b97-9013145871d0.png)

ブラウザー上にマウスカーソルを移動すると、下にあるテーブルの外枠に線が入るので、一覧のテーブルがうまく選択されるようにマウスを動かしてクリックします。
![sfdc-table-scraping.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/7ff244dc-b5ec-4701-f427-2d1137ce88da.png)

すると、以下のようなダイアログボックスが起動します。
ここで、Previewで複数行が取り込めていない場合は「Cancel」を押してももう一度トライしてください。「The table spans across multiple pages」をONにしてテーブルが複数ページにわたることを宣言し、「次へ」ボタンを「Capture」します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/8adbd874-7fd4-fccd-9d6e-59c24fbb47d8.png)

その後、画面右下の「次のページ>」が枠線で囲われるようにマウスポインタを動かし、クリックしてキャプチャします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/00f3ad8d-dcdb-f226-7826-85689f6f58b5.png)

うまくいけば、Next Button DetailsのところにHyperlinkとしてキャプチャされます。確認したら「Next」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/c6b0ea4c-b1b4-6b85-1e5f-aa77b48a31cf.png)

最後のページでは、結果を出力するCSVファイルを指定します。その後「Finish」を押せば完了です。その後、ツールバーで「Stop Recording」をクリックします。そうすると、タスクを保存するファイル名を効かれるので、好きな名前を付けて保存してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/2c930256-62c7-76df-6805-5070748e5e39.png)

すると、以下のようなアクションリストができあがります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/4238d7a6-bf07-925a-52a8-045cf8683cef.png)

# 得られる結果
あらかじめSalesforceにログインした状態で、作成されたタスクを実行すると、Internet Explorerの画面が起動して該当するページが表示され、ページがめくられていくとともに、情報が抽出されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/b55e2b7d-1e23-a5bb-3498-17e2828dd608.png)

結果はCSVファイルに保存されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/fb3ba7c6-3daf-cb35-2e4a-dbe2d10aa840.png)

Excelでファイルを開くと以下のようになります。25行毎にヘッダー情報が読み込まれているので、これは削除してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/7a02d53e-f382-931e-d654-1de1f1b7eaa3.png)

以上で、SalesforceからWebスクレイピングで「リード」「取引先」「取引先責任者」「商談」の一覧ビューから情報をとれることがわかりました！また、「レポート」については、ページの繰り返しなしのテーブルとして指定することで同様に取り込めます。