デスクトップ環境をperl便利にする!その3:クリップボードをHTMLデコード [perl]
perlでクリップボードのテキストをHTMLデコードし、結果をクリップボードに設定する。
#windows端末で、perl環境が整っていることが前提ですので、ご注意を!
ソースは以下。
上のコピペして、適当なところにclipboard_html_decode.plという名前で保存する。
保存したファイルのショートカットをデスクトップに作成し、名前を「clipboardをhtmlデコードする。」
に変える。使い方は以下。
htmlデコードしたいテキストをマウスで選択し、Ctrl+cでコピー。
「clipboardをhtmlデコードする。」ショートカットをダブルクリック。
Ctrl+vで貼り付け。
#windows端末で、perl環境が整っていることが前提ですので、ご注意を!
ソースは以下。
#!/usr/bin/perl #---------------------------------------- # [Windows用] # クリップボードのデータをHTMLデコードし、 # 結果をクリップボードに設定する。 use utf8; use Encode; use Win32::Clipboard; use HTML::Entities; my $clip = Win32::Clipboard(); exit 1 unless $clip->IsText(); # テキスト以外なら終了する my $text = decode("cp932",$clip->GetText()); # テキスト取得 $text=HTML::Entities::decode_entities($text); $clip->Set(encode("cp932",$text)); # テキスト設定 exit; #----------------------------------------
上のコピペして、適当なところにclipboard_html_decode.plという名前で保存する。
保存したファイルのショートカットをデスクトップに作成し、名前を「clipboardをhtmlデコードする。」
に変える。使い方は以下。
htmlデコードしたいテキストをマウスで選択し、Ctrl+cでコピー。
「clipboardをhtmlデコードする。」ショートカットをダブルクリック。
Ctrl+vで貼り付け。
デスクトップ環境をperl便利にする!その2:クリップボードをHTMLエンコード [perl]
perlでクリップボードのテキストをHTMLエンコードし、結果をクリップボードに設定する。
#windows端末で、perl環境が整っていることが前提ですので、ご注意を!
ソースは以下。
上のコピペして、適当なところにclipboard_html_encode.plという名前で保存する。
保存したファイルのショートカットをデスクトップに作成し、名前を「clipboardをhtmlエンコードする。」
に変える。使い方は以下。
htmlエンコードしたいテキストをマウスで選択し、Ctrl+cでコピー。
「clipboardをhtmlエンコードする。」ショートカットをダブルクリック。
Ctrl+vで貼り付け。
#windows端末で、perl環境が整っていることが前提ですので、ご注意を!
ソースは以下。
#!/usr/bin/perl #---------------------------------------- # [Windows用] # クリップボードのデータをHTMLエンコードし、 # 結果をクリップボードに設定する。 use utf8; use Encode; use Win32::Clipboard; use HTML::Entities; my $clip = Win32::Clipboard(); exit 1 unless $clip->IsText(); # テキスト以外なら終了する my $text = decode("cp932",$clip->GetText()); # テキスト取得 $text=HTML::Entities::encode_entities($text); $clip->Set(encode("cp932",$text)); # テキスト設定 exit; #----------------------------------------
上のコピペして、適当なところにclipboard_html_encode.plという名前で保存する。
保存したファイルのショートカットをデスクトップに作成し、名前を「clipboardをhtmlエンコードする。」
に変える。使い方は以下。
htmlエンコードしたいテキストをマウスで選択し、Ctrl+cでコピー。
「clipboardをhtmlエンコードする。」ショートカットをダブルクリック。
Ctrl+vで貼り付け。
デスクトップ環境をperl便利にする!その1:クリップボードをユニークソート [perl]
perlでクリップボードのデータをユニークソートし、結果をクリップボードに設定する。
#windows端末で、perl環境が整っていることが前提ですので、ご注意を!
ソースは以下。
上のコピペして、適当なところにclipboard_sort_uniq.plという名前で保存する。
保存したファイルのショートカットをデスクトップに作成し、名前を「clipboardをuniq-sortする。」
に変える。使い方は以下。
ユニークソートしたいデータ群をマウスで選択し、Ctrl+cでコピー。
「clipboardをuniq-sortする。」ショートカットをダブルクリック。
Ctrl+vで貼り付け。
#windows端末で、perl環境が整っていることが前提ですので、ご注意を!
ソースは以下。
#!/usr/bin/perl #---------------------------------------- # [Windows用] # クリップボードのデータをユニークソートし、 # 結果をクリップボードに設定する。 use utf8; use Encode; use Win32::Clipboard; my $clip = Win32::Clipboard(); exit 1 unless $clip->IsText(); # テキスト以外なら終了する my $text = decode("cp932",$clip->GetText()); # テキスト取得 # 連想配列を使ってユニーク my %hash=(); foreach $rec (split(/\n/,$text)){ $rec=~s/\r//g; # LFを削除 next if($rec eq ""); # スペースは除外 $hash{$rec}=""; } $text=""; foreach $key (sort keys(%hash)){ $text.=$key."\r\n"; } $clip->Set(encode("cp932",$text)); # テキスト設定 exit; #----------------------------------------
上のコピペして、適当なところにclipboard_sort_uniq.plという名前で保存する。
保存したファイルのショートカットをデスクトップに作成し、名前を「clipboardをuniq-sortする。」
に変える。使い方は以下。
ユニークソートしたいデータ群をマウスで選択し、Ctrl+cでコピー。
「clipboardをuniq-sortする。」ショートカットをダブルクリック。
Ctrl+vで貼り付け。
Redmine REST APIをいじりたおす。 [perl]
仕事上、Redmineでタスク管理することにしたため、REST APIをごにょごにょするためのperlスクリプトを作成した。当初、その辺に転がっていたシェルをダウンロードして動かしてみたが、まったく動作しなかったので、自作することに。。。
結構完成度のたかいものができたので、皆様に展開します。
Redmine_ticket_control.pl
使い方は以下。
結構完成度のたかいものができたので、皆様に展開します。
Redmine_ticket_control.pl
使い方は以下。
使用法: Redmine_ticket_control.pl [get|add|chg|del] [url] [jsonファイル名|json value] 新規: new http://redmine/issues.json?key=[apikey]\&project_id=[id] [jsonファイル名|json value] 変更: chg http://redmine/issues/[id].json?key=[apikey] [jsonファイル名|json value] 削除: del http://redmine/issues/[id].json?key=[apikey] 参照: get http://redmine/issues.json?key=[apikey] get http://redmine/issues.json?key=[apikey]\\&project_id=1 get http://redmine/issues.json?key=[apikey]\\&project_id=1\\&set_filter=1\\&f%5B%5D=created_on\\&op%5Bcreated_on%5D=\\>\\<\\&v%5Bcreated_on%5D%5B%5D=2012-12-23\\&v%5Bcreated_on%5D%5B%5D=2012-12-23 get http://redmine/issues/[id].json?key=[apikey] ※[apikey] redmineにログインし、右上の個人設定をクリック。 APIアクセスキー欄にある表示を押すと確認できる。 ※[json value例] トラッカー => \\{\\"issue\\":\\{\\"tracker_id\\":\\"2\\"\\}\\} ステータス => \\{\\"issue\\":\\{\\"status_id\\":\\"2\\"\\}\\} 題名 => \\{\\"issue\\":\\{\\"subject\\":\\"てすとでーす\\"\\}\\} 説明 => \\{\\"issue\\":\\{\\"description\\":\\"てすと\\\\r\\\\nでーす\\"\\}\\} 担当者 => \\{\\"issue\\":\\{\\"assigned_to_id\\":\\"1\\"\\}\\}
CGIでExec format error [perl]
xyzzy設定 [perl]
perlスクリプトを作成するには、UTF-8で保存できるテキストエディタは必要不可欠。筆者は、昔からemacs信者であるため、Windowsであたかもemacsのように操作できるxyzzyを使用している。
ここからダウンロードできる。
インストールは、解凍して適当にフォルダに格納すればよい。
カスタマイズするには、環境変数XYZZYHOMEを設定する必要がある。
コンピュータのプロパティをひらき、環境変数ボタンをクリックし、ユーザ環境変数に変数名「XYZZYHOME」、変数値に「インストールしたフォルダ」を設定しよう。
これでカスタマイズの準備は完了。カスタマイズは、さっき環境変数に設定したインストールフォルダ配下に、「.XYZZY」ファイルを作成し行う。
筆者の.XYZZYファイルを以下にさらしておく。参考になるかもね。
ここからダウンロードできる。
インストールは、解凍して適当にフォルダに格納すればよい。
カスタマイズするには、環境変数XYZZYHOMEを設定する必要がある。
コンピュータのプロパティをひらき、環境変数ボタンをクリックし、ユーザ環境変数に変数名「XYZZYHOME」、変数値に「インストールしたフォルダ」を設定しよう。
これでカスタマイズの準備は完了。カスタマイズは、さっき環境変数に設定したインストールフォルダ配下に、「.XYZZY」ファイルを作成し行う。
筆者の.XYZZYファイルを以下にさらしておく。参考になるかもね。
;;==================================================================================== ;; xyzzy セッティング ;;------------------------------------------------------------------------------------ ; 文字コードしか変えられないけど(デフォルトではMule2.3風にC-x C-k f) (global-set-key '(#\C-x #\RET #\f) 'change-fileio-encoding) ; 改行コードの変更 (global-set-key '(#\C-x #\RET #\n) 'change-eol-code) (load-library "isearch") ;(setq c-indent-level 2) ;(setq c-brace-imaginary-offset 0) ;(setq c-brace-offset -2) ;(setq c-label-offset -2) ;(setq c-argdecl-indent 0) ;(setq c-label-offset -2) ;;==================================================================================== ;;個人カスタマイズ ;;------------------------------------------------------------------------------------ ;;undo (global-set-key '(#\C-/) 'undo) ;;ime on/off (global-set-key '(#\C-\\) 'toggle-ime) ;;マウスコピーペースト (defun mouse-right-press () (interactive) ;; (mouse-left-press) (paste-from-clipboard)) (global-set-key #\LBtnUp 'copy-selection-to-clipboard) (global-set-key #\MBtnDown 'mouse-right-press) (global-set-key #\RBtnUp 'mouse-menu-popup) ;;------------------------------------------------------------------------------------ ;; ファンクションキー設定 (global-set-key '(#\F1) 'overwrite-mode) (global-set-key '(#\F2) 'kill-rectangle) (global-set-key '(#\F3) 'yank-rectangle) (global-set-key '(#\F4) 'goto-line) ;;------------------------------------------------------------------------------------ ;;バッファを削除できるようにする (setq *kill-buffer-kills-scratch* t) ;;------------------------------------------------------------------------------------ ;;モードラインフォーマット (setq-default mode-line-format "[%i] <%k:%l> (%M) - %f -") ;;------------------------------------------------------------------------------------ ;;タイトルバーフォーマット (setq-default title-bar-format "%b") ;;------------------------------------------------------------------------------------ ;;ステータスバー関連 (setq *status-bar-format* "p") ;;------------------------------------------------------------------------------------ ;;Diff関連 (defun my-filer-diff-file () (let ((file1 (ed::filer-fetch-file nil nil)) (file2 (ed::filer-fetch-file nil t))) (unless (and file1 file2) (error "diffするファイルを指定して")) (diff file1 file2) (and (find-buffer ed::*diff-new-buffer-name*) (find-buffer ed::*diff-old-buffer-name*) (filer-cancel)))) (define-key filer-keymap #\M-f 'my-filer-diff-file) ;;------------------------------------------------------------------------------------ ;;ミニバッファのIMEをOFFではじめる (defvar *start-minibuffer-toggle-ime* nil) (defun start-minibuffer-ime-off-1 (buf his) (when (get-ime-mode) (toggle-ime) (setq *start-minibuffer-toggle-ime* t))) (defun start-minibuffer-ime-off-2 (buf his) (when *start-minibuffer-toggle-ime* (toggle-ime) (setq *start-minibuffer-toggle-ime* nil))) (add-hook '*enter-minibuffer-hook* 'start-minibuffer-ime-off-1) (add-hook '*exit-minibuffer-hook* 'start-minibuffer-ime-off-2) ;;------------------------------------------------------------------------------------ ;; 辞書設定 (defvar *dictionary-eijiro-path* (merge-pathnames "edict/eijiro/" (si:system-root))) (defvar *dictionary-gene-path* (merge-pathnames "edict/gene/" (si:system-root))) ;; メニュー定義 (setq *my-dictionary-popup-menu* (define-popup-menu (:popup nil "英和(&E)" (:item nil "英辞郎(&E)" #'(lambda () (interactive) (setq *edict-dictionary-path* *dictionary-eijiro-path*)) #'(lambda () (if (path-equal *edict-dictionary-path* *dictionary-eijiro-path*) :check))) (:item nil "GENE(&G)" #'(lambda () (interactive) (setq *edict-dictionary-path* *dictionary-gene-path*)) #'(lambda () (if (path-equal *edict-dictionary-path* *dictionary-gene-path*) :check))) ))) ;; フローティングポップアップメニュー ;;(defun init-dictionary () ;; (interactive) ;; (track-popup-menu *my-dictionary-popup-menu*)) ;;------------------------------------------------------------------------------------ ;; オート英単語翻訳 M-x autolookup-mode (require "autolookup") ;;------------------------------------------------------------------------------------ ;; ミニバッファの補完候補リストをチップヘルプにする ;;(setq *print-completion-list-hook* ;;'(lambda (list prefix &optional string) ;;(popup-string (format nil "Possible completions are ~D ;; items:\n~{\n~A~}" (length list) list) (point)))) ;;------------------------------------------------------------------------------------ ;; Grep結果をダブルクリックで開く (defun grep-mouse-left-press () "grep結果をダブルクリックでファイルopen" (interactive) (let ((click (mod *last-mouse-click-count* 6))) (if (= click 2) (first-error) (mouse-left-press)))) (defvar *grep-map* nil) (unless *grep-map* (setq *grep-map* (make-sparse-keymap)) (define-key *grep-map* #\LBtnDown 'grep-mouse-left-press)) (add-hook 'ed::*grep-hook* #'(lambda () (use-keymap *grep-map*))) (add-hook 'ed::*grepd-hook* #'(lambda () (use-keymap *grep-map*))) ;;------------------------------------------------------------------------------------ ;; ファイラーでごみ箱を使って削除 (setq *filer-use-recycle-bin* t) ;;------------------------------------------------------------------------------------ ;; 辞書引きモードにする ;;(setq *default-buffer-mode* 'edict-mode) (global-set-key '(#\M-%) 'query-replace) (export 'ed::html+-mode "ed") (autoload 'html+-mode "html+-mode" t) (pushnew '("\\.s?html?$" . html+-mode) *auto-mode-alist* :test 'equal) (setq c-indent-level 4)
Windows7でCygwin [perl]
今までXPモードにCygwinをインストールして使っていたが、いちいちXPモードを起動するのが、面倒になってきた。そこで、Windows7にCygwin環境を整えてみる。インストールはいたって簡単だ。
Cygwinをインストールするフォルダを作成する。(例:C:\Cygwin)
setup.exeをここからダウンロードして、1で作成したフォルダに保存する。
インストール手順はXPと変わらない。本ブログの過去記事にかいているので、参考にしてほしい。
以降は私の備忘録になる。私はtcshを常用しているので、それ用の設定をかいておく。bashを使っている人には、参考にならないので、読み飛ばしてほしい。
タイムゾーンの設定。これをやらないとログイン時、tzset: command not found.とかいわれる。
その他環境変数の設定
.tcshrcの設定 ※Shift-JISで作成する必要がある。なんで!?
minttyの設定
以外と簡単に動くなぁ・・・。Windows7 64bitなのに・・・。進歩したねぇ~Cygwin。
Cygwinをインストールするフォルダを作成する。(例:C:\Cygwin)
setup.exeをここからダウンロードして、1で作成したフォルダに保存する。
インストール手順はXPと変わらない。本ブログの過去記事にかいているので、参考にしてほしい。
以降は私の備忘録になる。私はtcshを常用しているので、それ用の設定をかいておく。bashを使っている人には、参考にならないので、読み飛ばしてほしい。
タイムゾーンの設定。これをやらないとログイン時、tzset: command not found.とかいわれる。
デスクトップのコンピュータアイコンを右クリックし、プロパティを選択。
システムの詳細設定をクリックし、システムのプロパティを開く。
詳細設定タブの環境変数ボタンをクリックする。
ユーザー環境変数の新規ボタンをクリックする。
変数名に「TZ」、変数値に「JST-9」を入れてOKをクリックする。
その他環境変数の設定
デスクトップのコンピュータアイコンを右クリックし、プロパティを選択。
システムの詳細設定をクリックし、システムのプロパティを開く。
詳細設定タブの環境変数ボタンをクリックする。
ユーザー環境変数の新規ボタンをクリックする。
変数名に「Path」、変数値に「%Path%;C:\Cygwin\bin」を入れてOKをクリックする。
※C:\Cygwin\binはCygwinをインストールしたフォルダに読み替えてね
※これやらないとmintty起動したときにcommand not foundとかいわれる
変数名に「SHELL」、変数値に「/bin/tcsh」を入れてOKをクリックする。
.tcshrcの設定 ※Shift-JISで作成する必要がある。なんで!?
#-------------------------------------------------- # tcshrc set path=(/usr/local/bin $path) # プロンプト設定 set prompt="%m->%B[%~]%b " # ターミナルのタイトルバー設定 printf "\033]2;${PWD}\007" #-------------------------------------------------- # alias alias ls 'ls --color -F' alias h 'history' alias rm '/bin/rm -i' alias purg '/bin/rm -i *~ .*~ #*# .saves-*' alias lpurg '/usr/bin/find -name \*~ -exec rm -i {} \;' alias less 'nkf -w \!* | /bin/less -r' alias cd 'cd \!*;printf "\033]2;${PWD}\007"' alias pushd 'pushd \!*;printf "\033]2;${PWD}\007"' alias popd 'popd \!*;printf "\033]2;${PWD}\007"' #-------------------------------------------------- # Windows Application alias ne 'run /cygdrive/c/Tools/xyzzy/xyzzy "`cygpath -aw \!*`"' alias e 'run /cygdrive/c/WINDOWS/explorer "`cygpath -aw \!*`"'
minttyの設定
minttyを起動し、右クリックでメニューを表示
Textをクリックし、Selectボタンでフォントを「MS ゴシック,9-point」に変更。
Localeで「ja_JP」を選択。Character setで「UTF-8」を選択し、OKをクリック。
以外と簡単に動くなぁ・・・。Windows7 64bitなのに・・・。進歩したねぇ~Cygwin。
WindowsユーザーのためのUNIX入門―Windowsで使えるUNIX環境「Cygwin」で試して覚える
- 作者: 藤森 水絵
- 出版社/メーカー: 新紀元社
- 発売日: 2004/02
- メディア: 単行本
Windows 7 Professional 通常版 Service Pack 1 適用済み
- 出版社/メーカー: マイクロソフト
- メディア: DVD-ROM
perlでIE操作-技集 [perl]
前回はperl上でIEを操作し、Google検索を実施するGoogleSearch.plスクリプトを作成した。その中で使用している技は、以下だ。
IE起動
フォームにテキスト入力
ボタンクリック
の3つだ。今回は上記を含めて、ほかにどういう操作ができるかまとめてみる。
まずは、基本のモジュール宣言とIE起動。きほんきほん・・・
目的のホームページ表示と表示待ち。
フォームにテキストを入力する。入力したいテキストフォームのID(例:q)を指定しよう。※必ずWindows用の文字コードでencodeしよう。
ボタンクリック。押したいボタンのID(例:btnG)を指定しよう。
IEを閉じる
IEを見えなくする
ホームページを見る
履歴をもどったり、すすんだり。
番外編:上の方をみて気づく人もいると思うが、テキストボックスなり、ボタンなりを操作する場合、idを指定する必要がある。JavaScriptを書いたことがある人は、知っていると思う。このidはどうやって調べるか?てっとりばやいのは、ホームページのソースを表示し、HTMLを解読することだ。以下に一応、例を記載しておく。詳しくは、JavaScriptの本とかみるとよくわかる。
番外編:HTMLのソースをみるのは、結構おっくうだ。とくに見やすくかいてないサイトなんかいっぱいある。で、めんどくさいので、操作できるHTMLオブジェクトのid一覧を表示するスクリプトを書いてみた。これをieObjlook.plというファイル名でutf-8で保存してほしい。
使い方は、こうだ。まず、IEを起動して、以下コマンドを入力するとIEのクラスとタイトルが表示される。
次に表示されたタイトルを指定して、オブジェクト一覧を表示する。具体的にはこうだ。
現状は、form,input,textarea,select,aのタグのIDを一覧で表示できる。それぞれのオブジェクトに対する操作は、JavaScriptを解説しているサイトが役にたつだろう。これ便利でしょ・・・・w
IE起動
フォームにテキスト入力
ボタンクリック
の3つだ。今回は上記を含めて、ほかにどういう操作ができるかまとめてみる。
まずは、基本のモジュール宣言とIE起動。きほんきほん・・・
use utf8; use Encode; use Win32::OLE; #Internet Explorerを起動 $ie=Win32::OLE->new('InternetExplorer.Application') or die Win32::OLE->LastError; #Internet Explorerを見えるようにする $ie->{Visible}=1;
目的のホームページ表示と表示待ち。
#Google を表示 $ie->Navigate("http://www.google.co.jp"); #表示待ち while($ie->{ReadyState}!=4 || $ie->{Busy}){ sleep(1); }
フォームにテキストを入力する。入力したいテキストフォームのID(例:q)を指定しよう。※必ずWindows用の文字コードでencodeしよう。
#検索キーワード入力 ※うまくいかない場合はidを「q」「lst-ib」に変更してネ
$ie->document->getElementById("q")->{value}=encode("cp932","設定する文字列");
ボタンクリック。押したいボタンのID(例:btnG)を指定しよう。
$ie->document->getElementById("btnG")->click(); #表示待ち while($ie->{ReadyState}!=4 || $ie->{Busy}){ sleep(1); }
IEを閉じる
$ie->Quit();
IEを見えなくする
$ie->{Visible}=0;
ホームページを見る
$ie->GoHome(); #表示待ち while($ie->{ReadyState}!=4 || $ie->{Busy}){ sleep(1); }
履歴をもどったり、すすんだり。
#すすむ $ie->GoForward(); #表示待ち while($ie->{ReadyState}!=4 || $ie->{Busy}){ sleep(1); } #もどる $ie->GoBack(); #表示待ち while($ie->{ReadyState}!=4 || $ie->{Busy}){ sleep(1); }
番外編:上の方をみて気づく人もいると思うが、テキストボックスなり、ボタンなりを操作する場合、idを指定する必要がある。JavaScriptを書いたことがある人は、知っていると思う。このidはどうやって調べるか?てっとりばやいのは、ホームページのソースを表示し、HTMLを解読することだ。以下に一応、例を記載しておく。詳しくは、JavaScriptの本とかみるとよくわかる。
■テキストボックスのHTML例(idはinput1) <input type=text id=input1> ■ボタンのHTML例(idはBtn1) <input type=button id=Btn1 value="ボタン">
番外編:HTMLのソースをみるのは、結構おっくうだ。とくに見やすくかいてないサイトなんかいっぱいある。で、めんどくさいので、操作できるHTMLオブジェクトのid一覧を表示するスクリプトを書いてみた。これをieObjlook.plというファイル名でutf-8で保存してほしい。
#!/usr/bin/perl use utf8; use Encode; use Win32::OLE; if($ARGV[0] eq ""){ $title=""; } else{ $title=decode("utf8",$ARGV[0]); } $ie=0; $sh=Win32::OLE->new('Shell.Application') or die Win32::OLE->LastError; for(my $i=0;$i<$sh->Windows->Count;$i++){ $class=Win32::OLE->QueryObjectType($sh->Windows($i)); next if($class ne "IWebBrowser2"); my $fullname=decode("cp932",$sh->Windows($i)->FullName); $fullname=~tr/[a-z]/[A-z]/; next if($fullname !~ /.+\\IEXPLORE.EXE$/); $wintitle=decode("cp932",$sh->Windows($i)->document->title); if($title ne ""){ if($wintitle eq $title){ $ie=$sh->Windows($i); last; } else{ next; } } else{ printf("class[%s] title[%s]\n", encode("utf8",$class), encode("utf8",$wintitle)); } } exit if($title eq ""); die "Internet Explorer is not found." if($ie==0); print "========================================\n"; printf("class[%s] title[%s]\n", encode("utf8",$class), encode("utf8",$wintitle)); print "========================================\n"; for($i=0;$i<$ie->document->getElementsByTagName("form")->{length};$i++){ my $action=decode("cp932",$ie->document->getElementsByTagName("form")->$i->{action}); my $method=decode("cp932",$ie->document->getElementsByTagName("form")->$i->{method}); my $id=decode("cp932",$ie->document->getElementsByTagName("form")->$i->{id}); my $name=decode("cp932",$ie->document->getElementsByTagName("form")->$i->{name}); printf("form(%d) action[%s] method[%s] id[%s] name[%s]\n", $i, encode("utf8",$action),encode("utf8",$method), encode("utf8",$id),encode("utf8",$name)); } for($i=0;$i<$ie->document->getElementsByTagName("input")->{length};$i++){ my $id=decode("cp932",$ie->document->getElementsByTagName("input")->$i->{id}); my $name=decode("cp932",$ie->document->getElementsByTagName("input")->$i->{name}); my $type=decode("cp932",$ie->document->getElementsByTagName("input")->$i->{type}); my $value=decode("cp932",$ie->document->getElementsByTagName("input")->$i->{value}); printf("input(%d) type[%s] id[%s] name[%s] value[%s]\n", $i, encode("utf8",$type), encode("utf8",$id), encode("utf8",$name), encode("utf8",$value)); } for($i=0;$i<$ie->document->getElementsByTagName("textarea")->{length};$i++){ my $id=decode("cp932",$ie->document->getElementsByTagName("textarea")->$i->{id}); my $name=decode("cp932",$ie->document->getElementsByTagName("textarea")->$i->{name}); my $type=decode("cp932",$ie->document->getElementsByTagName("textarea")->$i->{type}); my $value=decode("cp932",$ie->document->getElementsByTagName("textarea")->$i->{value}); printf("textarea(%d) id[%s] name[%s] type[%s] value[%s]\n", $i,encode("utf8",$id),encode("utf8",$name), encode("utf8",$type),encode("utf8",$value)); } for($i=0;$i<$ie->document->getElementsByTagName("select")->{length};$i++){ my $id=decode("cp932",$ie->document->getElementsByTagName("select")->$i->{id}); my $name=decode("cp932",$ie->document->getElementsByTagName("select")->$i->{name}); my $type=decode("cp932",$ie->document->getElementsByTagName("select")->$i->{type}); my $selectedIndex=decode("cp932", $ie->document->getElementsByTagName("select")->$i->{selectedIndex}); printf("select(%d) id[%s] name[%s] type[%s] selectedIndex[%d]\n", $i,encode("utf8",$id),encode("utf8",$name), encode("utf8",$type), encode("utf8",$selectedIndex)); for($j=0;$j<$ie->document->getElementsByTagName("select")->$i->options->{length};$j++){ my $value= decode("cp932",$ie->document->getElementsByTagName("select")->$i->options->$j->{value}); my $text= decode("cp932",$ie->document->getElementsByTagName("select")->$i->options->$j->{text}); printf("select(%d)\toptions(%3d) value[%s] text[%s]\n",$i,$j, encode("utf8",$value),encode("utf8",$text)); } } for($i=0;$i<$ie->document->getElementsByTagName("a")->{length};$i++){ my $id=decode("cp932",$ie->document->getElementsByTagName("a")->$i->{id}); my $name=decode("cp932",$ie->document->getElementsByTagName("a")->$i->{name}); my $href=decode("cp932",$ie->document->getElementsByTagName("a")->$i->{href}); printf("a(%d) id[%s] name[%s] href[%s]\n", $i, encode("utf8",$id), encode("utf8",$name), encode("utf8",$href)); }
使い方は、こうだ。まず、IEを起動して、以下コマンドを入力するとIEのクラスとタイトルが表示される。
$ perl ieObjlook.pl class[IWebBrowser2] title[Google]
次に表示されたタイトルを指定して、オブジェクト一覧を表示する。具体的にはこうだ。
$perl ieObjlook.pl "Google" ======================================== class[IWebBrowser2] title[Google] ======================================== form(0) action[/search] method[get] id[] name[f] input(0) type[hidden] id[] name[hl] value[ja] input(1) type[hidden] id[] name[source] value[hp] input(2) type[text] id[] name[q] value[] input(3) type[submit] id[] name[btnG] value[Google 検索] input(4) type[submit] id[] name[btnI] value[I'm Feeling Lucky] input(5) type[hidden] id[gbv] name[gbv] value[2] input(6) type[hidden] id[] name[oq] value[] input(7) type[hidden] id[] name[aq] value[] input(8) type[hidden] id[] name[aqi] value[] input(9) type[hidden] id[] name[aql] value[] input(10) type[hidden] id[] name[gs_sm] value[] input(11) type[hidden] id[] name[gs_upl] value[] textarea(0) id[csi] name[] type[textarea] value[] a(0) id[gb_1] name[] href[http://www.google.co.jp/webhp?hl=ja&tab=ww] a(1) id[gb_2] name[] href[http://www.google.co.jp/imghp?hl=ja&tab=wi] a(2) id[gb_12] name[] href[http://video.google.co.jp/?hl=ja&tab=wv] a(3) id[gb_8] name[] href[http://maps.google.co.jp/maps?hl=ja&tab=wl] a(4) id[gb_5] name[] href[http://news.google.co.jp/nwshp?hl=ja&tab=wn] a(5) id[gb_6] name[] href[http://www.google.co.jp/shopping?hl=ja&tab=wf] a(6) id[gb_23] name[] href[https://mail.google.com/mail/?tab=wm] a(7) id[] name[] href[http://www.google.co.jp/intl/ja/options/] a(8) id[gb_51] name[] href[http://translate.google.co.jp/?hl=ja&tab=wT] a(9) id[gb_10] name[] href[http://books.google.co.jp/bkshp?hl=ja&tab=wp] a(10) id[gb_9] name[] href[http://scholar.google.co.jp/schhp?hl=ja&tab=ws] a(11) id[gb_13] name[] href[http://www.google.co.jp/blogsearch?hl=ja&tab=wb] a(12) id[gb_36] name[] href[http://www.youtube.com/?tab=w1&gl=JP] a(13) id[gb_24] name[] href[https://www.google.com/calendar?tab=wc] a(14) id[gb_31] name[] href[http://picasaweb.google.co.jp/home?hl=ja&tab=wq] a(15) id[gb_25] name[] href[https://docs.google.com/?tab=wo] a(16) id[gb_38] name[] href[https://sites.google.com/?tab=w3] a(17) id[gb_3] name[] href[http://groups.google.co.jp/grphp?hl=ja&tab=wg] a(18) id[gb_32] name[] href[http://www.google.co.jp/reader/?hl=ja&tab=wy] a(19) id[] name[] href[http://www.google.co.jp/intl/ja/options/] a(20) id[] name[] href[http://www.google.co.jp/url?sa=p&pref=ig&pval=3&q=http://www.google.co.jp/ig%3Fhl%3Dja%26source%3Diglk&usg=AFQjCNEmQuNg1ivauCid9lXp5yYSx6AHXw] a(21) id[] name[] href[http://www.google.com/history/optout?hl=ja] a(22) id[] name[] href[] a(23) id[gb_70] name[] href[https://accounts.google.com/ServiceLogin?hl=ja&continue=http://www.google.co.jp/] a(24) id[] name[] href[http://www.google.co.jp/preferences?hl=ja] a(25) id[] name[] href[http://www.google.co.jp/advanced_search?hl=ja] a(26) id[] name[] href[http://www.google.co.jp/language_tools?hl=ja] a(27) id[] name[] href[http://www.google.co.jp/mgyhp.html] a(28) id[] name[] href[http://www.google.co.jp/intl/ja/ads/] a(29) id[] name[] href[http://www.google.co.jp/intl/ja/services/] a(30) id[] name[] href[http://www.google.co.jp/intl/ja/about.html] a(31) id[] name[] href[http://www.google.com/ncr] a(32) id[] name[] href[http://www.google.co.jp/intl/ja/privacy.html]
現状は、form,input,textarea,select,aのタグのIDを一覧で表示できる。それぞれのオブジェクトに対する操作は、JavaScriptを解説しているサイトが役にたつだろう。これ便利でしょ・・・・w
JavaScript本格入門 ~モダンスタイルによる基礎からAjax・jQueryまで
- 作者: 山田 祥寛
- 出版社/メーカー: 技術評論社
- 発売日: 2010/11/27
- メディア: 大型本
perlでGoogle検索(改) [perl]
前回、ブログに書いたGoogle検索スクリプトだが、あのままだと、「ガリガリ君」しか検索できないので、キーワードを指定できるように改造する。
キーワードの指定は、おなじみの「ARGV配列」を使用する。具体的にはこうだ。
上記内容をコピーしてutf-8でファイルに保存してほしい。ファイル名はGoogleSearch.plでいいだろう。使い方は、こうだ。
ちょっとはなにかにつかえるかなぁ・・・。
キーワードの指定は、おなじみの「ARGV配列」を使用する。具体的にはこうだ。
#!/usr/bin/perl use utf8; use Encode; use Win32::OLE; #コマンド引数を検索キーワードに設定 if($ARGV[0] ne ""){ $title=decode("utf8",$ARGV[0]); } else{ print encode("utf8","キーワードを指定してください!"),"\n"; exit; } #Internet Explorerを起動 $ie=Win32::OLE->new('InternetExplorer.Application') or die Win32::OLE->LastError; #Internet Explorerを見えるようにする $ie->{Visible}=1; #Google を表示 $ie->Navigate("http://www.google.co.jp"); #表示待ち while($ie->{ReadyState}!=4 || $ie->{Busy}){ sleep(1); } #検索キーワード入力 ※うまくいかない場合はidを「q」「lst-ib」に変更してネ $ie->document->getElementById("q")->{value}=encode("cp932",$title); #「Google 検索」ボタン押下 $ie->document->getElementById("btnG")->click();
上記内容をコピーしてutf-8でファイルに保存してほしい。ファイル名はGoogleSearch.plでいいだろう。使い方は、こうだ。
$ perl GoogleSearch.pl "ガリガリ君"
ちょっとはなにかにつかえるかなぁ・・・。
できるポケット Google スマートに使いこなす基本&活用ワザ 180 [グーグルの便利ワザ160 改訂新版]
- 作者: 渥美 祐輔
- 出版社/メーカー: インプレスジャパン
- 発売日: 2011/09/26
- メディア: 単行本(ソフトカバー)
perlでGoogle検索 [perl]
これまでブログに記載した内容で、perlによるInternet Explorerの起動、もしくは、起動中のInternet Explorerをperlの制御下にすることができる。今回は、実際のその技を使用して、ブラウザを制御してみる。
とりあえず以下のスクリプトをコピーし、utf-8で保存後、perlで起動してほしい。
上記は、IE起動し、Googleで「ガリガリ君」を検索するスクリプトだ。みてもわかるように、こんなに簡単に、Google検索アプリが作成できる。JavaScriptを知っている人は、察していると思うが、記載方法は若干異なるものの、HTML内のオブジェクト操作は、JavaScriptのそれと同じである。つまり、JavaScriptで可能なブラウザ操作は、perlでも可能ということだ。今後は引き続きperlでどこまでブラウザを制御できるか探ってみたい。
とりあえず以下のスクリプトをコピーし、utf-8で保存後、perlで起動してほしい。
#!/usr/bin/perl use utf8; use Encode; use Win32::OLE; #Internet Explorerを起動 $ie=Win32::OLE->new('InternetExplorer.Application') or die Win32::OLE->LastError; #Internet Explorerを見えるようにする $ie->{Visible}=1; #Google を表示 $ie->Navigate("http://www.google.co.jp"); #表示待ち while($ie->{ReadyState}!=4 || $ie->{Busy}){ sleep(1); } #検索キーワード入力 ※うまくいかない場合はidを「q」「lst-ib」に変更してネ $ie->document->getElementById("q")->{value}=encode("cp932","ガリガリ君"); #「Google 検索」ボタン押下 $ie->document->getElementById("btnG")->click();
上記は、IE起動し、Googleで「ガリガリ君」を検索するスクリプトだ。みてもわかるように、こんなに簡単に、Google検索アプリが作成できる。JavaScriptを知っている人は、察していると思うが、記載方法は若干異なるものの、HTML内のオブジェクト操作は、JavaScriptのそれと同じである。つまり、JavaScriptで可能なブラウザ操作は、perlでも可能ということだ。今後は引き続きperlでどこまでブラウザを制御できるか探ってみたい。
パーフェクトJavaScript (PERFECT SERIES 4)
- 作者: 井上 誠一郎
- 出版社/メーカー: 技術評論社
- 発売日: 2011/09/23
- メディア: 大型本