[ 掲示板に戻る ]

過去ログ閲覧モード

複数フレームがある場合の画像リンククリック / まろん
いつもお世話になっております。

縦に3分割されたホームページがあります。
そこにはボタンが設置してあり、
一番下(3つめ)の画像ボタンをクリックしたいと思っております。

----------------------------------------------------------------------
ie = createOLEobj("InternetExplorer.Application")
ie.visible = True
ie.navigate(サイトのURL)
//ここにwaitは入れてます。

IESETDATA(ie,"TESTID","Id")//値をセットする
sleep( 0.1 )

IESETDATA(ie,"TESTPASS","Pass")//値をセットする
sleep( 0.1 )

IESetData(ie,True,"TAG=IMG","image/menu/menu1.gif")//検索ボタン //wait

ここまではフレームが2つ?で
一番上のみで操作しているからか、上手く動作します。
検索ボタンをクリックした後は、フレームが3つになり、
一番下のフレームのボタンを押したいです。

<A href="TESTINDEX" target="_top"><IMG src="../../image/menu/MENU1.gif" alt="テストページ表示" border="0" align="absmiddle">

ソースは上記のようになっており、
IESetData(ie,True,"TAG=IMG","../../image/menu/MENU1.gif")
このように実行させてみましたが
エラーが出ることも無く素通り?しているみたいです。
(FUKIDASIでここは実行されていることを確認)

一番下のフレームを設定するには何か方法があるのでしょうか?
一番上 Title ヘッダ
真ん中 Title 本文
一番下 Title フッター

このようなタイトルになっていますが、これで判別等できるのでしょうか?

以上、よろしくお願い致します

No.1205 2015/04/30(Thu) 14:17:15

Re: 複数フレームがある場合の画像リンククリック / stuncloud
一旦操作したい対象のdocumentを取得する必要があります

footer = ie.document.frames.item("※フレームの名前").document
footer.querySelector("img[alt=<#DBL>テストページ表示<#DBL>]").click()

// ※フレームの名前 には操作対象frameタグのname属性の値を書いて下さい
// ie.document.frames.item(2) といった感じで0から始まるインデックス番号でもOKです

No.1207 2015/04/30(Thu) 15:40:18

Re: 複数フレームがある場合の画像リンククリック / まろん
stuncloudさん、ありがとうございます。
今まで何故かできなかったのですが、
IESetData(ie,True,"TAG=IMG","../../image/menu/MENU1.gif")
で動くようになりました。
…何故だかは分かりませんが、一旦このまま進めて行きます!
だめになったら教えて頂いた方法を使わせて頂きます!

ありがとうございました^^

No.1211 2015/04/30(Thu) 19:17:15
IE8からIE11にバージョンアップしてボタンが押せない / まさと
お世話になっております。

ずっとIE8で粘っていたのですが、最近IE8非対応のサイトも出てきたため、やむを得ずIE11に
バージョンアップしました。
単純な質問で大変恐縮なのですが、どうしてもログインのためのボタンが押せなく
なってしまいました。
お手数ですが、対応方法を教えて頂けないでしょうか?


////HTMLソース(必要なところだけ抜粋)////

doc.forms(0).elements(5).type :"submit"
ags("h1").item(0).innerText :"サインイン"

--- 通常ページ(非フレーム)の<button> ---
doc.all.tags("button").length :1
doc.all.tags("button").item(0).title :"サインイン (s)"
doc.all.tags("button").item(0).id :"sign-in-button"
doc.all.tags("button").item(0).type :"submit"
doc.all.tags("button").item(0).accesskey :"s"
doc.all.tags("button").item(0).tabindex :0


////UWSCソース////
DEF_DLL SendMessageA(Hwnd, Long, Long, Dword): bool: user32
CONST WM_ACTIVATE = $06

IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.visible = True
IE.navigate("http://XXXX.com")
IE.visible = True
REPEAT
sleep(0.5)
Until !IE.busy and IE.readyState=4
SendMessageA(ie.Hwnd, WM_ACTIVATE, 0, 0) // 更新直後に WM_ACTIVATEを送る事によりバックグランドでも操作可となる

IE.document.forms[0].username.value = "id" //ここは入力される
IE.document.forms[0].password.value = "pw" //ここは入力される
SLEEP(2)

//1回目
IE.document.all.tags("button").item(0).click
msgbox("押したよ1")

//2回目
IESetData(IE,True,"","innerText=サインイン", 2)
msgbox("押したよ2")

//3回目
inputs = IE.document.getElementsByTagName("button")
for j = 0 to inputs.length - 1
ifb inputs.item(j).type = "submit"
inputs.item(j).click
break
endif
next
msgbox("押したよ3")

