Formulare automatisch mit QWebView ausfüllen

Alles rund um die Programmierung mit Qt
Antworten
Tiim
Beiträge: 11
Registriert: 20. August 2011 16:54

Formulare automatisch mit QWebView ausfüllen

Beitrag von Tiim »

Hallo Community

Ich möchte mit einem QWebView ein kleines Programm schreiben, welches von alleine (ohne User input) gewisse Webseiten besuchen sollte, und dort ein Formular (zB zum einloggen) ausfüllen und Abschicken kann.

Und genau da scheitert es. Wie kann man mit einem QWebView Formulare ausfüllen, und am besten das ganze Widget sozusagen "readonly" setzen :?:


/Edit
Ich habe gerade bemerkt, dass QWebView keine Funktion wie zB getHtml(); hat, wie kann ich denn an Informationen auf der Website drankommen?
Seit August 2011 Qt Anfänger
brax
Beiträge: 208
Registriert: 11. Mai 2010 11:22

Re: Formulare automatisch mit QWebView ausfüllen

Beitrag von brax »

Um ehrlich zu sein, hört sich das Programm etwas fragwürdig an... man könnte meinen, Du möchtest "böse" Sachen machen (Spambots oder ähnliches).

Du kannst Dir vom QWebFrame die Elemente der Seite geben lassen und diese dann z.B. per Javascript manipulieren. Guck Dir mal

Code: Alles auswählen

QWebElementCollection	QWebFrame::findAllElements ( const QString & selectorQuery ) const
QWebElement	QWebFrame::findFirstElement ( const QString & selectorQuery ) const
QVariant QWebFrame::evaluateJavaScript ( const QString & scriptSource )
an. Damit solltest Du das ganze realisieren können.
Tiim
Beiträge: 11
Registriert: 20. August 2011 16:54

Re: Formulare automatisch mit QWebView ausfüllen

Beitrag von Tiim »

(Spambots oder ähnliches)
Nein, ich habe nicht vor solche bösen Sachen zu machen :D

Aber danke, ich werde mir das mal anschauen.
Seit August 2011 Qt Anfänger
Tiim
Beiträge: 11
Registriert: 20. August 2011 16:54

Re: Formulare automatisch mit QWebView ausfüllen

Beitrag von Tiim »

Damit:

Code: Alles auswählen

QWebElementCollection element = ui->webView->page()->mainFrame()->findAllElements("*");
    for (int i=0;i<element.count();i++)
    {
        qDebug()<< i << " gefunden";
    }
Findet er über 300 Elemente.
Wie kann ich das auf die 2 Editfelder und den Einlog Button beschränken? Und, wie kann ich diese dann benutzen (in die Felder eingeben, und auf den Button clicken)?
Ich habe leider keine Ahnung von css und habe mir das im Internet zusammengesucht.
Seit August 2011 Qt Anfänger
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Re: Formulare automatisch mit QWebView ausfüllen

Beitrag von upsala »

Und den Filter auf Eingabeelemente beschränken, oder mal die Doku von QWebElement anzusehen und dort eine passende Methode zum Filtern verwenden wäre keine Idee.

Außerdem scheinen HTML-Kenntnisse bei so einem Vorhaben von Vorteil zu sein.
Tiim
Beiträge: 11
Registriert: 20. August 2011 16:54

Re: Formulare automatisch mit QWebView ausfüllen

Beitrag von Tiim »

Gut, ich habe es geschafft, die Eingabefelder auszufüllen.
Aber ich schaffe es einfach nicht, den Submit-Button zu betätigen:

Code: Alles auswählen

QWebElement button = ui->webView->page()->mainFrame()->findFirstElement("input[type=submit]");
button.evaluateJavaScript("click()");
Hier noch den wichtigen Teil des HTML Codes:

Code: Alles auswählen

<input type="submit" id="login_button" style="margin-bottom:10px; width:126px; float: right" value="Login"/>
			</div>
			<div id="js_login_button"  style="display:none">
				<a href="#" onclick="$('#login_button').trigger('click'); return false;" class="login_button">
					<span class="button_left"></span>
					<span class="button_middle">Login</span>

					<span class="button_right"></span>
				</a>
			</div>	
/Edit:
Mit

Code: Alles auswählen

this.click()
geht es. :D
Seit August 2011 Qt Anfänger
Antworten