Newsgroup: it.comp.lang.perl
Titolo: problema con Win32::OLE

Ciao,
mi stavo chiedendo se la libreria Win32::OLE sia bacata, mi spiego
meglio, la mia necessità è quella di verificare il contenuto di un
frame contenuto in internet explorer.
Verificando cosa contiene l'oggetto creato con la chiamata:
$browser = Win32::OLE->new('InternetExplorer.Application')
non riesco a leggerne il contenuto o meglio non riesco ad ottenre le
sue chiavi.
Mentre con la seguente chiamata
$doc=$browser->document;
riesco in questo caso ad ottenere le chiavi. E qui sospetto che
qualcosa nella libreria non funziona. In quanto la chiave "frames"
contenuta in $doc dovrebbe contenere i frames attivi, mentre in tutte
le mie prove è risultata sempre vuota. Ho effettuato una prova con il
vbscript ed effettivamente se controllo l'oggetto frames contiene i
riferimenti ai frame attivi sul browser.
Nessuno ha riscontrato tale problema?
Oppure sono io un pò de cocco con il perl... :-)
Ringranzio tutti anticipatamente. 
Abanero.

 $browser = Win32::OLE->new('InternetExplorer.Application')
Dovresti postare un po' più di codice e darci il link ad una pagina html 
tipo.

 tipo.
Scusa per la lentezza della risposta, ma non sempre ho la possibilità
di leggere il news group, comunque di seguito un po di codice,
all'interno del codice è presente un link ad una pagina tipo:
------------------------------CUT HERE----------------------------
use Win32::OLE;
$IExplorer = Win32::OLE->new('InternetExplorer.Application') ||
              die "CreateObject: $!";
$IExplorer->{Visible} = 1;
$IExplorer->Navigate2('
http://www.raso.org/'
);
 
waitIE();
 
#Sub Routine WaitIE 
 
sub waitIE {
 
   do
     {
          sleep(1);
          $stat=$IExplorer->{Busy};
          print "Waiting ... \n";
 
     }
     while ($stat);
 
     # get the HTML page from the browser
     my $doc=$IExplorer->document;
     my $body = $doc->{body};
 
     my $innerHTML = $body->{innerHTML};
     my $outerHTML = $body->{outerHTML};
 
     #Document Keys
     @DOC = keys %$doc;
     @DOC = sort @DOC;
     #Body Keys
     @Elm= keys %$body;
     @Elm = sort @Elm;
 
     print "IN LOOP1 inner: [$body->{innerHTML}]\n";
     print "IN LOOP1: [$body->{outerHTML}]\n";
       @IExplorer = keys %$IExplorer;
       @IExplorer = sort @IExplorer;
       $element = scalar (@IExplorer);
       @DOC = keys %$doc;
       print "****CONTROLLO IEXPLORER [$IExplorer]
[$element]************************\n";
     foreach (@DOC){
 
      print "*************************Object
[$_]********************\n";
      print "DOC: [$_] $doc->{$_}\n";
      $tipo = $doc->{$_};
      if (ref($tipo) ne ""){
         scanningAll(\$tipo);	
      }
     }
 
    foreach (@Elm){
 
      print "*************************Object
[$_]********************\n";
      print "BODY: [$_] $body->{$_}\n";
      $tipo = $body->{$_};
      if (ref($tipo) ne ""){
         scanningAll(\$tipo);	
      }
     }
 
     print "\nBODY:$body\n";
 
     print "\nHTML:$html\n";
 
     print "\nExit wait ... \n";
 
   return 1;
 
}
 
 
sub scanningAll {
    my ($yyy) = @_;	
 
   if (ref($$yyy) ne ""){
      	print "\t\t***************scanning $$yyy******************\n";
      	@appo= keys  (%$$yyy);
      	@appo = sort @appo;
      	$element = scalar (@appo);
      	foreach (@appo){
      	   print "\t\tContiene:[$_] $tipo->{$_} [$element]\n";
      	   my $xxx = $tipo->{$_};
 
           if (ref($xxx) ne ""){
             print "\n\nxxx: $xxx call scanningAll [[$tipo] [$_] ]
\n";
             scanningAll(\$xxx);
           }
 
        }	
 
   }
 
}
------------------------------CUT HERE----------------------------
Come potrai notare eseguendo il codicie il valore "frames" dell'oggeto
document rimane sempre vuoto provare per credere.
Grazie ancora...
Abanero.

       $tipo = $doc->{$_};
Ho parlato con il venerabile mahatma dada, impossibilitato a postare:
in sostanza tu non stai cercando abbastanza approfonditamente.
I frames si trovano in document.all mentre tu scandisci solo a livello + 
alto.
<dada> sub scan {
<dada>  my($obj) = @_;
<dada>
<dada>  print "\t\t***************scanning $obj******************\n";
<dada>  if(ref $obj) {
<dada>   foreach $key (sort keys %$obj) {
<dada>    print "\t\tContiene: [$key] $obj->{$key}\n";
<dada>    if(ref $obj->{$key}) {
<dada>     print "xxx: call scan $xxx\n";
<dada>     scan($xxx);
<dada>    }
<dada>   }
<dada>  }
<dada> }
<dada> e le chiamate a scanningAll(\$tipo) vanno sostituite con scan($tipo)