17 Benutzer kommentierten "C# – Automatischer Login mit dem Webbrowser-Control"

"C# – Automatischer Login mit dem Webbrowser-Control" wurde von Raffi geschrieben und 17 mal kommentiert
gravatar
joerg sagte am         
29 April 2009 um 20:27:25

erstmal danke für das tutorium,
ich steh vor einem problem bei mir geht alles aber wenn ich jetzt 2 webbrowser parallel in 2 unterschiedliche seiten einlogen will geht der 2 nicht wenn ich aber beide seiten intereinander im 1 laufen lasse geht alles
wäre nett wenn du mir villt ein beispiel geben könntest
danke
mfg
joerg

gravatar
Raffi sagte am         
29 April 2009 um 21:39:51

Hallo Joerg,
ich danke dir für deinen Kommentar! (Über Feedback freut man sich immer ;) )
Normalerweise sollte das auch super mit 2 Webbrowserelementen parallel klappen. (Vor allem wenn deine Methoden richtig sind, da es hintereinander ja funktioniert….)
Hast du 2 verschiedene Eventhandler? (Für jeden Browser einen) Oder verwendest du einen Eventhandler für beide?
Was einem nämlich schnell mal passieren kann, ist dass du an folgendem Punkt vielleicht ausversehen den Namen eines Webbrowser genommen hast.:
if (webBrowserLogin.Url.ToString() == "http://www.arcor.de/")
{
...

Wenn du 2 Browser hast muss die Abfrage bei einem Eventhandler natürlich “doppelt” rein.
Wenn dir das hier als Hilfe nicht gereicht haben sollte, kannst du mir den Quelltext gern auch per Email (Kontaktformular, natürlich ohne deine Passwörter für die Seiten) zukommen lassen, dann schau ich nochmal direkt drüber.

Liebe Grüße,
Raffi

gravatar
xyz-Mann sagte am         
07 August 2009 um 08:03:50

huhu ich hoffe ich finde hier hilfe ^^

also ich ahbe etwas ähnliches wie du geschirben aber habe ein problem…

ich möchte per klick mehere methoden aufrufen… zum beispiel die login()

private void B_Start_Click(object sender, EventArgs e)
{
Login();

in diese steht dann:

public void Login()
{
Browser.Navigate(“http://213.133.xxx.xxx/login.php”);
System.Threading.Thread.Sleep(10000);
Browser.Document.All["username"].InnerText = T_User.Text;
Browser.Document.All["password"].InnerText = T_Password.Text;
Browser.Document.All["submit"].InvokeMember(“Click”);
System.Threading.Thread.Sleep(10000);
}

so ich habe shcon extra sleeps eingebaut aber der browser mag nciht die login.php laden und stürzt damit logischer weise bei der einegabe der benutzerdaten ab …

irwie fehlt mir wohl ein befehl damit er die seite auch wirklich lädt….

ich möchte es nciht über die:

private void Browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)

realisieren denn dann müsste ich da alle funktionen rein verschachteln……

hoffe du kannst mir helfen irgendwie dieses “laden” der seite zu realiesieren …

danke schomal =)

gravatar
Raffi sagte am         
07 August 2009 um 08:59:20

Hallo xyz-Mann,
um
private void Browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
wirst du nciht herumkommen, da dieses genau den Effekt umgeht, der bei dir Auftritt. DocumentCompleted greift erst dann, wenn deine Login Seite komplett geladen und angezeigt ist.

Deine Lösung funktioniert nicht, weil du keine Zeit zum Laden der Seite lässt. Du lässt den Thread zwar 10 Sekunden “schlafen”, aber dann schläft er auch komplett – lädt also auch deine Loginseite in der Zeit nicht!

Ich hoffe du konntest mir folgen…

Liebe Grüße,
Raffi

gravatar
xyz-Mann sagte am         
07 August 2009 um 16:41:30

hm blöd ja ich kann dir folgen…

nur wollte ich der besseren übersicht wegen eben genau das umgehen…

es gibt also keinen weg c# zu sagen lade die seite fertig und mache dann weiter? also in einer methode…?

sonst müsste ich ja alles in die Browser_DocumentCompleted methode rein bring das wird dann so schnell unübersichtlich -.-

gravatar
Raffi sagte am         
07 August 2009 um 17:48:40

Du könntest nach dem Navigate("http://www.xyz.de");
einen Timer starten und mit diesem in bestimmten Intervallen prüfen, ob der Webbrowser die Seite geladen hat (Stichwort: Webbrowser State).
Ob das nun übersichtlicher ist, musst du für dich selbst entscheiden.

Liebe Grüße,
Raffi

gravatar
xyz-Mann sagte am         
07 August 2009 um 19:38:04

klingt gut da könnte ich den timer ja auch immer so anpassen je nachdem wie schnell meine internetleitung ist =)

