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);    
}
tags: blog - old blog - Perl
   Memory is Fleeting