• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:uwsc webページ内のテキストボックス)

uwscでwebページ内のテキストボックスにカーソルを置く方法

このQ&Aのポイント
  • uwscを使ってwebページ内の検索などのテキストボックスにカーソルを置く方法を教えてください。
  • 日報システム(html)の日付テキストボックスで値を入力しても元に戻ってしまう問題について、解決方法を教えてください。
  • KBDで日付を入力しているが、テキストボックスを直接指定して値を入力する方法があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

たびたび大変失礼をしました。 エレメント名を調査する方法が間違いでした。 前に紹介したスクリプトはオブジェクトへのアクセス方法でした。 以下の方法が原始的ですが、フォーム内のエレメント名を調べる方法を推奨します。 そもそも、テキストボックスはフォームの中に存在する訳なので、フォームを指定してあげて、その中のテキストボックスを全て表示すれば良い。 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関数を使って、直接入力する。 終了です。

donkun2004
質問者

お礼

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

その他の回答 (2)

回答No.2

すいません。補足します。 尚、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("終了です。)

回答No.1

私も同じ内容で従前迷ってました。 IESETDATAを使って解決させました。 構文は、UWSC本体のヘルプに出てます。 エレメント名の解析スクリプトは、たしか http://siromasa.xxxxxxxx.jp/Sample/index.html で拾いました。 2010/12/03 [Module] Windowアイテム・オブジェクト・イメージ・スクリプト取得 ⇒ Module_GetsDX2.uws が其れです。非常に優秀な方が作られたと思っております。 このスクリプトを使用すると、或る程度の解析が出来るので、非常に優れたスクリプトだと思います。

関連するQ&A

専門家に質問してみよう