kannst du mir jetzt noch sagen wie man einen timer programmiert und wie man den status abfragt?

scho mal big thx für die hilfe =)

gravatar
Raffi sagte am         
07 August 2009 um 20:13:44

Die einfach Variante wäre das Timer Control aus der Toolbox vom Visual Studio auf dein Form zu ziehen. Den Intervall gibst du in Millisekunden (Bsp. 5000 = 5Sek.) bei der Value “Interval” im Eigenschaftenfenster des Visualstudio ein.
Der Code der ausgeführt werden soll kommt in den TickEventhandler, den du ebenfalls über das Eigenschaftenfenster im Visualstudio erreichst.

Solltest du deine Programme nicht mit dem Visual Studio entwickeln, dann kannst du dir deinen Timer auch so erstellen.


private void TimerErstellen()
{
Timer marfsTimer = new Timer();
marfsTimer.Interval = 5000;
marfsTimer.Tick += new EventHandler(marfsTimer_Tick);
}

void marfsTimer_Tick(object sender, EventArgs e)
{
MessageBox.Show("Der Timer wurde soeben ausgelöst!");
}

Den Status des WebbrowserControls fragst du wiefolgt ab…


if (MarfsWebbrwoser.ReadyState)
{
MessageBox.Show("Das Dokument wurde geladen!");
}
else
{
MessageBox.Show("Das Dokument lädt noch...");
}

Bei if (webbrowser.ReadyState) … handelt es sich um eine Kurzschreibweise. ReadyState liefert einen boolschen Wert. Heißt ausgeschrieben heißt es:


if (MarfsWebbrwoser.ReadyState == true)
{
MessageBox.Show("Das Dokument wurde geladen!");
}
else
{
MessageBox.Show("Das Dokument lädt noch...");
}

Ich hoffe ich konnte dir und natürlich auch allen anderen Lesern helfen!

Liebe Grüße,
Raffi

gravatar
xyz-Mann sagte am         
07 August 2009 um 22:39:03

