待機やめてみた
IEのダウンロード通知バーに関する、最近の成果です。
- IE通知バーの3秒待機、やめました。
- エミュレーションの300ミリ秒待機、やめました。
確実かつ最速への飽くなき挑戦の軌跡です。
「こうすればもっと確実だし速いよ!もっとパーツを節約できるよ!」な情報、お寄せいただけると嬉しいです。
掛け合わせてより快適にしたいし、ステキな解法ならあっさり乗り換えちゃうかも。
関連スレッドを最下部に引用してます。
ダウンロード通知バーの処理に必要な2ステップ
- 通知バー表示担保
- 保存ボタン押下担保 ← 今回のテーマ
公式の1案
- 画像マッチング
- 指定時間待機
チャット氏の前で「通知バー」とつぶやくと、公式の1案を確認できます。
1.には有効無効状態取得(WIN32)を使ってきました。
きっと1.は既に確実かつ最速だと思い込んでます。
今回、スピードが求められる処理のため、2.の指定時間待機も惜しい状況でした。
ファイルサイズやNWとかPCの重さに左右されるから、3秒だとエラーになるし、10秒だともったいない。
10秒でもエラーになることも。
わたし史上最速の1案
(今回試行錯誤して、指定時間待機とエミュレーションの待機を排除できた方法)
- 有効無効状態取得の取得結果がブランクじゃなくなるまでループ
- ダウンロードファイルを掴めるまでAlt+N、Enterをループ
- Alt+Nで通知バーがアクティブに=保存ボタンにカーソルが乗る、Enterで保存 → デフォルトのダウンロード先に保存される
- 最近取り上げた、ループで待機する構造
- エミュレーションの中からも待機を排除
1000ms、Alt↓、N↓、N↑、Alt↑、1000ms
1000ms、Enter↓、Enter↑、1000ms
パーツ構成
- 通知バー表示担保
繰り返し
例外処理
正常系
有効無効状態取得 *1
異常系
何も置かない
分岐:取得結果 等しくない 値⇒(ブランク)
True
繰り返し終了
False
何も置かない
指定時間待機:3秒 - 保存ボタン押下担保
繰り返し
例外処理
正常系
先頭ファイルの取得 *2
ファイル移動
異常系
Alt+N *3
Enter *3
- 1.の繰り返しと分岐は、後判定繰り返しでまとめられるものの、解り易さ優先でこの構成を使うことが多い
- *1 有効無効状態取得の取得結果はTrueかブランクのどちらか(Falseにはならない模様)
- *2 手前で、ダウンロード先にファイルがない状態を担保
- *3 Alt+N、Enterは空振っても無害(干渉する要素があるなら別途対策が必要)
実感
- 今のところ確実
- 最速と言い張れるスピード感
たぶん人の反射神経と驚速タイピングでも勝てない - Alt+N、Enterを分けておくか、1ノードに統合しちゃうか、これも深そう
わたしは今のところ、待機時間を入れないで分けておく派
取るに足らないミリ秒だけど、チリツモでもあるので、今後深掘りたい
オブジェクト/エレメントで制御しにくい対象に対する思い
- 画像マッチング:視力/視線/状態頼み
- 指定時間待機:予定は狂いがち
→ 不安定要素になり得る画像マッチングと指定時間待機は、代替手段があれば採用したい - 最低でも止まらないでほしい
進まないなら補助できるように待ってて/ループしててほしい - コンピューターらしく、あわよくば状態を確実に判断して最速で処理してほしい(今回はこれを実現)
NTTデータ謹製のIE制御ライブラリ
「IE_通知バー操作」を使ってみたことがあります。
ドラッグレースが実現次第、続報します。
所要時間の計測、速度/効率の比較に使える標準機能
- ログ出力ウィンドウの経過時間がミリ秒表示で便利
- グループ選択で部分実行が使いやすい
※ プチライブラリは秒まで
指定した2つの時間の差分を取得するライブラリ
https://winactor.biz/library/2019/01/30_612.html
関連スレッド
https://winactor.com/questions/question/ファイルダウンロード(みんなの最適解)/
https://winactor.com/questions/question/[質問追記][設定方法の参考情報]ieでファイル/