配列に列を追加してフィルタしたい
(最下部にしくじりのセクションを追加)
テストを経て、「後判定繰返」と配列系ライブラリの相性が悪いかもという内容を追記しました。
「後判定繰返」のカウンタを使わず「カウントアップ」とかを使って列追加のテストまでうまく行ったという内容を追記しました。
配列のメリットを活かしてブラウザ操作のシナリオを音速で処理してます。
現フローでなおも遅い部分を解消したいです。
お知恵を拝借させてください。
遅い部分は特定済みです。
ざっくり言うと、ない要素を探す場面が遅いです。
やりたいことの完成系のイメージはできてるつもりです。
ない要素を予めリストから除外しようとしてるのが現在地です。
時間さえかければゴールできるはずと高をくくってます。
配列関連ライブラリは不慣れです。
見立てとかアドバイスをいただけますか。
- そんなのこうしちゃえばいいだけじゃん
- ここはこうする必要があるね
- ここに気をつけると良いよ
- それで大丈夫、頑張れ
- このサイトや動画を真似ると良いよ
- 目的ベースでこうしたらもっと効率的だよ
- 効率面で目的に見合わないよ
- 逆に処理時間が長くなっちゃうのが目に見えてるよ
- ムリだね、そのルートじゃゴールできないよ
等々
いずれもウェルカムです。
目的ベースで別案もウェルカムです。
時短、横着が目的で恐縮です。
アドバイスをいただきたいのは、やりたいこと1.2.の配列加工部分です。
WinActor7211の同梱ライブラリと公式ライブラリをベースにしたいです。
時短の余地があるなら、スクリプトの加工も厭わないです。
同梱ライブラリを繋ぎ合わせた感じの「ブラウザ操作(配列のアクションを順次実行)」を使ってます。
https://winactor.com/questions/question/教わりながら「ブラウザ操作配列のアクションを/
やりたいこと
- 2次元配列の4カラム目に情報を追加したい
同じ行のXPathの要素数を追加したい
要素数はブラウザ関連の「要素数取得」を使う想定
BEFORE
アクション,XPath,変数
AFTER
アクション,XPath,変数,要素数
- 4カラム目がゼロの行を配列から削除したい
現行のフロー
2次元配列(初期化)
Excel操作(指定範囲の値を配列に追加)
アクション,XPath,変数
値の取得,//span[@id="a"],A
値の取得,//span[@id="b"],B
ブラウザ操作(配列のアクションを順次実行)
変更後のフロー(イメージ)
2次元配列(初期化)
Excel操作(指定範囲の値を配列に追加)
アクション,XPath,変数
値の取得,//span[@id="a"],A
値の取得,//span[@id="b"],B
XPathの要素数を追記★やりたいこと1
値の取得,//span[@id="a"],A,1
値の取得,//span[@id="b"],B,0
XPathの要素数がゼロの行を削除★やりたいこと2
値の取得,//span[@id="a"],A
ブラウザ操作(配列のアクションを順次実行)
「ブラウザ操作(配列のアクションを順次実行)」の概要
For 配列の行数分を繰り返す
action = arr(i,0)
xpath = arr(i,1)
value = arr(i,2)Select Case
Case 値の取得
getText xpath, value
End SelectSub getText(x, v)
値の取得のスクリプト
End SubNext
(追記)後判定繰返と配列の相性が悪かったっぽいという内容
Ver.7.4.0でテストフローを実行しました。
ひとまず列追加までです。
収穫と課題があります。
- 収穫:爆速と判ったこと
- 課題:期待したアウトプットにならない
わたしの「配列」や「繰り返し」系の扱いかたがマズイのか。
「配列」と「繰り返し/後判定繰返」の相性が良くないのか。
Ver.7系の速すぎる側面があだになっちゃってるのか。
「配列」は「繰り返し/後判定繰返」と併用してナンボのはず。
気付きを教えていただけますか。
- ここが間違ってるよ
- これが抜けてるよ
- ここはこうしたほうが良い
- これが原因では?
- この挙動を逆手に取って、
- こうしてみれば?
等々
テストフロー
2次元配列操作(初期化)
Excel操作(指定範囲の値を配列に追加):A1:B20、配列
後判定繰り返し1:10回、行
2次元配列操作(情報更新)1:配列、行、列、0
後判定繰り返し2:10回、ぎ
2次元配列操作(情報更新)2:配列、ぎ、列、1
2次元配列操作(ダンプ)
初期値
- 行:0
- ぎ:10
- 列:2
期待したアウトプット
A1,B1,0
A2,B2,0
A3,B3,0
A4,B4,0
A5,B5,0
A6,B6,0
A7,B7,0
A8,B8,0
A9,B9,0
A10,B10,0
A11,B11,1
A12,B12,1
A13,B13,1
A14,B14,1
A15,B15,1
A16,B16,1
A17,B17,1
A18,B18,1
A19,B19,1
A20,B20,1
アウトプット1
→ C1とC12以降に値が入らず、、
A1,B1,
A2,B2,1
A3,B3,1
A4,B4,1
A5,B5,1
A6,B6,1
A7,B7,1
A8,B8,1
A9,B9,1
A10,B10,1
A11,B11,1
A12,B12,
A13,B13,
A14,B14,
A15,B15,
A16,B16,
A17,B17,
A18,B18,
A19,B19,
A20,B20,
深堀り
- 「待機ボックス」で追う限り、変数の値は想定通りに変化してる
- 後判定繰返1でC2:C10に0が入る
- 後判定繰返1で配列0行目(初期値)のC1に値が入らない
- 後判定繰返2で配列10行目(初期値)のC11に1が上書きされ続ける
アウトプット2
テストフローの2次元配列操作(情報更新)1と2の行をそれぞれ4と14に固定
→ 想定通りのセルに値が入った
A1,B1,
A2,B2,
A3,B3,
A4,B4,
A5,B5,0
A6,B6,
A7,B7,
A8,B8,
A9,B9,
A10,B10,
A11,B11,
A12,B12,
A13,B13,
A14,B14,
A15,B15,1
A16,B16,
A17,B17,
A18,B18,
A19,B19,
A20,B20,
アウトプット3
テストフローから後判定繰返2を撤去し、中身だけにする
→ 1は相変わらずC1に値が入らず、2は想定通りのセルに値が入った
A1,B1,
A2,B2,0
A3,B3,0
A4,B4,0
A5,B5,0
A6,B6,0
A7,B7,0
A8,B8,0
A9,B9,0
A10,B10,0
A11,B11,1
A12,B12,
A13,B13,
A14,B14,
A15,B15,
A16,B16,
A17,B17,
A18,B18,
A19,B19,
A20,B20,
アウトプット4
テストフローの実行Waitを最大の+10で実行
→ アウトプット1と同じ結果
アウトプット5
テストフローの2次元配列操作(情報更新)1と2の順序を入れ替え
→ 後ろにしたほうの値0が繰り返しの回数分の10セルに入ったように見える
A1,B1,
A2,B2,0
A3,B3,0
A4,B4,0
A5,B5,0
A6,B6,0
A7,B7,0
A8,B8,0
A9,B9,0
A10,B10,0
A11,B11,0
A12,B12,
A13,B13,
A14,B14,
A15,B15,
A16,B16,
A17,B17,
A18,B18,
A19,B19,
A20,B20,
アウトプット6
再度テストフローの順序に戻す
→ アウトプット1と同じ結果
(追記)列追加のテスト成功分
「後判定繰返」内のカウンタ使用をやめ、「四則演算」でカウントアップしたら、期待通りの値が入りました。
後判定繰返0:10回
2次元配列操作(情報更新)1:アクション配列、行、列、0
四則演算:行=行+1
後判定繰返1:10回
2次元配列操作(情報更新)1:アクション配列、ぎ、列、1
四則演算:行=行+1
A1,B1,0
A2,B2,0
A3,B3,0
A4,B4,0
A5,B5,0
A6,B6,0
A7,B7,0
A8,B8,0
A9,B9,0
A10,B10,0
A11,B11,1
A12,B12,1
A13,B13,1
A14,B14,1
A15,B15,1
A16,B16,1
A17,B17,1
A18,B18,1
A19,B19,1
A20,B20,1
ドラッグレース開催
- 1回実行分の記録
- 後判定繰返0から後判定繰返1までの所要時間
- ログ記録パレットのデータを計算
0.607秒:カウントアップ
0.654秒:四則演算
0.600秒:後判定繰返のカウンタ
0.519秒:後判定繰返(カウンタなし)
評価
- カウンタのコストは大差なさそう
- 後判定繰返のカウンタを使えないのは残念
- 残りで目的を満たすうち、イチバン速かったカウントアップを採用
フィルタのテストに取りかかります。
※ しくじりのセクション ※
状況
- 繰り返しのカウンタ
- 使い慣れてるパーツ
- 仕様を充分に把握済み
- 一部が期待する結果にならない
対応
- UserForumで助けを求めつつ、
- 考え得るバリエーションを検証
採用した対策
- 目的ベースの代替パーツで切り抜けた
- 四則演算、カウントアップ
しくじりポイント
- 仕様を充分に把握済み:思い込み
- 考え得るバリエーションを検証:時間ロス
- 原因と正攻法の対策を見出せるはず:過信
- シンプルかつコンパクトなフローにしたい:こだわり
俯瞰の視点でのポイント(クリアした今だから言える)
- 四則演算やカウントアップで代用できることは、初めから分かっていた
あった葛藤
- 使用パーツ数が増えちゃう
- 繰り返しのカウンタで必ずゴールできるはず
- わたしが何かを見落としてるに違いない
- 初歩的なところでヘンな設定をしちゃってるのが原因のはず
今後採りたい、スマートな対応(クリアした今だから言える)
- 期待する結果が得られる構成に、とっとと方針を切り替えちゃえば良かった
- 原因の特定は、シナリオを仕上げてからで充分
- 心と時間に余裕があるタイミングのほうが、冷静に考えられる
時間ロスの昇華案(クリアした今だから言える)
- 時間ロスはやむを得なかったとも思いたい面も
- 相性が悪い組み合わせの情報共有
- 「そりゃ相性が悪い使いかただよ」な情報にも期待
- まとめたことで知識の定着を図れたつもり
- わたし自身の備忘録
- 再度ハマらない戒め
- 忘却曲線を持ち上げる工夫
- しくじりエピソード化で、ロスした時間を供養したい
- 仕様に強化の余地があるなら、相性の注意書きを添える余地があるなら、製品に反映してもらえたら嬉しい