あなたの習慣について教えてください!!

ローカルの(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";

A 回答 (4件)

>Explorer に表示された検索結果から自分のほしい部分だけを抽出・整形し、Word file などに保存できたらいいなと


特別にPerlを使わなくてはならないという理由がないなら、
javascript(JScript)を使うといいと思います。
http://support.microsoft.com/default.aspx?scid=k …
に書かれている方法で、右クリックメニューを拡張することができます。
なので、
現在開かれている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でできると思います。
    • good
    • 0
この回答へのお礼

BLUEPIXY さん、ありがとうございます!Perl に特にこだわっていたわけではなく、ご教示いただいたようにしてリンクの情報を取り出すことが出来るようになり大変助かりました!!

もうひとつだけ・・

HTML の全情報を取り出す Javascript のソースをお教えいただけたらとてもうれしいです。

お礼日時:2005/10/07 12:59

>HTML の全情報を取り出す Javascript のソースをお教えいただけたらとてもうれしいです。


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

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

重ね重ねご親切に感謝いたします。

お礼日時:2005/10/07 14:20

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

この回答への補足

XP SP2 にあてられた security patch がじゃまをしているようです・・解除をトライしましたがだめでした。

マニュアルでソースをコピペするしかないのかな・・・

補足日時:2005/10/07 07:02
    • good
    • 0
この回答へのお礼

まったくおっしゃられるとおりで、IE を捕まえられていませんでした。IE のバージョン (6.0....) のせいなのでしょうか。IE 設定はいろいろ変えてみましたが今のところだめでした。

>単純にnewしてURLを開いたら良いんじゃないでしょうか

.pl ファイルをダブルクリックするだけで Explorer に表示された検索結果から自分のほしい部分だけを抽出・整形し、Word file などに保存できたらいいなと思っています。

お礼日時:2005/10/07 04:09

どんな風にだめだったのですか?



このスクリプトをコピー・ペーストして以下のように出力されましたが・・・

D:>ActiveURL.pl
URL: http://bicniws.okweb.jp/kotaeru.php3?q=1696768

この回答への補足

返信有難うございます。

C:\>ActiveURL.pl
URL:

というように、何も返ってこないんです・・
スクリプト自体の問題ではないということですね・・

補足日時:2005/10/07 00:37
    • good
    • 0
この回答へのお礼

補足と質問の追加です。スクリプトを以下のようにすると、

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";

お礼日時:2005/10/07 01:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報