Basic Automation of IE
Created: 2 December 2005 Modified:Originally published on chrislynch.info website.
use Win32::OLE qw(EVENTS);
use IO::File;
#my $eventHandlerRef = *eventHandler{CODE};
my $document;
my $downloadCounter=0;
my $IE = Win32::OLE->new("InternetExplorer.Application") || die "Could not start Internet Explorer\n";
my $delayMore = 0;
##############################add logging
my $file = new IO::File;
$file->open(">autoie.log") or die "fixFile: Could not open file $source";
#####################################
Win32::OLE->WithEvents($IE,\&Event,"DWebBrowserEvents2");
$IE->{visible} = 1;
#navigate("http://wcmwebpub.usarec.army.mil:13001/wp/");
navigate("http://hqlynchcs1:8080/redirect.html");
while($IE->{Busy} == 1 || $IE->{ReadyState} != 4) {
messageLoop();
}
print "content: " . $IE->{LocationURL} . "\n";
$file->close();
#################event handler
sub Event {
my($obj,$event,@Args) = @_;
print $event . "\n";
if($event =~/^OnQuit$/) {
quitMessageLoop();
}
if($event =~/^DownloadBegin$/) {
$downloadCounter++;
}
if($event =~/^DownloadComplete$/) {
$document = $IE->{Document};
$downloadCounter--;
}
if($event =~/^BeforeNavigate2$/) {
$delayMore = 1;
# print "arg count: " . $#Args . "\n";
#for($i=1;$i <= $#Args;$i++) {
# $temp = $Args[$i];
# print "nav args: $i" . \$temp . "\n";
#}
#print "nav args: " . $temp . "\n";
}
if($event =~/^DocumentComplete$/) {
$delayMore = 0;
#if($downloadCounter <= 0) {
#quitMessageLoop();
#}
}
$file->write("Event triggered: " . $event . "\n");
}
###################messag loops
sub messageLoop() {
Win32::OLE->MessageLoop();
}
sub quitMessageLoop() {
Win32::OLE->QuitMessageLoop();
}
###############navigate to page
sub navigate {
my $url = @_[0];
$IE->navigate($url);
}