忍者ブログ

Home

溺れる者はUWSCを掴め!

[PR]

  • 2025-01-23 (Thu)
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

  • Comments (Close):

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"に変更

 

以上で無事に動くようになると思います。

 

UWSCタグ一覧を予測変換候補に入れておくと便利

  • 2010-05-18 (Tue)
  • UWSC利用環境

UWSCでスクリプトを書くときに自分の場合普通のエディタで書いてる(TeraPad)。その時にATOKユーザーなら予測変換で出てくるようにしていると便利なので予測変換辞書に登録している。

使うときはCTRL+F9で入力方法が出てくるので半角英数固定(S)入力をチョイスしてスクリプトを作って行けばいい(ひらがなの時はひらがな(H)入力をチョイス)。

辞書登録が済んでいれば「G」と入力してTABキーを押してやれば「GETID」やら「GETTIME」やら変換候補で出てくるのでサクサクと記述していける。それと、記述中に使った変数も候補に出てくるのでミスも少なくていい。

と言うことで辞書登録するときに作成したテキストファイルが残ってたのでUPしておこうと思う。一応全部大文字になってるが自分の場合は頭だけ大文字にしてあとは小文字に変換した(スクリプト作って)、各自お好みで変えるといいと思う。

予測変換辞書の登録の方法はここでは説明しないので利用の場合はググるなりしてしください。
追記:重要なこと忘れてた、ATOKの入力・変換→確定履歴をファイルに保存に設定するのを忘れずに。

ダウンロード(UWSCtag.txt)

 

その他Meryとかであれば入力補完設定できるようなので(Mery-Tips集参照)補完用ファイルとして使うと良いと思われ。

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

Home

Search
Meta
Links
Feeds
PR
PR

Page Top