No.1202 2015/04/30(Thu) 13:18:34

Re: IE8からIE11にバージョンアップしてボタンが押せない / stuncloud
click() // 括弧をつける
No.1203 2015/04/30(Thu) 13:48:17

Re: IE8からIE11にバージョンアップしてボタンが押せない / まさと
stuncloud様

ありがとうございました!!
できました。

今までIE8では動いていたんですけど・・・。

No.1206 2015/04/30(Thu) 14:28:05
POSACCで取得している情報がずれる? / まろん
WHILE !GETKEYSTATE(VK_ESC)//ESCで終了
IF !GETKEYSTATE(VK_Ctrl)//Ctrlで終了
TEST=POSACC(GETID(GET_ACTIVE_WIN), G_MOUSE_X, G_MOUSE_Y,ACC_DESCRIPTION or ACC_BACK) //ACC_DESCRIPTION 説明
FUKIDASI(TEST)
EndIf
WEND

このようにして、デスクトップ上のものなどの情報取得をしています。
IEを開いたときに情報取得してみたところ、
1cmくらい下のデータを取得していました。

IEは11です。
また、他のアプリでも1cmくらい下のデータを取得します。

Windows7 32bit、64bitで同症状です。
私のプログラムの組み方がおかしいのでしょうか?

以上、よろしくお願い致します。

No.1183 2015/04/27(Mon) 18:16:56

Re: POSACCで取得している情報がずれる? / umiumi
指定するのはクライアント座標
http://www.uwsc.info/sample.html#n30

No.1184 2015/04/28(Tue) 00:11:20

Re: POSACCで取得している情報がずれる? / まろん
umiumi様
ありがとうございます。
確認して、対策します!!

No.1197 2015/04/30(Thu) 10:28:07
UWSC起動中ショートカット「CTRL+W」不可 / Tonton
 UWSCをたいへん有難く活用させていただいております。

 UWSC511/503/502
 Windows 8.1 64bit
 IE11

 UWSCを起動したままで、手操作でアクティブ画面を閉じる 「CTRL+W」 がきかず、
 'UWSC'メニュー画面に対する、タスクトレーへの格納/取り出し の操作になっています。

 VISTA+IE9では正常にできていました。
 回避策がありましたらお願いします。

No.1190 2015/04/28(Tue) 21:30:52

Re: UWSC起動中ショートカット「CTRL+W」不可 / Tonton

  たいへん失礼しました。仕様でした。ヘルプを見て別のキーを割り当てました。

No.1196 2015/04/30(Thu) 06:26:52
空白の行(カンマ)を消したい / sen

空白の行(カンマ)→「,,,,,,,,,,,」を消したいのですが、うまく消す事が出来ません。
こういう時は、FDELLINEを使用するのはおかしいでしょうか?
宜しくお願い致します。


P空白行削除("b業者")

PROCEDURE P空白行削除(VAR 業者名)
id = fopen("D:\在庫表\工事一覧\csv\工事一覧_" + 業者名 + ".csv", F_READ or F_WRITE)
for i = 1 to fget(id, F_LINECOUNT) -1
ifB fget(id,i,1) = "" then
FDELLINE(id,i)
ENDIF
NEXT
fclose(id)
fend

得意先,届け先,機種,納品日,ユーザー名,メモ,受注番号,・,施工日,完了,,
a店,店入れ,b5,2015/1/13,今井様,,01/05-065,ck,5月に延期,,b業者,
,,,,,,,,,,,
,,,,,,,,,,,
,,,,,,,,,,,

No.1191 2015/04/29(Wed) 13:20:30

Re: 空白の行(カンマ)を消したい / stuncloud
削除したい行が連続していた場合にうまく消せない事があると思いますが、そういうことではないでしょうか?

csv---------
1,,消したい行
2,,消したい行
3,,消したい行
4,,消したい行
5,,消したい行
------------

fid = fopen("hoge.txt", F_READ or F_WRITE)
for i = 1 to fget(fid, F_LINECOUNT)
 if fget(fid, i, 2) = "" then
  fdelline(fid, i)
 endif
next
fclose(fid)

結果---------
2,,消したい行
4,,消したい行
-------------

1行目から順に処理していくと、削除した行の次の行が繰り上がってしまうので処理されなくなってしまいます
(上記例だと1行目を削除すると2行目が1行目になり、iが2のときに処理されるのが元々の3行目になってしまう)

こういった場合は最終行から1行目に向けてループ処理すると良いです
// for i = fget(fid, F_LINECOUNT) to 1 step -1

No.1192 2015/04/29(Wed) 13:52:30

