Home > 実用スクリプト
実用スクリプト Archive
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