Webbutton drücken



  • Hi Leute,

    banale Frage: Wie kann ich in C++ einen Webbutton drücken...

    Ich habe eine Funktion geschrieben die mir den Seitenquelltext einer Homepage zurückgibt. Dieser Quelltext enthält manchmal einen Button der in diesem Fall gedrückt werden soll.

    Der Quelltext des Button sieht wie folgt aus:

    <center><form name=rconf method=post>
    				<input type=hidden name=list value=111>
    				<input type=hidden name=fname value=>
    				<input type=hidden name=lname value=>
    				<input type=hidden name=dodel value=yes>
    
    				<input type=hidden name=u value=8cbef1e>
    				<input type=submit value="OK">
    				</form></center
    

    Gibt es eine Möglichkeit das in C++ zu realisieren?

    Gruß
    😕 WARFIRE 😕



  • Mit disphelper library ist es so einfach:

    dhCallMethod(browser, L"Document.rconf.submit()");
    


  • einfach das request senden? hat aber auch nix mit winapi zu tun.



  • Ja, aber wenn das klappt nicht, mußt du vielleicht die Methode direkt an dem Dokument ausführen:

    IDispatch *document = 0;
    dhGetValue(L"%o", &document, browser, L"Document"); // oder L"Document.script"
    if (document)
    {
       dhCallMethod(document, L"formname.buttonname.click()");
       document->Release();
    }
    

    http://disphelper.sourceforge.net/readme.htm

    Mit raw C++ es ist echt verrückt:

    IDispatch *docdsp;
    if (!browser->get_Document(&docdsp) && docdsp)
    {
    	IHTMLDocument2 *document;
    	if (!docdsp->QueryInterface(IID_IHTMLDocument2, &document))
    	{
    		IHTMLElementCollection *forms;
    		if (!document->get_forms(&forms))
    		{
    			VARIANT vName;
    			VARIANT vIndex;
    			vName.vt  = VT_I4;
    			vIndex.vt = VT_EMPTY;
    
    			long formCount;
    			forms->get_length(&formCount); // count>0 ?
    
    			for (vName.lVal=0; vName.lVal<formCount; vName.lVal++)
    			{
    				IDispatch *pDisp = NULL;
    				if (!forms->item(vName, vIndex, &pDisp) && pDisp)
    				{
    					IHTMLFormElement *form;
    					if (!pDisp->QueryInterface(IID_IHTMLFormElement, &form))
    					{
    						// <FORM>
    						//long inputCount;
    						//form->get_length(&inputCount);
    
    						VARIANT name, index;
    						name.vt      = VB_BSTR;
    						name.bstrVal = SysAllocString("submit1"); // <input name=submit1
    						index.vt     = VT_I4;
    						index.lVal   = 0; // erstes element mit dem Name "submit1"
    
    						IDispatch *inputdsp=0;
    						if (!form->item(name, index, &inputdsp) && inputdsp)
    						{
    							IHTMLElement *element;
    							if (!inputdsp->QueryInterface(IID_IHTMLElement, &element))
    							{
    								element->click();
    								element->Release();
    								// gefunden
    								vName.lVal = formCount;
    							}
    							inputdsp->Release();
    						}
    						VariantClear(&name);
    
    						form->Release();
    					}
    					pDisp->Release();
    				}
    			}
    			forms->Release();
    		}
    		document->Release();
    	}
    	docdsp->Release();
    }
    

Log in to reply