Re: 空白の行(カンマ)を消したい / sen
うまくいきました。
つまらない事で、済みませんでした。_(._.)_

No.1195 2015/04/29(Wed) 16:48:40
fukidasiの前面表示が不安定 / Japanzer
// いつもuwscを使わせていただいていき、ありがとうございます。

// さて、ver.5.11でfukidasiの表示が時々前面になりません。
// ver.5.10では安定して前面になっていました。
// 
// ちなみにfukidasi()で一旦fukidasi()を終えて再表示させると安定するみたいですが、
// これだと少しちらつきがありますので、できればしたくありません。

// UWSC ver.5.11 Free
// Windows 7 64bit

mspaint=exec("mspaint")
fukidasi()
for i = 0 to 100
 fukidasi(i)
 sckey(MSpaint, vk_F11)
 sleep(1)
// fukidasi()
next
msgbox("終了")

No.1170 2015/04/25(Sat) 17:26:43

Re: fukidasiの前面表示が不安定 / umiumi
確認しました。
修正します。

No.1186 2015/04/28(Tue) 00:12:55

Re: fukidasiの前面表示が不安定 / Japanzer
修正してくださるとのこと、助かります。
No.1189 2015/04/28(Tue) 10:30:54
記述違いで文字列評価になる? / しろまさ
特に問題は無いのですがたまたま発見したので報告しておきます。

