formluar auf webseite füllen/abschicken



  • hallo,

    ich bin hier am verzweifeln... ich schreibe gerade einen Browser für ein Browsergame, der browser funktioniert soweit.
    Hierfür möchte ich ein Autologin realisieren.

    also browser benutze ich axWebBrowser.

    um die ganzen htmldocument... etc methoden zubekommen muss man ja microsoft.mshtml einbinden. hier kommt die erste frage. nehme die von .net oder von com.

    habe schon halb msdn durch gelesen... nur leider finde ich nirgends bsp codes in c++/clr(pure)... dort ist quassi alles in /clr:oldsyntax... damit kann ich nichts anfangen.

    also kann mir jemand erzählen wie ich folgendes mache

    -die aktuelle website dem htmldocument zuweisen
    -seite nach dem form durchsuchen
    -auf form zugreifen
    -form füllen sowie absenden.

    bitte hilft mir 🙂



  • so habe folgendes gefunden allerdings in c#

    http://www.codeproject.com/KB/cs/mshtml_automation.aspx?fid=26186&fr=76&df=90&mpp=25&noise=3&sort=Position&view=Quick#xx0xx

    wie muss das in c++ aussehen?

    ich habe bis her folgendes probiert..

    mshtml::HTMLDocument^ doc= gcnew mshtml::HTMLDocumentClass();
    			 doc = (mshtml::HTMLDocument^) axWebBrowser1->Document;
    			 mshtml::HTMLInputElement ^login = (mshtml::HTMLInputElement^) doc->all->item("loginname",0);
    			 login->value= "test";
    
    			 mshtml::HTMLInputElement ^sub = (mshtml::HTMLInputElement^) doc->all->item("submit",0);
    			 sub->click();
    
    			 mshtml::HTMLInputButtonElement ^sub = (mshtml::HTMLInputButtonElement^) doc->all->item("submit",0);
    			 sub->click();
    

    groß meckernt tut der compiler da nicht, nur leider hat er mit folgender zeile beim debuggen schon nen problem

    doc = (mshtml::HTMLDocument^) axWebBrowser1->Document;

    hier meint er ich soll das object mit new anlegen. nur new axWebBrowser1... geht leider nicht.

    any ideas?

    edit: achso hier das hier ist der htmlcode

    <form name="loginform" method="POST" action="/login.php">
                            <input class="loginname" type="text" name="name" value="" style="width:8em;" maxlength="60" />
                            <input class="passwort"  type="password" name="password" value="" style="width:8em;" maxlength="60"  />
                            <input type="submit" name="login" value="Login" style="width:7em;" /><br />
    


  • einer weiterer versuch

    private: System::Void axWebBrowser1_DocumentComplete(System::Object^  sender, AxSHDocVw::DWebBrowserEvents2_DocumentCompleteEvent^  e) {
    				 mshtml::IHTMLDocument2 ^pdoc = nullptr;
    
    				 pdoc = (mshtml::IHTMLDocument2^) (axWebBrowser1->Document);
    				 mshtml::HTMLDocumentEvents2_Event ^iEvent;
    				 iEvent = (mshtml::HTMLDocumentEvents2_Event^) (pdoc);
    				 //iEvent->onclick += gcnew mshtml::HTMLDocumentEvents2_onclickEventHandler(ClickEventHandler);
    				 listBox1->Items->Clear();
    
    			 }
    
    	private:
    
    		bool ClickEventHandler(mshtml::IHTMLEventObj^ e)
    	{
    		String ^str;
    		str = String::Concat(e->type, e->srcElement->tagName);		
    		listBox1->Items->Insert(0, str);
    		return true;
    	}
    	private: System::Void Form1_Click(System::Object^  sender, System::EventArgs^  e) {
    			 }
    

    hier bekomme ich 2 fehler...

    rror C3867: 'DocEventsSample::Form1::ClickEventHandler': function call missing argument list; use '&DocEventsSample::Form1::ClickEventHandler' to create a pointer to member	
    
    error C3350: 'mshtml::HTMLDocumentEvents2_onclickEventHandler' : a delegate constructor expects 2 argument(s)
    

    wer will oder kann mir sagen wo der fehler liegt?



  • iEvent->onclick += gcnew mshtml::HTMLDocumentEvents2_onclickEventHandler(this, &Form1::ClickEventHandler);
    


  • hey cool supi 🙂 machmal kann es doch so einfach sein 🙂



  • so habs nun endlich geschaft den html code auszulesen... nun stehe ich vor dem nächsten problem

    was mache ich bei ner seite mit frames???

    dazu habe ich folgendes gefunden http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2481737&SiteID=1

    habe versucht dies umzusetzen... und naja hier der code

    String ^main ="main";
    mshtml::IHTMLWindow2 ^f1 = (pdoc->frames->item(main), mshtml::IHTMLWindow2);
    

    mit error:

    error C2275: 'mshtml::IHTMLWindow2' : illegal use of this type as an expression
    

    wenn ich anstatt dem ->item(main, ->item(1) mache sagt er das mit dem int-wert nicht arbeiten kann...



  • okay vergessen wir die sache mit den frames einmal...

    ich habe den quellcode

    mshtml::IHTMLDocument2 ^pdoc = nullptr;
    pdoc = (mshtml::IHTMLDocument2^) (axWebBrowser1->Document);
    

    und folgndes klappt,

    this->richTextBox1->Text = pdoc->body->innerHTML;
    this->label1->Text = doc->Forms->Count.ToString();
    this->label2->Text = doc->Images->Count.ToString();
    this->label3->Text = doc->Links->Count.ToString();
    

    ihr seht ich komme an den code dran... aber wie komme ich an ein spezielles element und aktivere es...
    in deiesem fall ein form füllen.



  • so habes es inzwischen hinbekommen... so schauts aus.

    mshtml::HTMLDocument ^mydoc= gcnew mshtml::HTMLDocumentClass();
    mydoc = (mshtml::HTMLDocument^)axWebBrowser1->Document;
    mshtml::HTMLInputElement ^name = (mshtml::HTMLInputElement^)mydoc->all->item("name",0);
    name->value=_name;
    
     mshtml::HTMLInputElement ^pw = (mshtml::HTMLInputElement^)mydoc->all->item("password",0);
     pw->value=_pw;
    mshtml::HTMLInputElement ^submit = (mshtml::HTMLInputElement^)mydoc->all->item("login",0);
    submit->click();
    

Anmelden zum Antworten