忍者ブログ

Home > 実用スクリプト

実用スクリプト Archive

[PR]

  • 2025-02-02 (Sun)
×

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

  • Comments (Close):
  • TrackBack (Close):

IE8でファイルのアップロード

  • 2011-11-19 (Sat)
  • 実用スクリプト

IE8以降からはセキュリティの関係でファイルアップロードのファイル指定をDOM操作等で出来なくなっている。

こういうやつ→ 

ファイル指定をするには参照ボタンを押してダイアログ経由からUPするわけだが今後も汎用的につかうと思われるのでユーザー関数を作成しておくといい。

今回はそのサンプル

//------------------------------------------
//動作環境 XPsp3,IE8で確認
//---------------<sample>-------------------

file="C:\001.Jpg"//アップするファイルのフルパス
name="upfile"    //参照ボタンのnameが"upfile"の場合
IEupload(IE,name,file)

//---------------</sample>-------------------



//--ダイアログ用スレッド起動&参照ボタンクリック
Procedure IEupload(IE,name,file)
   Thread FileupDialog(file)
   doc=IE.document
   COM_ERR_IGN
   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=name
            doc.forms(i).elements(ii).click()
            Break 2
         endif
      next
   next
   COM_ERR_RET
Fend
//--ダイアログファイル選択&ボタンクリック
Procedure FileupDialog(file)
   id = Getid("アップロードするファイルの選択","#32770",-1)
   sleep(1)
   Ctrlwin(id,ACTIVATE)
   Sendstr(id,file,1,True)
   Clkitem(id,"開く(O)")
Fend

今見ているページのタイトルとURLをTweenに送るUWSCスクリプト

  • 2010-05-26 (Wed)
  • 実用スクリプト
お知らせ
5/27以前のバージョンを利用された方はTweenのクラス名が固有だったみたいで全く動かなかった人もいると思われます。 現在のバージョンに入替えて再度お試しください。その他何かあれば@kengo9999qまで

はじめに

TwitterクライアントにTweenを使ってる人用のスクリプトです。
IE/sleipnir/FireFox/Chromeに対応してます。

機能

今現在見ているページのURLとタイトルをTweenの入力欄に転送します。

設定・使い方

・mybrの所の数字を変えて自分が利用してるブラウザを選びます。
・retの所の数字を変えると転送後送信するかどうか選べます(デフォルト送信しない)
・タスクトレーに入ってる状態の場合はタスクトレーからTweenが出てきます。
 バックグラウンドでの使用はできません。(出さないと書込めない為)
・insの所の数字を変えると挿入するか置換える(デフォルト)か選択できます。挿入の場合は若干時間が掛ります。
・hed・mid・footの部分にコメントを入れるとTween転送時に反映されます。
 [hed][サイトタイトル][mid][サイトURL][foot]の順

参考例
「見てるなう 溺れる者はUWSCを掴め! - http://pointmania.blog.shinobi.jp/ このサイト」の場合
hed="見てるなう "、mid=" - "、foot=" このサイト"という風に

動作確認

スクリプトはIE7/sleipnir2.9.3/FireFox3.6.3/chrome4.1及び5.0で確認してます。

その他

Twitter関連なのでUWSC使いじゃない人も来るみたいなので掻摘んでUWSCの使い方。
・UWSCをUWSC:ダウンロードからダウンロード&解凍し適当な場所へ(フリー版で構いません)
・このスクリプトをメモ帳等で保存して拡張子を「.uws」に変更、又は下記ダウンロードからダウンロード。
・そのスクリプトファイルをダブルクリックで開くとプログラムをどのソフトで開くか聞かれるので参照ボタンを押して解凍して保存したUWSC.exeに関連付
これだけです。
※実際に使うときはUWSC付属機能のランチャー(ランチメニュー)やOrchisなどのランチャーから使います。(ショートカットを作ってタスクバーのランチャーの所にドロップしておくのも手です)

ダウンロード

liween0.52(uws)(右クリックから保存)

