Entwickler-Ecke

WinForms - Automatisches einloggen auf Webseite - Button drücken


Lihlu - Mi 29.07.15 15:05
Titel: Automatisches einloggen auf Webseite - Button drücken
Hallo ich bin gerade dabei ein Programm zu schreiben, was mich automatisch auf die Weboberfäche einens Lancoms AccesPoints einloggt.

Soweit klappt es das er den Login namen und das Passwort einträgt.

Nur den Button kann mein Programm nicht drücken :( Da ich im quellcode kein "name" für den button finde.


HTML-Dokument
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
</div>
<div class="logincontent">
<div class="login">
 <h1> Lancom-WLC1 </h1>
<div id="leftDiv">
<img style="border:0" src="/images/prodimg.jpeg" alt=" LANCOM WLC-4025+">
</div>
<div id="rightDiv">
 <form method="POST" action="/?JavaScriptDisabled" name="loginform" onsubmit="replaceParam()">
   <table border="0" cellpadding="3" cellspacing="0" class="centeredTable">
     <tr>
       <td align="left"> Login</td>
       <td>  <input type="text" name="loginname"  class="Feld" size="30" maxlength="16"></td>
     </tr>
     <tr>
       <td align="left"> Passwort</td>
       <td>  <input name="passwort" type="password" class="Feld" size="30" maxlength="16"> </td>
     </tr>
     <tr>
       <td></td><td><button TYPE="submit"class="Button" accesskey="o" ><span style="text-decoration:underline">O</span>k</button>
       </td>
     </tr>
   </table>
 </form>
<script type="text/javascript">
  document.forms[0].elements[0].focus();
</script>


Mein C# Code:

C#-Quelltext
1:
2:
3:
webBrowser1.Document.GetElementById("loginname").InnerText =textBox1.Text.ToString();
webBrowser1.Document.GetElementById("passwort").InnerText = textBox2.Text.ToString();
webBrowser1.Document.GetElementById("KEINE AHNUNG").InvokeMember("click");


Der Buton hat keine ID oder ähnliches ...
Wie kann ich möglichst simple diesen button drücken o: ?

Vielen lieben dank


Th69 - Mi 29.07.15 18:07

Du könntest mal eine der anderen Methoden der HtmlDocument-Klasse [https://msdn.microsoft.com/de-de/library/system.windows.forms.htmldocument%28v=vs.110%29.aspx] benutzen, z.B. GetElementsByTagName [https://msdn.microsoft.com/de-de/library/system.windows.forms.htmldocument.getelementsbytagname%28v=vs.110%29.aspx] (d.h. mit "button" als Parameter).

Alternativ über die Eigenschaft Forms [https://msdn.microsoft.com/de-de/library/b2z10khc%28v=vs.110%29.aspx] den Button suchen (bzw. dessen InvokeMember-Methode aufrufen).

PS: Text ist schon ein string, daher reicht textBox1.Text


Ralf Jansen - Mi 29.07.15 18:27

Du brauchst nicht den Button sondern die form und dort kannst du dann den submit auslösen.


C#-Quelltext
1:
webBrowser1.Document.GetElementById("loginform").InvokeMember("submit");                    


Lihlu - Do 30.07.15 07:14

Super ! Danke euch beiden! Das klappt einwandfrei =)

Vielen Dank und einen angenehmen Tag :p


Lihlu - Mo 08.08.16 08:45

Hallo zusammen,

ich öffne dieses Thema noch einmal da es sich auf das gleiche bezieht.

Ich habe den Lancom AccessPoint geupdated. Nun hat dieser aber leider SSL. Wie ich die Meldungen ignoriere habe ich bereits erfolgreich gelöst.

Leider nimmt mein Programm aber nun den "Submit" Button nicht mehr an. Für mich als Laie hat sich aber im HTML Quelltext vom "Submit" namen her nichts geändert.
(Wenn ich mit der Maus im WebBrowser clicke klappt auch alles)

Als erstes noch mal der HTML Code:

HTML-Dokument
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
<html><head>
<link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon">
<title>Lancom-WLC1 - Login</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<script type="text/javascript">
function replaceParam(){
  var newParam = "Enabled";
  document.loginform.action = document.loginform.action.replace(/Disabled$/,newParam);
}

</script>

<link rel="stylesheet" type="text/css" href="/css/login.css">
    </head><body><div class="header">
<p class="headerp">LANCOM WLC-4025+</p>
</div>
<div class="logincontent">
<div class="login">
 <h1> Lancom-WLC1 </h1>
<div id="leftDiv">
<img style="border:0" src="/images/prodimg.jpeg" alt=" LANCOM WLC-4025+">
</div>
<div id="rightDiv">
 <form method="POST" action="/?JavaScriptDisabled" name="loginform" onsubmit="replaceParam();calculatehashthensubmit();">
   <table border="0" cellpadding="3" cellspacing="0" class="centeredTable">
     <tbody><tr>
       <td align="left"> Login</td>
       <td>  <input type="text" name="loginname" class="Feld" size="30" maxlength="16" data-cip-id="cIPJQ342845639" autocomplete="off"></td>
     </tr>
     <tr>
       <td align="left"> Passwort</td>
       <td>  <input name="passwort" type="password" class="Feld" size="30" maxlength="40" data-cip-id="cIPJQ342845640"> </td>
       <td>  <input name="challenge" type="hidden" value="5273a1ac2f533cecd643928cc7fc981f259947abc2082628965f2bc7a3919982"> </td>
       <td>  <input name="hashpasswort" type="hidden" value=""> </td>
     </tr>
     <tr>
       <td></td><td><button type="submit" class="Button" accesskey="o"><span style="text-decoration:underline">O</span>k</button>
       </td>
     </tr>
   </tbody></table>
 </form>
<script type="text/javascript">
  document.forms[0].elements[0].focus();
</script>

<noscript>
<span style="color:red"><p>Ein Webbrowser mit aktiver <a href="http://wikipedia.org/wiki/JavaScript">JavaScript</a> Unterst&uuml;tzung ist Voraussetzung.</p></span>
</noscript>
<a href="https://IP-Adresse">Verschlüsselte Verbindung.</a>
</div>
<div style="clear:both"></div></div>
<script type="text/javascript" charset="utf-8" src="/js/sjcl.js"></script>
<script type="text/javascript" charset="utf-8">
function hexStringToBytes(hex){
for (var bytes=[],c=0;c<hex.length;c+=2)
  bytes.push(parseInt(hex.substr(c,2),16));
return bytes;}
function calculatehashthensubmit(){
  var pwd = document.getElementsByName("challenge")[0].value + document.getElementsByName("passwort")[0].value;
  var bitArray = sjcl.hash.sha256.hash(pwd);
document.getElementsByName("hashpasswort")[0].value = sjcl.codec.hex.fromBits(bitArray);
document.getElementsByName("passwort")[0].disable = true;
document.getElementsByName("challenge")[0].disable = true;
return true;}
</script>
    </div>
</body></html>


und noch mal mein C# Submit Code.
Habe es mit diesen 3 versucht:


C#-Quelltext
1:
2:
3:
4:
 
//webBrowser1.Document.GetElementsByTagName("submit").GetElementsByName("button")[0].Focus();
                    //webBrowser1.Document.GetElementById("submit").InvokeMember("click");
                   // webBrowser1.Document.GetElementById("loginform").InvokeMember("submit");


Wisst ihr warum der automatische Login nicht mehr klappt ?

Vielen Dank

EDIT:

Ich sehe gerade das ich bei:


C#-Quelltext
1:
webBrowser1.Document.GetElementById("loginform").InvokeMember("submit");                    


Diese Meldung bekomme:
Sie haben entweder kein, ein ungültiges Passwort eingegeben oder die Challenge ist abgelaufen

Wie gesagt, wenn ich manuell den "OK" Button drücke kann ich mich ein loggen und er erstellt das Ticket. Also scheint es das ich ein paar Werte nicht mit gebe. Kann das sein ?