FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 20:36:26. Razón: Etiquetas [CODE] [/CODE] |
#2
|
|||
|
|||
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 21:34:46. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Rellenar con 0.... | buitrago | Varios | 6 | 17-11-2011 20:02:53 |
Rellenar Formulario Web a través de Delphi | Cecil | Internet | 2 | 04-08-2008 09:50:15 |
¿Es posible cerrar automaticamente un formulario en delphi? | mabjes | OOP | 7 | 13-07-2007 17:47:26 |
Rellenar un formulario PDF | afxe | Impresión | 1 | 24-07-2006 18:37:03 |
Rellenar formularios automaticamente | Osorio | Internet | 3 | 06-02-2004 22:39:06 |
|