//--liween Ver0.52--
//
//--ユーザー設定(環境に合わせて設定してください)---
mybr=1    //IE:0 sleipnir:1 FireFox:2 chrome:3
ret=0     //転送後すぐに送信 する:1 しない:0(デフォルト)
ins=1     //置換え形式:0 挿入形式:1
hed=""    //ヘッダー部分のコメント。例:"今見てる "
mid=""     //タイトルとURLの間のコメント(デフォルトは半角スペース)。
foot=""   //フッター部分のコメント。
//----------------------------------------------------
dim tbnames,tbc
ifb mybr=0
	id=Getid("Internet Explorer","IEFrame",5)
	ifb id>-1
		URL=Getstr(id,2,STR_ACC_EDIT)
		stt=Status(id,ST_TITLE)
		title=Copy(stt,1,Pos(" - ",stt,1,-1))
	else
		Msgbox("Internet Explorerが立上がってないようです")
		ExitExit
	endif
elseif mybr=1
	SP=CreateOleObj("Sleipnir.API") 
	ifb SP>-1
		url=SP.URL
		title=SP.GetDocumentObject(SP.GetDocumentID(SP.ActiveIndex)).title
	else
		Msgbox("Sleipnirが立上がってないようです")
		ExitExit
	endif
elseif mybr=2
	id=Getid("Mozilla Firefox","MozillaUIWindowClass",5)
	ifb id>-1
		URL=Getstr(id,1,STR_ACC_EDIT)
		stt=Status(id,ST_TITLE)
		title=Copy(stt,1,pos(" - ",stt,1,-1))
	else
		Msgbox("Firefoxが立上がってないようです")
		ExitExit
	endif
elseif mybr=3
	id=Getid("Google Chrome","Chrome_")
	ifb id>-1
		Getitem(id,ITM_EDIT,-1)
		URL=ALL_ITEM_LIST[0]
		stt=Status(id,ST_TITLE)
		title=Copy(stt,1,pos(" - ",stt,1,-1))
	else
		Msgbox("Chromeが立上がってないようです")
		ExitExit
	endif
endif
id=Getid("Tween","WindowsForms10.Window.8")
ifb id=-1
	Msgbox("Tweenが立上がってないようです")
	ExitExit
else
	Getitem(id,ITM_BTN)
	ifb ALL_ITEM_LIST[0]="Search"
		tbc=1
	endif
endif
ifb Status(id,ST_VISIBLE)=0
	Ctrlwin(id,NORMAL)
endif
if mid="" then mid=" "
str=hed+title+mid+url+foot
ifb ins=0
Sendstr(id,str,1+tbc,1)
elseif ins=1
Sendstr(id,str,1+tbc)
endif
ifb ret
	Sckey(id,VK_RETURN)
endif
Ctrlwin(id,TOPMOST)
Ctrlwin(id,NOTOPMOST)

変更履歴

追記5/26:早速もって修正CTRLWIN(id,SHOW)から表示状態を確認しCTRLWIN(id,NORMAL)にするに変更。それと検索タブで実行すると検索ワードの所に入ってしまうのでclkitem(id,"Recent",CLK_TAB)を追加
chromeでも使えるようにした。転送後アクティブになるように変更した。
追記5/27(ver0.4.0):@gomesun様からご連絡頂いて、Twitterのクラス名の末尾がどうも固有みたいなので
53行目:id=getid("Tween","WindowsForms10.Window.8.app.*****")の所の.app以下を削除した。(※GETIDのクラス名は前方一致での部分指定でOKです)
バージョン表記を入れた
追記5/27その2(ver0 4.1):挿入という形で入れられるようにした。※弊害として転送処理に時間若干掛る。
最大化時アクティブにならない問題を修正
追記5/28(ver.4.2):chromeにおいてver4.××とver5.××ではクラス名が違うので共通部分のみで認識するようにした。
追記5/28その2(ver0.5.0):投稿時のコメントを入れられるようにした。 ブラウザやTweenが起動してない場合の例外処理を追加した。
追記5/28その3(ver0.5.1):0.5.0up時にFireFoxの例外処理に誤りがあったのを修正
追記5/29(ver0.5.2):転送後、Resentタブに強制的になる問題を修正した(サーチタブでのエラー回避手段としてResentタブを押す方式からサーチボタンの有無でタブコントロールを変動させる方式に変更)。問題が無ければこれで最終更新の予定

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