huhu irwie funzt das nicht =(

er übergeht einfach meine timer führt sie nicht aus…
problematic ist ja auch das ich alles was NACH dem timer passieren soll wieder in eine extra funktion schreiben muss -.- …

ich wollte einfach EINE methode… aber ok zu meinen prob:

private void TimerErstellen()
{
Timer marfsTimer = new Timer();
marfsTimer.Interval = 5000;
}

public void Login()
{
Browser.Navigate(”http://213.133.xxx.xxx/login.php”);
Timererstellen();
Browser.Document.All["username"].InnerText = T_User.Text;
Browser.Document.All["password"].InnerText = T_Password.Text;
Browser.Document.All["submit"].InvokeMember(”Click”);
}

so gings nicht wenn ich die methode aufgerufen habe überging er den timer…(aber wenn es so ähnlich am ende aussehen könnte wäre super… da brauch ich für alle methoden dann immer nur diesen timer aufrufen und fertig…)

andere variante

private void LoginTimer()
{
Browser.Navigate(”http://213.133.xxx.xxx/login.php”);
Timer marfsTimer = new Timer();
marfsTimer.Interval = 5000;
marfsTimer.Tick += new EventHandler(Login_Tick);
}

void Login_Tick(object sender, EventArgs e)
{
Browser.Document.All["username"].InnerText = T_User.Text;
Browser.Document.All["password"].InnerText = T_Password.Text;
Browser.Document.All["submit"].InvokeMember(”Click”);
}

ging leider auch nicht er übergeht einfach alles…. so ist es auch bisl blöd weil da brauch ich ziemlich viele timer in meinen programm =(…

es muss doch eine einfache lösung fürn son schrott geben ….. hilf mir bitte ^^

kann ich evtl deine email haben oder icq etc?! dann geht sowas schneller ^^ *g*

und nochmal danke für deine hilfe…

gravatar
DerDeveloperInCSharp sagte am         
31 August 2009 um 10:28:45

Hallo Raffi,

ich finde deinen Artike sehr hilfreich, würde mir aber wünschen, dass du bald den 2ten Artikel verööfentlichst, da ich das nicht gerne über das WebBrowser Control mache.

5*/5*

MfG DerDeveloperInCSharp

gravatar
DerDeveloperInCSharp sagte am         
29 September 2009 um 08:55:28

Hey Raffi,

ich finde es schade, dass du dich nicht mal meldest, bezüglich des Artikels… könntest ja hier mal kommentieren, wie der aktuelle stand der Dinge ist…

naja bis dahin… greez Sebastian

gravatar
Raffi sagte am         
30 September 2009 um 15:17:22

Nun ist’s soweit – hier gibt’s den zweiten Artikel! >> http://www.net-blog.net/blog/index.php/2009/09/30/c-login-auf-webseiten-per-httpwebrequest-und-httpwebresponse/

gravatar
Dominik sagte am         
12 November 2009 um 20:40:21

Vielen Dank für das Tutorial sehr hilfreich!

gravatar
MKane sagte am         
22 April 2010 um 20:30:39

Hallo !
Erstmal Danke für dieses super Tut!.

Und dann auch gleich zu meiner Frage:
Alles beschriebene funktioniert einwandfrei, allerdings bekomme ich eine Sache nicht in den Griff. Ich logge mich auf meinem Homeserver ein, soweit alles OK, dann allerdings bekomme ich ein PopUp (“Meldung von Webseite” – Okay/Abbrechen) welches nochmals per OK bestätigt werden muss. Hast du dazu auch evtl ne Lösung bzw ein Tip/Denkanstoss parat ?

Gruß, Mike

gravatar
Raffi sagte am         
06 Mai 2010 um 23:31:03

Spontan fällt mmir da nichts ein.
Was zwar funktionieren würde, aber sehr umständlich ist. Den HTML-Code per HttpWebRequest herunterzuladen.
Den JS Code, der für die Alerts (PopUps) zuständig ist, herausparsen (zum Beispiel mit RegEx) und dann den HTML-Code im WebbrowserControl anzeigen zu lassen. Das Wäre quasi eine Mischung aus diesem Artikel und dem zweiten Artikel zum Thema Logins den ich verfasst hab.

Viele Grüße,
Raffi

gravatar
ed hardy clothing sagte am         
28 Juli 2010 um 06:57:57

wansantg3hy

gravatar
vibram five fingers shoes sagte am         
28 Juli 2010 um 07:04:38

Spontan fällt mmir da nichts ein.
Was zwar funktionieren würde, aber sehr umständlich ist. Den HTML-Code per HttpWebRequest herunterzuladen.

Hallo! Bitte hierlasse mit einen Kommentar.

  Nickname (benötigt)

  Email (benötigt)

  Website

Hinterlasse einen Kommentar

Abonniere den Kommentarfeed (Comment Rss) oder schicke einen TrackBack

Hallo!

Kategorien

Kalendar

März 2009
M D M D F S S
« Feb   Apr »
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

Counter


    Besucherstatistik
    Besucher gesamt: 144.811
    Besucher heute: 61
    Besucher gestern: 105
    Max. Besucher pro Tag: 629
    gerade online: 2
    max. online: 89
    Seitenaufrufe gesamt: 396.964
    Seitenaufrufe diese Seite: 6.762
    Counterstart: 13.10.2008

Meta