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

みなさんこんばんわ。

uwscを使ってwebページ内の検索などのテキストボックスにカーソルを置きたいのです。
KBDで文字を打ち込めるようにテキストボックスを編集状態にするにはどうすれば教えてください。

具体的には、
私の会社の日報システム(html)で日報を入れる日付テキストボックスがあるのですが、日付のテキストボックスだけvalueで値を入力しても元に戻ってしまうのです。html解析スクリプトで調べると、outerhtmlと書いてあり、何か動的に書き変わるしかけがあるようなのですがよくわかりません。しかたがないのでKBDで日付を入力しています。domというのでしょうか、ie.doc.elements(i).value="yyyy/mm/dd"のようにテキストボックスを指定して直接値を入力できればベストなのですが…

よろしくお願いします。

A 回答 (3件)

私も同じ内容で従前迷ってました。


IESETDATAを使って解決させました。
構文は、UWSC本体のヘルプに出てます。

エレメント名の解析スクリプトは、たしか
http://siromasa.xxxxxxxx.jp/Sample/index.html
で拾いました。

2010/12/03 [Module] Windowアイテム・オブジェクト・イメージ・スクリプト取得 ⇒ Module_GetsDX2.uws
が其れです。非常に優秀な方が作られたと思っております。
このスクリプトを使用すると、或る程度の解析が出来るので、非常に優れたスクリプトだと思います。
    • good
    • 1

すいません。

補足します。

尚、IEはバージョンによって、ウインドウ名が異なります。
ウインドウ名の取得プログラムも優秀な方が作られたプログラムを拝借して調べました。
私は”デスクトップ ウィンドウ クラス名 タイトル 取得 プログラム”と入力して検索しました。
直リンを貼るとNGっぽいので、ごめんなさい。

>何か動的に書き変わるしかけがあるようなのですがよくわかりません

蛇足がかなーり入ってますが、エクセルでセルA2から続くデータを、B2に入っているID等の番号で管理されたエレメントに入力する例文です。
これをこんな形で答えたのは、世の中のIEを用いて作られたアプリの大半は、IE上で生成されるフォームのテキストボックスに入力する事になってますが、困ったことに場合によってはフォーム上のテキストボックスの位置は座標がマチマチで、ダイレクトに入力する他なく、ダイレクトに入力する方法は、エレメントを知らなければ難しいからだと思ったからです。
が、嬉しい事にプログラマーの方々は殆どの場合、ID番号+エレメント名などの法則性を使っている為、これを逆手にとってエクセルのセルにIDを入れ、当該ID&エレメント名とすれば、解決できると思ったからです。(私はこれで解決させました。勿論、『エレメント名&ID&エレメント名』・『エレメント名&ID&日付』などもあります。
日付は
GETTIME()
TIME=G_TIME_YY4+"年"+G_TIME_MM2+"月"+G_TIME_DD2+"日"+G_TIME_HH2+"時"+G_TIME_NN2+"分"+G_TIME_SS2+"秒"
を使えばTIMEが現在の時間として取得処理出来るので、日報関係ならどうでしょうか?)

更に、動的部分がIE上に表示されている文章等を用いている法則性なら
SENDSTR(0,IE.document.body.innerTEXT)
SCKEY ( GETID("Microsoft Excel","XLMAIN",  0.1) ,  VK_CTRL, V)
として、クリップボード経由でエクセル上に表示されている文章を落としてしまうことも推奨します。
その上で、法則性の部分を抽出して下記の内容で処理したら如何でしょうか?


