プロが教える店舗&オフィスのセキュリティ対策術

とある会員サイトで、CSVファイルから情報を取得して、画像ファイルを登録(アップロード)しようとしています。

<form>の中にある要素の<input type = "file"></input>をクリックすると、
「アップロードするファイルの選択」というダイアログが出てきます。

①ダイアログ上部のディレクトリを表示している欄に、画像を保存しているディレクトリを入力。

②ファイル名の欄に、CSVファイルに掲載している画像名を貼り付けて、「開く」をクリック。

③次の画像を登録

という作業を実現したいと思っています。

----------記述してみたソース------------

IE.document.forms[0].elements[2].click() //<form>の中にある要素の<input type = "file"></input>をクリック、ダイアログを立ち上げる。

Up_ID = getid("アップロードするファイルの選択") //ダイアログのウィンドウIDを取得。

SCKEY(Up_ID, VK_TAB, VK_TAB,VK_TAB,VK_TAB,VK_TAB,VK_SPACE) //ディレクトリ情報を入力する欄にカーソルを移動。

SENDSTR(Up_ID,Pic_Dir) //画像アップロード元ディレクトリ情報を貼り付け。

SCKEY(Up_ID,VK_RETURN) //画像アップロード元ディレクトリに移動。

SCKEY(Up_ID,VK_SHIFT,VK_TAB,VK_TAB) //ファイル名を入力する欄にカーソルを移動。

SENDSTR(Up_ID,画像ファイル名) //CSVファイルから読み込んだファイル名を入力。

SCKEY(Up_ID,VK_RETURN) //「開く」をクリックして画像をアップロード。

----------記述してみたソース------------

上記のソース内容を記述してみましたが、動きませんでした。
ダイアログのウィンドウIDが取得できていないようです。

sleep()で待ち時間等を設定しましたが、動きませんでした。

GetId()の記述の仕方はあっていると思うのですが、どうしてウィンドウIDが取得できないのか分かりません。

このような場合、どのようなソースを記述すれば良いのでしょうか?ご教授よろしくお願いいたします。

使用ソフト:UWSC5.2.2.0
OS:Windows7
Internet Explorer:ヴァージョン11

A 回答 (1件)

Windowsが管理している一般的なウィンドウとして作られたダイアログでないとか?


Pro版でデバッガがあるなら、右上「Script」の「Info Under MouseCursor」で情報取得できるか確認とか。
無ければウィンドウ情報を表示するSpy++なんかのツールで確認とか。

uuSpyの詳細情報 : Vector ソフトを探す!
http://www.vector.co.jp/soft/winnt/util/se429436 …
MiniSpyの詳細情報 : Vector ソフトを探す!
http://www.vector.co.jp/soft/win95/prog/se291933 …


> ダイアログのウィンドウIDが取得できていないようです。

Up_IDに-1が入ってるのを確認したんでしょうか?
Up_IDの値を判定して、処理中断した方が良いです。


> このような場合、どのようなソースを記述すれば良いのでしょうか?

色々手はあります。
ダイアログの出る位置が固定なら、その前提でスクリーン座標をクリック、キー送信したり。
クラスIDが割り当てられているなら、そちらで探したり。
ダイアログの画像認識して入力欄やボタン操作したり。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます!

>Up_IDに-1が入ってるのを確認したんでしょうか?
>Up_IDの値を判定して、処理中断した方が良いです。
はい、-1の値が出ていました。
Up_ID = getid("アップロードするファイルの選択")
Print Up_ID
と記述してもすぐには表示されずに、
ダイアログを閉じてから少し経ってから-1と表示されました。
-1だから、"アップロードするファイルの選択"というタイトルのウィンドウはなかったよ、ということのようなので、IDが取得できてないということだと思います。

ダイアログが表示されている間にKBD(VK_TAB)等をさせてもカーソルは動きませんでした。
ダイアログ自体がアクティブではないので、sleep(2)として、その待機している間にダイアログをクリックしてアクティブにして、getid(GET_ACTIVE_WIN)でIDを取得してから、SCKEY(Up_ID,VK_TAB)等をしても動きませんでした。

以前に作成したツールで、
IE.navigate("http://shop.jp/images/1_000000000771.jpg")
KBD(VK_Ctrl,Down)
KBD(VK_S)
KBD(VK_Ctrl,UP)
gaz_id = getid("画像の保存")
sckey(gaz_id,VK_Tab,VK_Tab,VK_Tab,VK_Tab,VK_Tab,VK_Space)
というような処理をした時は、ダイアログのウィンドウIDは取得できたので、同じようにやったらいいのかなと思っていたら違っていたようです。

アップロードの時に出てくるダイアログのクラスIDが「#32770"」なのかなと思ってるのですが、どう処理したらいいのか手詰まりな状態です。

http://canal22.org/?s=%E3%82%A2%E3%83%83%E3%83%9 …
↑のやり方をアレンジしたら出来るのかなと思ったのですが、
<input type = "file"></input>にnameが無いので、実現不可能なのかなと・・・

ダイアログが出ている状態でPrintやMsgBoxが表示でき ないので、違うやり方じゃないとムリなのでしょうか。。

お礼日時:2016/09/27 01:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!