Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-05-2011
mns mns is offline
Miembro
 
Registrado: feb 2008
Posts: 13
Poder: 0
mns Va por buen camino
rellenar un formulario web automaticamente

Estoy intentado rellenar un formulario web automaticamente desde builder 6,
concretamente un formulario de hacienda , el 036, cogiendo los datos de una base de datos y no encuentro la manera.
la pagina es la siguiente https://www2.agenciatributaria.gob.e.../ie03700t.html , el formulario esta dentro de un frame , estoy probando cosas pero me da un acces violation
Esto es un codigo que encontre en otra página y que he intentado modificar para capturar el frame ,parece que captura el frame pero luego ya va todo mal , tampoco entiendo mucho el codigo, y no hay manera, como vereis he probado varias cosas a ver si habia suerte pero no.
gracias anticipadas

Código:
     typedef std::map<CComVariant, CComBSTR> MapField;
MapField mf;
mf["A010101"]  = L"43000000K";
mf["A010102"] = L"nombre y apellidos";

CComQIPtr<IHTMLDocument2> doc(web->Document);
CComPtr<IHTMLElementCollection> forms;
CComPtr<IHTMLFramesCollection2> frames;
doc->get_frames(&frames);
CComPtr<IDispatch> disp;
VARIANT n, vFrame;
    n.vt = VT_I4;
    n.intVal = 1;
HRESULT hr = frames->item(&n,&vFrame);//  (Variant("pagi"), Variant());
if (SUCCEEDED(hr))
{

    ShowMessage("hola, hay frame"); // hasta aqui parece que funciona

    CComQIPtr<IHTMLFrameElement> frame(disp);
    CComQIPtr<IHTMLFormElement> form(disp);
    form = frame;
    CComQIPtr<IHTMLInputElement> field;
    for (MapField::iterator ite = mf.begin(); ite != mf.end(); ite++)
    {
        disp = 0;
        // a partir de aqui ni idea(todo mal)
        if (SUCCEEDED(form->item(ite->first, CComVariant(), &disp)) && disp)
        {
            field = disp;
            field->put_value(ite->second);
        }
    }
    //form->submit();
}

Última edición por ecfisa fecha: 13-05-2011 a las 21:36:26. Razón: Etiquetas [CODE] [/CODE]
Responder Con Cita
  #2  
Antiguo 15-05-2011
mns mns is offline
Miembro
 
Registrado: feb 2008
Posts: 13
Poder: 0
mns Va por buen camino
al final me dieron la solución:

<CODE>
pedef std::map<CComVariant, CComBSTR> MapField;
MapField mf;
mf["A010101"] = L"43000000K"; // primeros dos campos del form
mf["A010102"] = L"nombre y apellidos";

// "web" es TCppWebBrowser
CComQIPtr<IHTMLDocument2> doc(web->Document);

// Obtenemos la lista de frames
CComPtr<IHTMLFramesCollection2> frames;
doc->get_frames(&frames);
// long numFrames; frames->get_length(&numFrames);

// De la lista seleccionamos el frame con su nombre
CComVariant frameDisp;
OleCheck(frames->item(&CComVariant("nombreDelFrame"), &frameDisp));
CComQIPtr<IHTMLWindow2> frame(frameDisp.pdispVal);

// Obtenemos el documento de dicho frame
CComPtr<IHTMLDocument2> docFrame;
frame->get_document(&docFrame);

// Seleccionamos el form a rellenar con su nombre
CComPtr<IHTMLElementCollection> forms;
docFrame->get_forms(&forms);
CComPtr<IDispatch> disp;
HRESULT hr = forms->item(CComVariant("nombreDelFormARellenar"), CComVariant(), &disp);

if (SUCCEEDED(hr) && disp)
{
CComQIPtr<IHTMLFormElement> form(disp);
CComQIPtr<IHTMLInputElement> field;
for (MapField::iterator ite = mf.begin(); ite != mf.end(); ite++)
{
disp = 0;
if (SUCCEEDED(form->item(ite->first, CComVariant(), &disp)) && disp)
{
field = disp;
field->put_value(ite->second);
}
}
// form->submit();
}
</CODE>

Última edición por mns fecha: 15-05-2011 a las 22:34:46.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Rellenar con 0.... buitrago Varios 6 17-11-2011 21:02:53
Rellenar Formulario Web a través de Delphi Cecil Internet 2 04-08-2008 10:50:15
¿Es posible cerrar automaticamente un formulario en delphi? mabjes OOP 7 13-07-2007 18:47:26
Rellenar un formulario PDF afxe Impresión 1 24-07-2006 19:37:03
Rellenar formularios automaticamente Osorio Internet 3 06-02-2004 23:39:06


La franja horaria es GMT +2. Ahora son las 16:40:24.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi