如何使用Perl自动化现有的Internet Explorer实例?

时间:2009-07-27 16:33:49

标签: windows perl internet-explorer automation win32ole

我正在努力控制带有perl的外部Windows应用程序上的'Internet Explorer_Server'类的IE预览控件。

Internet Explorer_Server是窗口的类名,我用Spy ++找到了它。这是我的断言代码

$className = Win32::GUI::GetClassName($window); 
if ($className eq "Internet Explorer_Server") { 
    ... 
}

我可以使用Win32::GUI::GetWindow获取“Internet Explorer_Server”的句柄,但不知道下一步该做什么。

3 个答案:

答案 0 :(得分:5)

已更新: 您走错了路。你需要的是Win32::OLE

#!/usr/bin/perl

use strict;
use warnings;

use Win32::OLE;
$Win32::OLE::Warn = 3;

my $shell = get_shell();
my $windows = $shell->Windows;

my $count = $windows->{Count};

for my $item ( 1 .. $count ) {
    my $window = $windows->Item( $item );
    my $doc = $window->{Document};
    next unless $doc;
    print $doc->{body}->innerHTML;
}

sub get_shell {
    my $shell;
    eval {
        $shell = Win32::OLE->GetActiveObject('Shell.Application');
    };

    die "$@\n" if $@;

    return $shell if defined $shell;

    $shell = Win32::OLE->new('Shell.Application')
        or die "Cannot get Shell.Application: ",
               Win32::OLE->LastError, "\n";
}
__END__

因此,此代码找到一个具有Document属性的窗口并打印HTML。您必须决定使用哪个标准来查找您感兴趣的窗口。

ShellWindows documentation

答案 1 :(得分:1)

您可能需要查看Win32::IE::Mechanize。我不确定您是否可以使用此模块控制现有 IE窗口,但是应该可以在大约五行代码中访问单个URL。

答案 2 :(得分:0)

你看过Samie http://samie.sourceforge.net/,因为这是一个控制IE的perl模块