溺れる者はUWSCを掴め!
MeryからUWSCを起動
- 2010-05-20 (Thu)
- UWSC利用環境
ちょっとMery's (mEditorの後継)もいいなと思って使ってみた。
Meryの公式ページにあるファイル名を引数にしてアプリ起動というマクロでTeraPad同様にエディタから起動できるみたいなので使って見たのだけども、うまく動かないので若干修正してみたら動くようになった。ポイントだけ後続の参考の為に書いておこう
まず、ここに実行ファイルへのパスを記述の所はUWSC.exeのフルパスを記入し、フルパスの中の¥を¥¥に変更(¥は半角英数)
25行目と41行目の
var cmdline = ""+s+""を
var cmdline = "¥""+s+"¥""に変更
※¥は半角英数(ブログの都合上全角になってます)
37行目の".hsp"となってるのを".uws"に変更
以上で無事に動くようになると思います。
- Comments: 1
UWSCタグ一覧を予測変換候補に入れておくと便利
- 2010-05-18 (Tue)
- UWSC利用環境
UWSCでスクリプトを書くときに自分の場合普通のエディタで書いてる(TeraPad)。その時にATOKユーザーなら予測変換で出てくるようにしていると便利なので予測変換辞書に登録している。
使うときはCTRL+F9で入力方法が出てくるので半角英数固定(S)入力をチョイスしてスクリプトを作って行けばいい(ひらがなの時はひらがな(H)入力をチョイス)。
辞書登録が済んでいれば「G」と入力してTABキーを押してやれば「GETID」やら「GETTIME」やら変換候補で出てくるのでサクサクと記述していける。それと、記述中に使った変数も候補に出てくるのでミスも少なくていい。
と言うことで辞書登録するときに作成したテキストファイルが残ってたのでUPしておこうと思う。一応全部大文字になってるが自分の場合は頭だけ大文字にしてあとは小文字に変換した(スクリプト作って)、各自お好みで変えるといいと思う。
予測変換辞書の登録の方法はここでは説明しないので利用の場合はググるなりしてしください。
追記:重要なこと忘れてた、ATOKの入力・変換→確定履歴をファイルに保存に設定するのを忘れずに。
その他Meryとかであれば入力補完設定できるようなので(Mery-Tips集参照)補完用ファイルとして使うと良いと思われ。
- Comments: 0
nameがsubmitだとsubmit出来ない件
- 2010-05-14 (Fri)
- 実用スクリプト
FC2で先日UPした自動ログインスクリプトを作成しようと思ったら
完成した物がログインできない。
生成した物の中身を見ても誤りはなさげ
で調べてみたら
doc.forms(0).submit()
でsubmitきない場合もあるみたいね。
理由はnameタグの中身がsubmitだとそっちを優先してしまうみたい。
でそういうやつは
doc.forms(0).submit.click()
とかにしなければ通らないと言うことで
ifb !(doc.forms(get_form).elements(i).name="")
fput(fid,"doc.forms("+get_form+")."+doc.forms(get_form).elements(i).name+"clicke()")
else
fput(fid,"doc.forms("+get_form+").submit()")
endif
という風に変えてみた。
なんかUPしてから毎日修正してる気が・・
よく運用してからUPするべきであった。
15日追記:ゴミが2箇所残ってたので削除しましたorz
修正版
//---ユーザー設定(ブラウザを選択してください)
Public brow=1 //1:IE 2:Sleipnir
scr=1 //1:スクランブルを掛ける 2:掛けない
del_org=1 //1:orgファイル削除 2:削除しない
//---初期設定
ifb brow=1
browname="IE"
else
browname="pnir"
endif
dim get_form,submit_btn_flag,img_btn_flag,script_btn_flag,imgsrc[250]
Public aelem
//---ブラウザ別オブジェクト
ifb brow=2
pnir=CreateOleObj("Sleipnir.API")
IE=pnir.GetWebBrowserObject((pnir.GetDocumentID(pnir.ActiveIndex)))
ACW(HNDTOID(pnir.Handle))
else
IE=GetActiveOLEObj("InternetExplorer.Application")
ACW(HNDTOID(IE.hwnd))
endif
doc=IE.document
//---生成ファイル設定
fileLogIe=GET_CUR_DIR+"\"+repStrFNam(IE.LocationName)+browname+"_login"+".uws"
//---スクリプト生成
fid=fopen(fileLogIe,F_WRITE)
ifb brow=2 //ログインページオープンpnirの場合
fput(fid,temp1+pnir.URL+"<#DBL>,true)")
fput(fid,"BusyWaitpnir(pnir)")
fput(fid,"doc=pnir.GetWebBrowserObject((pnir.GetDocumentID(pnir.ActiveIndex))).document")
else //ログインページオープンIEの場合
fput(fid,temp0+IE.LocationURL+"<#DBL>)")
fput(fid,"BusyWait(IE)")
fput(fid,"doc=IE.document")
endif
fput(fid,"COM_ERR_IGN")
//---ID&pass挿入部分生成
COM_ERR_IGN
for i=0 to doc.forms.length-1
ifb doc.forms(i).method="post"
for ii=0 to doc.forms(i).elements.length-1
ifb (doc.forms(i).elements(ii).type="text" or doc.forms(i).elements(ii).type="password") and !(doc.forms(i).elements(ii).value="")
fput(fid,temp2+doc.forms(i).elements(ii).name+"<#DBL>")
fput(fid,temp3+doc.forms(i).elements(ii).value+"<#DBL>")
fput(fid,temp4)
get_form=i
endif
next
endif
ifb !(get_form="")
break
endif
next
COM_ERR_RET
ifb get_form=""
Msgbox("ID又はpassが見当りません")
exitexit
endif
//---ログイン部分生成(submitボタンがある場合)
for i=1 to doc.forms(get_form).elements.length-1
ifb doc.forms(get_form).elements(i).type="submit"
ifb !(doc.forms(get_form).elements(i).name="")
fput(fid,"doc.forms("+get_form+")."+doc.forms(get_form).elements(i).name+".click()")
else
fput(fid,"doc.forms("+get_form+").submit()")
endif
ifb brow=1
fput(fid,temp5)
else
fput(fid,temp6)
endif
submit_btn_flag=1
endif
next
ifb submit_btn_flag=0 //submitボタンが無い場合(画像ボタン又はjavascriptボタン探索)
//---画像ボタンのソースをimgsrcに格納
inplength=doc.all.tags("input").length
for i=0 to inplength-1
ifb doc.all.tags("input").item(i).type="image"
imgsrc[i]=doc.all.tags("input").item(i).src
img_btn_flag=1
endif
next
//---ボタンにonclikイベント生成
ifb img_btn_flag=1 //画像ボタンの場合のイベント
for i=0 to doc.all.tags("input").length-1
ifb doc.all.tags("input").item(i).type="image"
OleEvent(doc.all.tags("input").item(i), "HTMLButtonElementEvents", "onclick", "Eventsrc")
endif
Next
else //javascriptボタンの場合イベント
for i=0 to doc.all.tags("a").length-1
ifb pos("javascript",doc.all.tags("a").item(i).outerHTML)>0
OleEvent(doc.all.tags("a").item(i), "HTMLAnchorEvents", "onclick", "Eventsrc")
endif
Next
endif
//---onclikイベント発生待ち
While aelem=""
Fukidasi("調査しますログインボタンを押してください")
wend
//---クリックされたボタンのソースの照合
ifb img_btn_flag=1 //画像ボタンの場合
for i=0 to inplength-1
ifb imgsrc[i]=aelem.src //一致itemでスクリプト生成
fput(fid,"nowsrc=doc.all.tags(<#DBL>input<#DBL>).item("+i+").src")
fput(fid,"if !(nowsrc=<#DBL>"+aelem.src+"<#DBL>) then exitexit")
fput(fid,"doc.all.tags(<#DBL>input<#DBL>).item("+i+").click()")
ifb brow=1
fput(fid,temp5)
else
fput(fid,temp6)
endif
break
endif
Next
else //javascriptボタンの場合
for i=0 to doc.all.tags("a").length-1
ifb doc.all.tags("a").item(i).outerHTML=aelem.outerHTML //一致itemでスクリプト生成
fput(fid,"doc.all.tags(<#DBL>a<#DBL>).item("+i+").click()")
ifb brow=1
fput(fid,temp5)
else
fput(fid,temp6)
endif
script_btn_flag=1
break
endif
Next
endif
endif
//---作成出来なかった場合
ifb submit_btn_flag=0 and img_btn_flag=0 and script_btn_flag=0
Msgbox("ログインボタンが見当りません。<#CR>作成を中止します。")
exitexit
endif
//---生成ファイルをcloseして作成完了
fclose(fid)
Fukidasi("作成完了")
Sleep(2)
//--スクランブル処理
ifb scr=1
UPath = GET_UWSC_DIR + "\uwsc.exe "
exec(UPath + "/a <#dbl>" + fileLogIe + "<#dbl>")
ifb del_org=1 //オリジナルファイル削除
del_file = GET_CUR_DIR+"\"+"*_login.org"
DosCmd("del <#DBL>" + del_file + "<#DBL>")
endif
endif
//---テンプレ
TEXTBLOCK temp0
IE=GetActiveOLEObj("InternetExplorer.Application")
IE.Navigate("
ENDTEXTBLOCK
TEXTBLOCK temp1
pnir=CreateOleObj("Sleipnir.API")
pnir.NewWindow("
ENDTEXTBLOCK
TEXTBLOCK temp2
for i=0 to doc.forms.length-1
for ii=0 to doc.forms(i).elements.length-1
ifb doc.forms(i).elements(ii).name="
ENDTEXTBLOCK
TEXTBLOCK temp3
doc.forms(i).elements(ii).value="
ENDTEXTBLOCK
TEXTBLOCK temp4
endif
next
next
ENDTEXTBLOCK
TEXTBLOCK temp5
COM_ERR_RET
//------IE用wait処理
Procedure BusyWait(ie)
Sleep(0.5) // Wait
Const TIME_OUT = 90
tm = Gettime()
repeat
Sleep(0.2)
ifb Gettime() - tm > TIME_OUT
MsgBox("Time Out:BusyWait")
ExitExit
endif
until (! ie.busy) and (ie.readyState=4)
Sleep(0.5)
Fend
ENDTEXTBLOCK
TEXTBLOCK temp6
COM_ERR_RET
//------pnir用wait処理
Procedure BusyWaitpnir(pnir)
Sleep(0.5) // Wait
Const TIME_OUT = 90
tm = Gettime()
pid=pnir.GetDocumentID(pnir.ActiveIndex)
repeat
Sleep(0.2)
ifb Gettime() - tm > TIME_OUT
MsgBox("Time Out:BusyWait")
ExitExit
endif
until (! pnir.IsBusy(pid))
Sleep(0.5)
Fend
ENDTEXTBLOCK
//------ファイル名に使えない文字列の変換
//眠たい詩人様のHTMLStarkNaked.uwsから流用させてもらいました
//http://nem.symphonic-net.com/uwsct/0610uwsct.html
function repStrFNam(string1)
dim aryChr[]="/","[","]","\",":",";","*","?","#","<#CR>","<#DBL>","<#TAB>","<",">","|"," "," "
dim i
for i=0 to length(aryChr)-1
string1=chgmoj(trim(string1),aryChr[i],"_")
next
string1=chgmoj(chgmoj(chgmoj(string1,"__","_"),"_-","-"),"-_","-")
result=string1
fend
//------onclikイベント
Procedure Eventsrc
ifb brow=2
pnir=CreateOleObj("Sleipnir.API")
IE=pnir.GetWebBrowserObject((pnir.GetDocumentID(pnir.ActiveIndex)))
else
IE=GetactiveOLEObj("InternetExplorer.Application")
endif
doc=IE.document
aelem=doc.activeElement
Fend
- Comments: 0
- Search
- Meta
- Links
- Feeds
- PR
- PR