WebBrowser: manipolare le pagine html

Esempio di come si possa attraverso l'oggetto COM di Explorer leggere e modificare una pagina html
Data: 01/07/2003 Autore: Iasparra Francesco 

Il seguente esempio e' stato sviluppato in ambiente Borland C++ versione 6 su sistema operativo Windows, quindi gli oggetti utilizzati sono disponibili nelle librerie della piattaforma Borland.

File, relativo al progetto:

#include <vcl.h>
#pragma hdrstop

USEFORM("Unit1.cpp", Form1);
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
        try
        {
                 Application->Initialize();
                 Application->CreateForm(__classid(TForm1), &Form1);
                 Application->Run();
        }
        catch (Exception &exception)
        {
                 Application->ShowException(&exception);
        }
        catch (...)
        {
                 try
                 {
                         throw Exception("");
                 }
                 catch (Exception &exception)
                 {
                         Application->ShowException(&exception);
                 }
        }
        return 0;
}

Il codice appena visto non fa altro che avviare la nostra applicazione creando la finestra.

L'header file del nostro esempio e' il seguente:

#ifndef Unit1H
#define Unit1H

#include <Classes.hpp>    
#include <Controls.hpp>        
#include <StdCtrls.hpp>    
#include <Forms.hpp>        
#include "SHDocVw_OCX.h"    
#include <Buttons.hpp>        
#include <OleCtrls.hpp>    
#include <AppEvnts.hpp>
class TForm1 : public TForm
{
__published:	// IDE-managed Components
        TCppWebBrowser *CppWebBrowser1;
        TBitBtn *BitBtn1;
        TApplicationEvents *AppEvents;
        TEdit *Edit1;
        TEdit *Edit2;
        void __fastcall FormShow(TObject *Sender);
        void __fastcall FormPaint(TObject *Sender);
private:	// User declarations
public:		// User declarations
        __fastcall TForm1(TComponent* Owner);
};
extern PACKAGE TForm1 *Form1;
#endif

La nostra finestra principale:

#include <vcl.h>
#include <Mshtml.h>
#pragma hdrstop

#include "Unit1.h"

#pragma package(smart_init)
#pragma link "SHDocVw_OCX"
#pragma resource "*.dfm"
TForm1 *Form1;

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}

void __fastcall TForm1::FormShow(TObject *Sender)
{
      CppWebBrowser1->Navigate(WideString("prova.html").c_bstr());
}

void __fastcall TForm1::FormPaint(TObject *Sender)
{
        while(CppWebBrowser1->Busy) Application->ProcessMessages();
        IHTMLDocument2 *HTMLDoc = NULL;
        if(SUCCEEDED(CppWebBrowser1->Document->QueryInterface(IID_IHTMLDocument2,(LPVOID*)&HTMLDoc))){
                IHTMLElementCollection *pAll = NULL;
                if(SUCCEEDED(HTMLDoc->get_all(&pAll))){
                        IDispatch *pDisp = NULL;
                        TVariant index=0;

                        TVariant name = "Documento";
                        if(SUCCEEDED(pAll->item(name, index, &pDisp))){
                                if(pDisp){
                                        IHTMLInputElement *pInput = NULL;
                                        pDisp->QueryInterface(IID_IHTMLInputElement, (LPVOID*)&pInput);
                                        pDisp->Release();
                                        if(pInput){
                                                BSTR mybuffer;
                                                pInput->get_value(&mybuffer);
                                                Edit1->Text=AnsiString(mybuffer);
                                                pInput->put_value(WideString("Vocabolario"));
                                                ShowMessage("Il contetnuto del campo cambia\nda Libro 1 a Vocabolario");
                                        }
                                        pInput->Release();
                                 }
                        }

                        name = "Chiave";
                        if(SUCCEEDED(pAll->item(name, index, &pDisp))){
                                if(pDisp){
                                        IHTMLInputElement *pInput = NULL;
                                        pDisp->QueryInterface(IID_IHTMLInputElement, (LPVOID*)&pInput);
                                        pDisp->Release();
                                        if(pInput){
                                                BSTR mybuffer;
                                                pInput->get_value(&mybuffer);
                                                Edit2->Text=AnsiString(mybuffer);
                                                ShowMessage("Lettura del campo nascosto hidden");
                                        }
                                        pInput->Release();
                                 }
                        }

                }
                pAll->Release();
        }
        IHTMLElementCollection *HTMLForms = NULL;
        if(SUCCEEDED(HTMLDoc->get_forms(&HTMLForms)) && HTMLForms){
                TVariant vName = "Richiesta";
                IDispatch *pDisp = NULL;
                TVariant vIndex = 0;
                if(SUCCEEDED(HTMLForms->item(vName, vIndex, &pDisp)) && pDisp){
                        IHTMLFormElement *HTMLForm = NULL;
                        if(SUCCEEDED(pDisp->QueryInterface(IID_IHTMLFormElement,(LPVOID*)&HTMLForm)) && HTMLForm){
                                HTMLForm->submit();
                                HTMLForm->Release();
                        }
                        pDisp->Release();
                }
                HTMLForms->Release();
        }
        HTMLDoc->Release();
}

L'oggetto CppWebBrowser1 utilizza l'oggetto COM di Internet Explorer per la navigazione delle pagine Web, attraverso il metodo Navigate(WideString("prova.html").c_bstr()); viene caricata la pagina di esempio "prova.html".

Supponiamo che all'interno della pagina html vi sia il seguente codice:

<form name="richiesta" action="prova2.html" method="post">
<input name="Documento" type="text" value="libro 1">
<input type="hidden" name="Chiave" value="12345">
<input name="Conferma" type="submit" value="ok1" onClick="javascript:return risposta();" >
</form>

La nostra applicazione effettua le seguenti operazioni:
- sostituisce il contenuto della variabile Documento da "libro 1" a "Vocabolario"
- legge il contenuto della variabile nascosta "Chiave"
- effettua il submit della pagina.



  • Java
  • Php
  • Mysql
  • Apache ant
  • Eclipse
  • Spring
  • Hibernate
  • Netbeans
  • Debian
  • Linux
  • Maven

by Iasparra Francesco - © Copyright 2021

E' vietata la riproduzione anche parziale dei materiali presenti in questo sito.

I marchi e le immagini esposti sono Copyright dei rispettivi proprietari.