LoginSignup
0
0

D-POS JANコード 全選択できない プルダウン選択をjsでやる

Last updated at Posted at 2023-08-28

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

その際、少し面倒だったので共有です。

やりたい事

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

面倒な事

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

30000件以上はDLできない

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件くらい選択されましたが件数の上限でDL出来ませんでした。ので分割します。

上限値を確認します。

docに書いてありました
image.png

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で埋め込まれていて通信はどのように行われているのか気になりネットワークを確認した所、以下のようにリクエスト先に送信を行っていました。

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

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

image.png
ブラウザ開発者ツールのネットワーク部

image.png
ペイロードのフォームデータ 

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

また%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 

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

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

うーむ、わからない..

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0