回数 = input("繰り返す回数を入力してください。")
FOR x = 1 to VAL(回数)
IE = GETACTIVEOLEOBJ("InternetExplorer.Application","●●●- Windows Internet Explorer")//指定したウィンド名のIEを制御→●●●は例です。
Excel=GETACTIVEOLEOBJ("Excel.Application")
val1=Excel.ActiveSheet.Cells(x+1,1).Value//エクセルのA2セルから下に掛けてフォームに入力したいデータを入れます。
val2=Excel.ActiveSheet.Cells(x+1,2).Value//動的法則性を把握して、B2のセルから下に掛けて管理されている法則のID等のデータを入れます。
val3=trim(val2)
bo1="▼▼▼"+val3//▼▼▼は例です。エレメント名を作ります。例えば、動的でIE上でエレメント名が都度異なる場合には、これが有効だと解りました。
print bo1
IESETDATA ( IE , val1, bo1 )
next
MSGBOX("終了です。)
    • good
    • 0

たびたび大変失礼をしました。


エレメント名を調査する方法が間違いでした。
前に紹介したスクリプトはオブジェクトへのアクセス方法でした。

以下の方法が原始的ですが、フォーム内のエレメント名を調べる方法を推奨します。

そもそも、テキストボックスはフォームの中に存在する訳なので、フォームを指定してあげて、その中のテキストボックスを全て表示すれば良い。

IEのウインドウ内のフォーム総数はIE.document.forms.lengthで求められます。

フォームの中のエレメント総数はIE.document.forms[番号].elements.lengthで求められます。

以下のスクリプトならIEで[番号]に指定されたフォーム番号のエレメント名が全て表示されます。
故に、フォーム番号を0から片っ端から入力して調査すれば、下のスクリプトでいずれ貴殿の探しているテキストボックスのエレメント名が解る筈です。
エラーで止まっても、UWSCに付属している小さなウインドウでエレメント名が出てくるので、これを使えばokです。
先ほど、佐川急便のフォームで試しました。エラーで止まりましたが、ウインドウのなかにエレメント名がばっちり残ってました。
但し、システム上でUWSCのアクセスを弾くなど、エレメント名を隠す加工がなされていれば、無理なのでごめんなさい。
ウインドウ名の入力は、前の答えのウインドウ名を調査するアプリを使って下さい。

//フォーム番号を0~いっぱい順序で入れて数回に分けて片っ端から調査して下さい。
UL1 = input("開いているウィンド名を入力")

IE = GETACTIVEOLEOBJ("InternetExplorer.Application",UL1)//指定したウィンド名のIEを制御
IE.visible=TRUE

REPEAT
SLEEP(0.1)
UNTIL !IE.BUSY AND IE.READYSTATE = 4

FBANGOU = input("要素数を調査したいフォーム番号を入力")

番号 = VAL(FBANGOU)
KOSUU = IE.document.forms[番号].elements.length
MSGBOX(KOSUU)

FOR x = 1 to VAL(KOSUU)
Ifb x > VAL(KOSUU) then
MSGBOX("終了")

EXITEXIT
endif

NAIYOU = IE.document.forms[番号].elements[x].name

print NAIYOU

next



追記:フォーム総数は、以下で求められます。
UL1 = input("開いているウィンド名を入力")
IE = GETACTIVEOLEOBJ("InternetExplorer.Application",UL1)
IE.visible=TRUE
REPEAT
SLEEP(0.1)
UNTIL !IE.BUSY AND IE.READYSTATE = 4
KOSUU = IE.document.forms.length
MSGBOX(KOSUU)


総括:わかりにくかったと思うので、私が実際に行った方法を最後に記します。
(1)調査したいIEのwebアプリの画面を開く。
(2)開いたIEのwebアプリの画面のフォーム総数をスクリプトを使って調べる。
(3)開いたIEのwebアプリの画面内に存在するフォームの数だけ、エレメント名の調査を行う。(例:フォーム数5と出たら5回。念のために0を含めた0から5を入力)
(4)エラーで出ても、めげずにprint関数を使ったUWSCのウインドウでエレメント名を拾う。
(5)エレメント名から法則性を推測する。
(6)法則性を理解したら、ID番号+エレメント名など入力するデータをエクセルで作成する。
(7)IESETDATA関数を使って、直接入力する。
終了です。
    • good
    • 0
この回答へのお礼

redcrow_TXさん、お返事が大変遅れてしまい申し訳ありませんでした。仕事上大事な試験があって、勉強漬けの日々を送っていました。遅れてごめんなさい。そして本当にありがとうございます。redcrow_TXさんのように、赤の他人のために親切に回答してくれる人が居るだけでうれしいです。説明の内容を試してみます。本当にありがとうございました。これからも困っている人を助けてあげられる人であってください。ありがとう。

お礼日時:2012/11/24 22:24

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