p = "C:\TemporaryForCompany\ShowList\◆【組織図】. 2013 .xls"
MsgBox("" + RePlace(p, "\", "") )
MsgBox(  + RePlace(p, "\", "") ) // 文字列評価?

No.1188 2015/04/28(Tue) 10:13:08
MsgBoxの最前面固定をしたい。 / しろまさ
win7pro uwsc511

更新履歴に特にアナウンスが無く(見落としてなければ)
ダイアログ関連が最前面固定でなくなったようですが、
切り換えは可能ですか?(以下は不可でした)

Thread MsgTopMost()
MsgBox(1)
Procedure MsgTopMost()
CtrlWin(GetID(, "TUmsgDlg_uwsc"), TOPMOST)
FEnd

No.1166 2015/04/24(Fri) 18:40:46

Re: MsgBoxの最前面固定をしたい。 / えあり
Win8 Pro 64Bit
Win7 Pro 32Bit
両方で確認しましたが、デフォルトは最前面のようです

そして、上記のスクリプトなのですが
TopMostメッセージを送る前にMsgBoxを出さないといけない気がします

こちらで試してみてください


Thread MsgTopMost()
MsgBox(1)

Procedure MsgTopMost()
Fukidasi("TopMost動作中")
 Repeat; Until GetID(, "TUmsgDlg_uwsc") // MsgBox出るまで待ってみる
 Repeat // TとNキーで最前面切り替え
  If GetKeyState(VK_T) Then CtrlWin(GetID(, "TUmsgDlg_uwsc"), TOPMOST)
  If GetKeyState(VK_N) Then CtrlWin(GetID(, "TUmsgDlg_uwsc"), NOTOPMOST)
  Sleep(0.1)
 Until GetID(, "TUmsgDlg_uwsc") < 0
FEnd

(TOPは直ちに実行されるがNONは別ウインドウを前面にしないと見かけ上は変化しません)

No.1167 2015/04/24(Fri) 20:38:26

Re: MsgBoxの最前面固定をしたい。 / routa
逆に最前面にならない条件があるのでしょうか?
私の所では必ず最前面固定になります。

No.1174 2015/04/27(Mon) 03:08:33

Re: MsgBoxの最前面固定をしたい。 / しろまさ
返信ありがとうございます。
えありさんのコードで最前面固定されました。
何が違うのだろうと調べたらFukidasiの有無でした。(以下のでTopMostされる)

> 逆に最前面にならない条件があるのでしょうか?
uwscのバージョン変更してから出るようになったのでてっきりそのせいかと思ってましたが、
この症状って私(の社内数十台)だけなのでしょうか? 他のみなさんいかがです?
(No.1170ではFukidasiで似たような症状が出ているようですね。)

Thread MsgTopMost()
MsgBox(1)
Procedure MsgTopMost()
  Fukidasi("TopMost動作中")
  CtrlWin(GetID(, "TUmsgDlg_uwsc"), TOPMOST)
FEnd

No.1176 2015/04/27(Mon) 09:14:12

Re: MsgBoxの最前面固定をしたい。 / えあり
>Thread MsgTopMost()
>MsgBox(1)
>Procedure MsgTopMost()
>  Fukidasi("TopMost動作中")

→→→  Repeat; Until GetID(, "TUmsgDlg_uwsc") ←←←
>  CtrlWin(GetID(, "TUmsgDlg_uwsc"), TOPMOST)
>FEnd


だから
MsgBoxを
待ちなさいと
あれ程

No.1179 2015/04/27(Mon) 11:08:32

Re: MsgBoxの最前面固定をしたい。 / しき
当方の環境でもmsgboxは出すだけで常に最前面です
win7pro 64bit uwsc5.11
uwsc.iniを削除してみては

s = kindofos() +" "+ kindofos(true) +" "+ get_uwsc_ver
//print s
msgbox(s) //22 True 5.11

No.1180 2015/04/27(Mon) 15:03:17

Re: MsgBoxの最前面固定をしたい。 / しろまさ
えありさん、そこは問題じゃないと答えたつもりだったんですが・・
簡単に言えば
MsgBox(1) は 最前面固定 されず
Fukidasi(1); MsgBox(1) は 最前面固定 していた訳です。
(win7pro uwsc501free 症状無し win7pro uwsc511free 症状有り)

しきさん、ありがとうございます。ini削除で原因がつかめました。
結論から言えば ini に NotTaskBar=1 を入れた場合にこの症状が出るようです。

umiumiさん、これも仕様ですか?

(ちなみにFukidasiとMsgBoxを同時に出すと、Fukidasiは背面移動可能になるようですね)

No.1181 2015/04/27(Mon) 16:43:35

Re: MsgBoxの最前面固定をしたい。 / umiumi
確認しました。
修正します。

No.1185 2015/04/28(Tue) 00:12:30

Re: MsgBoxの最前面固定をしたい。 / しろまさ
umiumiさん、ありがとうございます。

みなさんも追加検証、ありがとうございました。

No.1187 2015/04/28(Tue) 09:18:26
クリックする前の画面キャプチャーを撮りたい / まろん
Windows7 64bit IE11
クリックする前の画面キャプチャーを撮りたいと思ってます。

クリックされることを判定し、
Sleep(1) を実行。
画面キャプチャーを撮った後に
クリック操作を実行。

ということはできますか?

回答お願い致します。

No.1163 2015/04/23(Thu) 16:54:18

Re: クリックする前の画面キャプチャーを撮りたい / 森
表示するのが自分のサイトでHTMLソースを書き換えられるのであれば、
クリックした際の命令の前に、画面キャプチャの命令を追加するだけです。
UWSCは必要ありません。

自分のサイトじゃない場合は、UWSCを使ってHTMLソースの改変をします。

処理の流れはこんな感じ
1.GETACTIVEOLEOBJ でIEのCOMオブジェクトを取得
2.IEGETSRC で、クリック対象のリンクやボタン等のソースを取得
3.画面キャプチャの命令を追加
4.IESETSRC でソースを書換

画面キャプチャの方法は「javascript スクリーンショット 保存」でググって下さい。
javascriptライブラリを読み込ませる場合や、タグを追加したりする場合は、
さらに追加で IESETSRC して下さい。

どちらかというと、UWSCよりも、javascript、DOM、HTML の知識が必要となります。
まずは自分でシンプルなテストサイトを作ってみるのがいいでしょう。

No.1168 2015/04/25(Sat) 11:09:05

Re: クリックする前の画面キャプチャーを撮りたい / まろん
返信遅れて申し訳ありません。

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

自分のサイトではなく、また、
URL?やソース等見方が分からない状況です。

教えて頂いたとおり、ググってみようと思います^^

No.1182 2015/04/27(Mon) 16:53:57
数値の 0.00009 を文字に / しき
0.00009 をmsgbox等で表示すると、"9E-5" になります。
これを 文字の "0.00009" に変換できませんか
下の例の最後で "z = 0.00009" という文字列を作りたい

z = 0.00009
print z           //9E-5
print trim(z)        //9E-5
print vartype(z, var_ustr) //9E-5
print vartype(z, var_astr) //9E-5

s = "z = "+ z
msgbox(s) //z = 9E-5

No.1164 2015/04/24(Fri) 18:06:17

Re: 数値の 0.00009 を文字に / stuncloud
"z = " + format(z, 7, 5) // z = 0.00009
桁数がはっきりわかってる場合はこれで良さそうです
ですが、小数の桁数を取得する方法が思いつけませんでした…

あとは苦肉の策になりますが、
format(z, 20, 20) // 0.000090000000000000
と桁数を多めにとっておいて、右端から連続している0を切り落とす…とかですかねぇ

No.1165 2015/04/24(Fri) 18:35:53

Re: 数値の 0.00009 を文字に / しき
返信ありがとうございます。
format と VBScript(CStr) で試してみました

msgbox(format(0.1, 20, 20))   //0.100000000000000006
msgbox(format(0.1, 19, 19))   //0.10000000000000000
msgbox(format(123.1, 20, 20)) //123.0999999999999940
msgbox(format(123.1, 19, 19)) //123.099999999999994

dim s = ""
dim i
for i=5 to -17 step -1
  dim z = power(10, i)
  //z = z + 1
  
  dim s1 = z + ""
  dim s2 = sub_toStr_u(z)
  dim s3 = sub_toStr_vbs(z)
  
  dim s_line = s1 +"<#tab>"+ s2 +"<#tab>"+ s3
  
  print s_line
  s = s + s_line +"<#cr>"
next
msgbox(s)

function sub_toStr_u(v)
  //右端から連続する0を削除
  public Obj_reg0 = nothing
  ifb (nothing = Obj_reg0) then
    Obj_reg0 = CreateOleObj("VBScript.RegExp")
    Obj_reg0.Pattern = "\.?0+$"
  endif
  
  result = Obj_reg0.Replace(format(v, 19, 19), "")
fend

function sub_toStr_vbs(v)
  public Obj_ScriptControl = nothing
  ifb (nothing = Obj_ScriptControl) then
    Obj_ScriptControl = CreateOleObj("ScriptControl")
    Obj_ScriptControl.Language = "VBScript"
    Obj_ScriptControl.AddCode("function toStr(v): toStr=CStr(v): end function")
  endif
  
  result = Obj_ScriptControl.CodeObject.toStr(v)
fend


//結果
100000  100000  100000
10000  10000  10000
1000  1000  1000
100  100  100
10  10  10
1  1  1
0.1  0.1  0.1
0.01  0.01  0.01
0.001  0.001  0.001
0.0001  0.0001  0.0001
1E-5  0.00001  0.00001
1E-6  0.000001  0.000001
1E-7  0.0000001  0.0000001
1E-8  0.00000001  0.00000001
1E-9  0.000000001  0.000000001
1E-10  0.0000000001  0.0000000001
1E-11  0.00000000001  0.00000000001
1E-12  0.000000000001  0.000000000001
1E-13  0.0000000000001  0.0000000000001
1E-14  0.00000000000001  0.00000000000001
1E-15  0.000000000000001  0.000000000000001
1E-16  0.0000000000000001  1E-16
1E-17  0.00000000000000001  1E-17


formatもうまくない場合があるようです。
今回扱うのは、少数以下5桁、-1000 < z < 1000 の範囲
ですので、VBScriptで文字に変換することにします

No.1172 2015/04/25(Sat) 23:10:11

Re: 数値の 0.00009 を文字に / しゅん
おっと、遅かったですね。
までも、私の考えもそのまま投稿しようかと思います。
ご参考まで。(1E-16あたりからはFORMATもダメなんですか、、、)


単純に小数だけが問題なら、stuncloudさん方式が良いかと思います。
右端を切り落とすのは、正規表現がおすすめですが、小細工も可能です。

z = 0.00009
WITH CREATEOLEOBJ("VBScript.RegExp")
.Pattern = "0*$"
MSGBOX(.Replace(FORMAT(z, 20, 20), ""))
ENDWITH

MSGBOX(COPY(REPLACE(TRIM(REPLACE("!"+FORMAT(z, 20, 20), "0", " ")), " ", "0"), 2))


しかし、一律適用した場合、整数部があると有効桁数の問題が生じる可能性があります。
整数を視野に入れるなら、一旦なんらかの方法で文字列に変換し、Eを含むかで処理をわけるのも手です。
また、多めで必要になる桁数は、「9E-5」といった形式から取り出せるかと思います。
doubuleの有効桁数が15桁なので、「9E-5」なら前ゼロ5桁と小数点と有効桁数あわせて、、、21桁ですね。
-5を取り出すなら、

z = 0.00009
WITH CREATEOLEOBJ("VBScript.RegExp")
  .Pattern = "E(-?\d+)"
  ms = .Execute("" + z)
  IFB ms.Count > 0 THEN
    MSGBOX("桁数は" + VAL(ms.Item(0).SubMatches(0)))
  ELSE
    // そのままでOK
    MSGBOX(z)
  ENDIF
ENDWITH

No.1173 2015/04/25(Sat) 23:13:35

Re: 数値の 0.00009 を文字に / stuncloud
> formatもうまくない場合があるようです。
なるほど…
ちゃんと検証しておくべきでした、申し訳ない!

No.1178 2015/04/27(Mon) 11:04:50
全1170件 [ ページ : << 1 ... 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 ... 117 >> ]