- ベストアンサー
アクティブウィンドウから URL/HTML の取得
ローカルの(WindowsXP)環境で、アクティブなエクスプローラのウィンドウから URL や HTML を、 Perl (ActivePerl) でそのプログラム中に取り込むにはどのようにしたらよいのでしょうか。LWP, Win32::OLE などウェブで調べてみましたがわかりませんでした。ご教示いただけたら嬉しいです。 調べた限りでは Win32::OLE で以下のように出来そうだったのですがうまく行きませんでした。 use Win32::OLE qw(EVENTS in with valof); my $IE = Win32::OLE->GetActiveObject('InternetExplorer.Application') || Win32::OLE->new('InternetExplorer.Application', 'Quit'); $url = $IE->{Document}->{Url}; print "URL: " . $url . "\n";
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>Explorer に表示された検索結果から自分のほしい部分だけを抽出・整形し、Word file などに保存できたらいいなと 特別にPerlを使わなくてはならないという理由がないなら、 javascript(JScript)を使うといいと思います。 http://support.microsoft.com/default.aspx?scid=kb;ja;177241 に書かれている方法で、右クリックメニューを拡張することができます。 なので、 現在開かれているWebページを右クリックして該当プログラム(ローカルに作ったHTMLファイル)で 現在開かれているWebページの全てのリンクを取り出し、クリップボードに送り込むことが可能です。 サンプル(リンクの一覧をクリップボードにコピー)LinkAllCopy.html <SCRIPT LANGUAGE="JavaScript"> var pWin = external.menuArguments; var pDoc = pWin.document; var LinkList=""; for(var i=0;i<pDoc.links.length;i++){ LinkList+='<a href="' + pDoc.links[i].href + '">'; LinkList+=pDoc.links[i].innerText; LinkList+="</a>\n"; } window.clipboardData.setData('text',LinkList); </SCRIPT> ------------------------------------------------------------------- 取り出したリンクをスクリプトで選別処理することも当然可能です。 ActiveScriptを使っているのであれば、SCRIPT LANGUAGE="PerlScript"を使うことも可能であると思いますが、 特にこだわりがなければ、JScriptでできると思います。
その他の回答 (3)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>HTML の全情報を取り出す Javascript のソースをお教えいただけたらとてもうれしいです。 もうひとつ意味がわからないんですが、 文字通りの意味なら、「ソースの表示」でソースを取り出せばいいような気がします。 画面上に表示されるエレメントについては(IEの場合) docuement.ALL から引っ張ることができます。 body部分のソースは document.body.innerHTML とかでとれます。
お礼
ご親切にお教えいただき本当にありがとうございました。自分でも調べてみて以下のように(ご回答のとおりですが)クリップボードに URL や Text, HTML を移すことが出来ました。 <SCRIPT LANGUAGE="JavaScript"> var pWin = external.menuArguments; var pDoc = pWin.document; var pBody = pDoc.body; var Url = pDoc.URL; var InnerHtml = pBody.innerHTML; var InnerText = pBody.innerText; window.clipboardData.setData('text',Url+InnerText+InnerHtml); </SCRIPT> これと Win32::Clipboard で思ったとおり(以上)のことができると思います。 use Win32::Clipboard; $CLIP = Win32::Clipboard(); print "Clipboard contains: ", $CLIP->Get(), "\n"; 重ね重ねご親切に感謝いたします。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
多分、GetActiveObject('InternetExplorer.Application') で現在開いているIEが捕まえられていないと思う。 my $IE = Win32::OLE->GetActiveObject('InternetExplorer.Application') || Win32::OLE->new('InternetExplorer.Application', 'Quit'); $url = $IE->{Document}->{Url}; print "URL: " . $url . "\n"; を my $IE = Win32::OLE->GetActiveObject('InternetExplorer.Application'); if($IE){ $url = $IE->{Document}->{Url}; print "URL: " . $url . "\n"; } の様にしてみて何も表示されなかったら、捕まえるのに失敗しているということでしょう。 ハッシュが表示されていたのは、newしている方のせいだと思う。 単純にnewしてURLを開いたら良いんじゃないでしょうか
お礼
まったくおっしゃられるとおりで、IE を捕まえられていませんでした。IE のバージョン (6.0....) のせいなのでしょうか。IE 設定はいろいろ変えてみましたが今のところだめでした。 >単純にnewしてURLを開いたら良いんじゃないでしょうか .pl ファイルをダブルクリックするだけで Explorer に表示された検索結果から自分のほしい部分だけを抽出・整形し、Word file などに保存できたらいいなと思っています。
補足
XP SP2 にあてられた security patch がじゃまをしているようです・・解除をトライしましたがだめでした。 マニュアルでソースをコピペするしかないのかな・・・
- guci-ok
- ベストアンサー率33% (49/146)
どんな風にだめだったのですか? このスクリプトをコピー・ペーストして以下のように出力されましたが・・・ D:>ActiveURL.pl URL: http://bicniws.okweb.jp/kotaeru.php3?q=1696768
お礼
補足と質問の追加です。スクリプトを以下のようにすると、 C:\>ActiveURL.pl Doc: HASH(0x284f50) URL: というのが返ってきます。ですので、Explorer にアクセスは出来ているようです。ところで、HASH(0x284f50) は展開すると HTML 情報が得られるのでしょうか。そうである場合、どのように展開したらよいのでしょうか。ご教示のほどお願いいたします。 use Win32::OLE qw(EVENTS in with valof); my $IE = Win32::OLE->GetActiveObject('InternetExplorer.Application') || Win32::OLE->new('InternetExplorer.Application', 'Quit'); $doc = $IE->{Document}; $url = $doc->{Url}; print "Doc: " . $doc . "\n"; print "URL: " . $url . "\n";
補足
返信有難うございます。 C:\>ActiveURL.pl URL: というように、何も返ってこないんです・・ スクリプト自体の問題ではないということですね・・
お礼
BLUEPIXY さん、ありがとうございます!Perl に特にこだわっていたわけではなく、ご教示いただいたようにしてリンクの情報を取り出すことが出来るようになり大変助かりました!! もうひとつだけ・・ HTML の全情報を取り出す Javascript のソースをお教えいただけたらとてもうれしいです。