D-POS 全取得DL JANコード プルダウン選択をjsで

D-POSが新しくなったらしくRPAの更新作業をしました。

その際、少し面倒な事をしたので共有です。

 

やりたい事

D-POSデータの全取得DLの自動化

 

面倒な事

全POSデータ取得設定の[JANコード]選択時に5000以上はプルダウンの全選択ができない

30000件以上はDLできない

以前はJANコード分割されてたみたいですね

なにか理由があるのでしょう

 

D-POSの機能で使用できる全件取得は5000件までなのでjsで全取得します。

 

やる事

プルダウンはjsで順次追加されるので開発者用のコンソールで高速スクロールします。

レンダリングされた状態の要素をclick() していきます。checked = trueにしても※1fetchされません。 

設定を保存します。

 

やっていきます。

まずスクロールしてレンダリングさせます。

const tile = document.querySelector(".tileContainer")
const tileScroll = (tile) => {
    tile.scrollTop += 1000;
    console.log("+1000px")
};
const intervalId = setInterval(tileScroll , 100, tile.parentElement)

 

値は適当に調整してください。

自分は90000件くらいで2000回くらい回ってました。

回り切ったら止めます

  clearInterval(intervalId)

全選択します

[...document.querySelector(".tileContainer").children].forEach((ul, index, array) => {
        [...ul.children].forEach((li, index) => {
            li.children[1].children[0].click();
        });   
});

90000件くらい選択されましたが件数の上限は30000件周辺なのでDL出来ません。ので分割します。

上限値を確認します。

docに書いてありました

30000件でした。

listの要素数が460個だったので4分割してDLしようと思います。

document.querySelector(".tileContainer").children.length
461

115まで選択した所、23200でした。他も多少件数に差はあるものの30000件は超えなさそうです。

[...document.querySelector(".tileContainer").children].forEach((ul, index, array) => {
    if (index <= 115) {
        [...ul.children].forEach((li, index) => {
            li.children[1].children[0].click();
        });   
    }
});

後はレンダリングされているか確認しつつ115, 230, 345, 460で条件を変更し実行して完了です。

 

[...document.querySelector(".tileContainer").children].forEach((ul, index) => {
    if (index > 115 && index <= 230) {
        [...ul.children].forEach((li, index) => {
            li.children[1].children[0].click();
        });   
    }
});

 

※1 内部にtableauがiframeで埋め込まれていて通信はどのように行われているのか気になり(DOS攻撃になってないか)ネットワークを確認した所、以下のようにリクエスト先に送信を行っていました。

 

短時間に複数クリックされた場合、リクエストをまとめる。

categorical-filter-by-indexとしてまとめてリクエスト処理されているのが確認できます。

ブラウザ開発者ツールのネットワークタブ

ペイロードのフォームデータ 

大丈夫そうですね。ペイロードのfilterAddIndicesやRemoveIndicesからリストとして渡されて一回のリクエストが送信されている事が確認できました。

 

また%5Bsqlploxy~で始まる https://tableau.kaiba-datacompass.com/vizql/w/_ver1_0_0_hogehoge/v/sheet0/getfilteritems/sessions/hogehogehoge/sheets/分析対象_商品(JAN)_カテゴリー/filters/%5Bsqlproxy.hogehogehogehoge.%5Bnone%3Aitem_code_name%3Ank%5D?fromIndex=800&toIndex=999&domain=cascading 

リクエストはドロップダウンリストの呼び出しです。

 

カスケードレプリケーションとかいうものも使用しているみたいですね

dev.classmethod.jp

www.postgresql.org

 

うーむ、わからない..