2009-03-24 14 views
6

Come posso ottenere il codice sorgente della pagina tramite Controllo WebBrowser (ActiveX InternetExplorer)?Come posso ottenere il codice sorgente della pagina tramite WebBrowser-Control (ActiveX InternetExplorer)?

Ho un documento xml "foo.xml".

var 
Web: TWebBrowser; 
begin 
... 
Web.Navigate("foo.xml"); 
// How can I get source code thru WebBrower control<---- 
... 
end; 
+0

Non è semplicemente il contenuto del file foo.xml, che puoi caricare direttamente comunque? –

+0

Penso che potrebbe essere un esempio. –

+0

XML è il risultato della richiesta Http. Non è un file. – user82002

risposta

1

Ho pensato che sarebbe stato facile ma sembra che sia stato dimenticato. Puoi farlo facilmente con un controllo TidHTTP.

MyPage := IdHTTP1.Get('www.google.com'); 

So che non è quello che vuoi ma potrebbe aiutare.

+0

Lo so. Ma voglio sapere come è stato fatto con WebBrowser. – user82002

1

Nell'evento DocumentCompleted, esaminare la proprietà DocumentText del controllo WebBrowser. Dovrebbe avere il testo completo della pagina caricata.

+0

Non vedo una tale proprietà in Delphi 2005. È stata introdotta in una versione successiva? –

1
IHTMLDocument2(Web.Document).Body.InnerHTML; 

Questo dovrebbe restituire la fonte della pagina.

+0

Questo non tralascia l'elemento HEAD, così come i tag BODY di apertura e chiusura? –

+0

Non funziona con contenuto XML. – user82002

+0

Immagino che tu abbia ragione. Forse questo ti aiuta ?: http://www.delphidabbler.com/articles?article=14 –

1

Un altro metodo che funziona bene è utilizzare Synapse. Usa la chiamata sinaptica HttpGet per recuperare la tua risorsa iniziale (che ti dà il codice sorgente) e poi manipola se necessario.

Un'altra opzione potrebbe essere quella di utilizzare il componente EmbeddedWB che espone MOLTE più proprietà e caratteristiche del browser Web rispetto al componente Delphi standard e soddisfa ancora le esigenze dell'utente di farlo all'interno del browser web.

+0

Sì, ma voglio sapere come posso farlo solo con ActiveX. – user82002

+0

Credo che il componente EmbeddedWB WRAPS IE e includa l'origine completa. È un buon punto di partenza per vedere come è stato fatto. – skamradt

1

di accedere all'intera HTML della pagina tramite il suo uso di controllo del browser web:

Web.Document.All[0].OutterHtml; 
1
private void btnTest_Click(object sender, EventArgs e) 
     { 
      wbMain.Navigate("foo.xml"); 
      wbMain.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(testing); 
     } 

     private void testing(Object sender, WebBrowserDocumentCompletedEventArgs e) 
     { 
      test = wbMain.DocumentText; 
     } 

So che questo è un po 'tardi, ma questo funziona per me. wbMain è l'oggetto WebBrowser.

1

WebBrowser1.Navigate() lo carica nella finestra del componente RAD utilizzando il componente IE integrato nel sistema operativo Windows. Quello che fai è rispondere a un callback (per il componente del browser, fare doppio clic sull'evento OnDownloadComplete) e salvarlo sul file in quella funzione. Frammenti di codice di lavoro:

procedure TMainForm.WB_SaveAs_HTML(WB : TWebBrowser; const FileName : string) ; 
var 
    PersistStream: IPersistStreamInit; 
    Stream: IStream; 
    FileStream: TFileStream; 
begin 
    if not Assigned(WB.Document) then 
    begin 
    Logg('Document not loaded!') ; //'Logg' adds a line to a log file. 
    Exit; 
    end; 

    PersistStream := WB.Document as IPersistStreamInit; 
    FileStream := TFileStream.Create(FileName, fmCreate) ; 
    try 
    Stream := TStreamAdapter.Create(FileStream, soReference) as IStream; 
    if Failed(PersistStream.Save(Stream, True)) then ShowMessage('SaveAs HTML fail!') ; 
    finally 
    FileStream.Free; 
    end; 

end; (* WB_SaveAs_HTML *) 

procedure TMainForm.WebBrowser1DownloadComplete(Sender: TObject); 
begin 
    if (WebBrowser1.Document<>nil)AND NOT(WebBrowser1.busy) then begin 
     WB_SaveAs_HTML(WebBrowser1,'test.html'); 
     //myStringList.loadFromFile('test.html'); //process it. 
    end; 
end; 

Nota che alcuni ("File") tipi MIME, come JSON danno una finestra di dialogo 'Salva con nome ...' in IE, che ferma la vostra lettura e richiede un intervento manuale.

Problemi correlati