RPAソフト不要！ブックマークレットで作業を自動化

# 概要
* ブックマークレットを用いて、RPA Challengeの入力作業を自動化するコードです。以下の動画で使われているものです。

<iframe width="560" height="315" src="https://www.youtube.com/embed/0QMHxfkWVBI?si=lsVJgcnmPbWDQjDY" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

# 実行環境
* Windows11

# 注意点
* プログラムの実行については、すべて自己責任で行ってください。実行により発生した、いかなる直接的または間接的被害について、作者はその責任を負いません。

# 結果
* 待機処理ありバージョンの実行結果は以下のとおりでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618291/1412c979-d8bf-2610-c190-23a625b996eb.png)


# コード
```javascript:待機処理なし

(function(){
    var employees = [
        // 各値を配列として入力する。    
        {
            姓: '',
            名: '',
            会社名: '',
            部署: '',
            住所: '',
            メールアドレス: '',
            電話番号: ''
        },


    ];

    // class属性が"waves-effect col s12 m12 l12 btn-large uiColorButton"であるボタンを取得します。
    var button = document.querySelector('.waves-effect.col.s12.m12.l12.btn-large.uiColorButton');
    button.click();

    // 従業員の数だけループ
    for (var i = 0; i < employees.length; i++) {
        var employee = employees[i];

        // 各要素に対応する値を入力する
        document.querySelector('[ng-reflect-name="labelEmail"]').value = employee.メールアドレス;
        document.querySelector('[ng-reflect-name="labelLastName"]').value = employee.姓;
        document.querySelector('[ng-reflect-name="labelPhone"]').value = employee.電話番号;
        document.querySelector('[ng-reflect-name="labelCompanyName"]').value = employee.会社名;
        document.querySelector('[ng-reflect-name="labelAddress"]').value = employee.住所;
        document.querySelector('[ng-reflect-name="labelFirstName"]').value = employee.名;
        document.querySelector('[ng-reflect-name="labelRole"]').value = employee.部署;

        // class属性が"btn uiColorButton"であるボタンを取得します。
        var button = document.querySelector('.btn.uiColorButton');

        // ボタンをクリックします。
        button.click();
    }
})();

```

```javascript:待機処理あり
(async function(){
    var employees = [
        // 各値を配列として入力する。    
        {
            姓: '',
            名: '',
            会社名: '',
            部署: '',
            住所: '',
            メールアドレス: '',
            電話番号: ''
        },


    ];

    // class属性が"waves-effect col s12 m12 l12 btn-large uiColorButton"であるボタンを取得します。
    var button = document.querySelector('.waves-effect.col.s12.m12.l12.btn-large.uiColorButton');
    button.click();

    // 遅延を加える関数を定義します。
    function delay(ms) {
        return new Promise(resolve => setTimeout(resolve, ms));
    }

    // 従業員の数だけループ
    for (var i = 0; i < employees.length; i++) {
        var employee = employees[i];

        // 各要素に対応する値を入力する
        document.querySelector('[ng-reflect-name="labelEmail"]').value = employee.メールアドレス;
        await delay(100); // 0.1秒待機

        document.querySelector('[ng-reflect-name="labelLastName"]').value = employee.姓;
        await delay(100); // 0.1秒待機

        document.querySelector('[ng-reflect-name="labelPhone"]').value = employee.電話番号;
        await delay(100); // 0.1秒待機

        document.querySelector('[ng-reflect-name="labelCompanyName"]').value = employee.会社名;
        await delay(100); // 0.1秒待機

        document.querySelector('[ng-reflect-name="labelAddress"]').value = employee.住所;
        await delay(100); // 0.1秒待機

        document.querySelector('[ng-reflect-name="labelFirstName"]').value = employee.名;
        await delay(100); // 0.1秒待機

        document.querySelector('[ng-reflect-name="labelRole"]').value = employee.部署;
        await delay(100); // 0.1秒待機

        // class属性が"btn uiColorButton"であるボタンを取得します。
        var button = document.querySelector('.btn.uiColorButton');

        // ボタンをクリックします。
        button.click();

        await delay(100); // 次の入力前に0.1秒待機
    }
})();

```