• ベストアンサー

アクティブウィンドウから 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";

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>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でできると思います。

rossgreen05
質問者

お礼

BLUEPIXY さん、ありがとうございます!Perl に特にこだわっていたわけではなく、ご教示いただいたようにしてリンクの情報を取り出すことが出来るようになり大変助かりました!! もうひとつだけ・・ HTML の全情報を取り出す Javascript のソースをお教えいただけたらとてもうれしいです。

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

>HTML の全情報を取り出す Javascript のソースをお教えいただけたらとてもうれしいです。 もうひとつ意味がわからないんですが、 文字通りの意味なら、「ソースの表示」でソースを取り出せばいいような気がします。 画面上に表示されるエレメントについては(IEの場合) docuement.ALL から引っ張ることができます。 body部分のソースは document.body.innerHTML とかでとれます。

rossgreen05
質問者

お礼

ご親切にお教えいただき本当にありがとうございました。自分でも調べてみて以下のように(ご回答のとおりですが)クリップボードに 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)
回答No.2

多分、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を開いたら良いんじゃないでしょうか

rossgreen05
質問者

お礼

まったくおっしゃられるとおりで、IE を捕まえられていませんでした。IE のバージョン (6.0....) のせいなのでしょうか。IE 設定はいろいろ変えてみましたが今のところだめでした。 >単純にnewしてURLを開いたら良いんじゃないでしょうか .pl ファイルをダブルクリックするだけで Explorer に表示された検索結果から自分のほしい部分だけを抽出・整形し、Word file などに保存できたらいいなと思っています。

rossgreen05
質問者

補足

XP SP2 にあてられた security patch がじゃまをしているようです・・解除をトライしましたがだめでした。 マニュアルでソースをコピペするしかないのかな・・・

  • guci-ok
  • ベストアンサー率33% (49/146)
回答No.1

どんな風にだめだったのですか? このスクリプトをコピー・ペーストして以下のように出力されましたが・・・ D:>ActiveURL.pl URL: http://bicniws.okweb.jp/kotaeru.php3?q=1696768

rossgreen05
質問者

お礼

補足と質問の追加です。スクリプトを以下のようにすると、 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";

rossgreen05
質問者

補足

返信有難うございます。 C:\>ActiveURL.pl URL: というように、何も返ってこないんです・・ スクリプト自体の問題ではないということですね・・

関連するQ&A

専門家に質問してみよう