Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 11:54

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



C# WebBrowser-> Facebook logout

Discussion on C# WebBrowser-> Facebook logout within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 300
Join Date: Apr 2013
Posts: 3,234
Received Thanks: 1,205
C# WebBrowser-> Facebook logout

Hey, ich möchte mich mit dem WebBrowser automatisch von Facebook ausloggen.

Mein Code dazu:

Code:
private void logout()
        {
            webBrowser1.Document.GetElementById("pageLoginAnchor").InvokeMember("click");
            


            HtmlElementCollection theElementCollection = default(HtmlElementCollection);
            theElementCollection = webBrowser1.Document.GetElementsByTagName("a");     
            foreach (HtmlElement curElement in theElementCollection)
            {
                if (curElement.GetAttribute("className").ToString() == "uiLinkButton navSubmenu")
                {
                    curElement.InvokeMember("click");
                }
            }
        }
Er öffnet dieses DropDown Menü bei Facebook, klickt dann aber nicht auf "Abmelden".

Habe schon mit className = "uiLinkButtonInput" probiert und über ID.
#Saiirex is offline  
Old 10/07/2014, 17:59   #2

 
Terreox's Avatar
 
elite*gold: 155
Join Date: Aug 2009
Posts: 628
Received Thanks: 153
Dein Code funktioniert vermutlich nicht, weil du nach anchor-Elementen suchst.
Bei mir ist uiLinkButtonInput allerdings ein submit Button und somit ein input-Element.

Vielleicht solltest du eher nach input-Elementen suchen und aus diesen das Element mit der entsprechenden Klasse rausfiltern.
Es ist übrigens einfacher das Element mit der Id logout_form zu holen und dort nach dem Abmelden-Button zu suchen. Wenn man etwas bestimmtes haben will, dann fängt man normalerweise immer an dem nächsten Element mit einer Id an zu suchen.

Sofern du XPath nutzen kannst, sollte dieser Pfad auch zum gewünschten Element führen:
//*[@id="logout_form"]/label/input[@class="uiLinkButtonInput"]
Terreox is offline  
Old 10/07/2014, 19:34   #3
 
elite*gold: 300
Join Date: Apr 2013
Posts: 3,234
Received Thanks: 1,205
Quote:
Originally Posted by Terreox View Post
Dein Code funktioniert vermutlich nicht, weil du nach anchor-Elementen suchst.
Bei mir ist uiLinkButtonInput allerdings ein submit Button und somit ein input-Element.

Vielleicht solltest du eher nach input-Elementen suchen und aus diesen das Element mit der entsprechenden Klasse rausfiltern.
Es ist übrigens einfacher das Element mit der Id logout_form zu holen und dort nach dem Abmelden-Button zu suchen. Wenn man etwas bestimmtes haben will, dann fängt man normalerweise immer an dem nächsten Element mit einer Id an zu suchen.

Sofern du XPath nutzen kannst, sollte dieser Pfad auch zum gewünschten Element führen:
//*[@id="logout_form"]/label/input[@class="uiLinkButtonInput"]
Wenn du mir noch sagst wie ich das jetzt anwende...^^

Was mir auf dem Heimweg noch eingefallen ist:

Es könnte ja auch darin liegen dass, das Programm zu schnell ist? Das heißt es sucht nach dem Element wobei das Dropdown Menü noch gar nicht da ist?
#Saiirex is offline  
Old 10/08/2014, 16:43   #4
 
Assault IX's Avatar
 
elite*gold: 12
Join Date: Jun 2012
Posts: 782
Received Thanks: 215
Quote:
Originally Posted by xKoRe' View Post
Wenn du mir noch sagst wie ich das jetzt anwende...^^

Was mir auf dem Heimweg noch eingefallen ist:

Es könnte ja auch darin liegen dass, das Programm zu schnell ist? Das heißt es sucht nach dem Element wobei das Dropdown Menü noch gar nicht da ist?
WebBrowser.DocumentCompleted
Assault IX is offline  
Old 10/08/2014, 20:42   #5


 
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
Wieso quälst du dich eigentlich mit der WebBrowser Klasse ab? Facebook kann man sicherlich genauso gut mit simplen HTTP Requests steuern.

Btw. nutzt man XPath um Elemente im Html Source zu selektieren. Der String stellt (wie der Name schon sagt) einen Pfad dar, der den Weg zum Element markiert und der definitiv übereinstimmen muss.

So wie ich das sehe hast du sowieso keinen Support für XPath mit der WebBrowser Klasse. Müsstest also sowieso noch ne zusätzliche Html Parsing Library nutzen um das zu erreichen, was du möchtest.
Mostey is offline  
Old 10/08/2014, 20:51   #6
 
elite*gold: 300
Join Date: Apr 2013
Posts: 3,234
Received Thanks: 1,205
Mit httpwebrequest habe ich es schon probiert und es war nicht unbedingt leichter..
#Saiirex is offline  
Old 10/08/2014, 21:17   #7
 
tolio's Avatar
 
elite*gold: 2932
The Black Market: 169/1/0
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
Quote:
Originally Posted by Mostey View Post
Wieso quälst du dich eigentlich mit der WebBrowser Klasse ab? Facebook kann man sicherlich genauso gut mit simplen HTTP Requests steuern.
das unterschreibe ich gerne genau so


Quote:
Originally Posted by Mostey View Post
Btw. nutzt man XPath um Elemente im Html Source zu selektieren. Der String stellt (wie der Name schon sagt) einen Pfad dar, der den Weg zum Element markiert und der definitiv übereinstimmen muss.

So wie ich das sehe hast du sowieso keinen Support für XPath mit der WebBrowser Klasse. Müsstest also sowieso noch ne zusätzliche Html Parsing Library nutzen um das zu erreichen, was du möchtest.
das ist mit sicherheit geschmackssache ob man nen parser will oder das ganze einfach auf string ebene löst, split, indexof, substring, etc
tolio is offline  
Old 10/08/2014, 22:33   #8

 
Terreox's Avatar
 
elite*gold: 155
Join Date: Aug 2009
Posts: 628
Received Thanks: 153
Quote:
Originally Posted by xKoRe' View Post
Wenn du mir noch sagst wie ich das jetzt anwende...^^

Was mir auf dem Heimweg noch eingefallen ist:

Es könnte ja auch darin liegen dass, das Programm zu schnell ist? Das heißt es sucht nach dem Element wobei das Dropdown Menü noch gar nicht da ist?
Wenn du deinen Code nicht einfach per Copy&Paste bekommen hast und weißt, was dieser tut, dann sollte die Suche nach den input Elementen kein Problem für dich sein.

Soweit ich das jetzt auf die schnelle gesehen habe, kann man mit dem Webbrowser Control keine XPaths benutzen, dafür bräuchte man z.B. das HtmlAgilityPack.

Es kommt jetzt drauf an, was du mit deinem Programm machen willst.

Wenn du nicht auf das Webbrowser Control angewiesen bist und dir eine eigene Facebookapp bauen willst, so kannst du auch super die GraphAPI von Facebook selbst benutzen ->

Wenn du das Webbrowser Control benutzen willst, dann kannst du zunächst, wie bereits von Assault IX vorgeschlagen, auf das Event warten und dann halt das Element des Logout Buttons raussuchen und klicken.
Ansonsten musst du nicht darauf warten, bis irgendein Menü ausgeklappt ist.
Das Ausklappen ist nur ein visueller Effekt für den Benutzer. Im Hintergrund ist der ganze Code bereits da, sprich selbst wenn das Logoutmenü nicht ausgeklappt ist, existiert bereits ein Logoutbutton.
Terreox is offline  
Old 10/09/2014, 21:38   #9


 
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
Quote:
Originally Posted by tolio View Post
das ist mit sicherheit geschmackssache ob man nen parser will oder das ganze einfach auf string ebene löst, split, indexof, substring, etc
Alles ist Geschmackssache, allerdings sehe ich nicht wirklich den Sinn sich es hier ebenfalls schwer zu machen wenn man sauberen und wartbaren Code mit einer Html Parsing Library schreiben kann.

Für kleine Sachen sicherlich ganz nett, für größeres allerdings eher ungeeignet.
Mostey is offline  
Old 10/09/2014, 22:17   #10
 
tolio's Avatar
 
elite*gold: 2932
The Black Market: 169/1/0
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
naja das problem mit den parsern was ich sehe ist halt das ganze funktioniert zuverlässig nur solange wie die seiten entsprechend die html standards einhalten, in zeiten in denen browser alles unkonforme eh selbstständig ausbessern fallen die ein oder andere fehler nicht auf. mit nem parser steht man dann da. desweiteren ist das eine abhängigkeit von externer software und das die alles richtig programmiert haben.

was an folgendem bsp code schwerer oder nicht gut wartbar sein soll kann ich um ehrlich zu sein nicht nachvollziehen:

Code:
                string logintoken = loginPage.GetBetween("_token\" type=\"hidden\" value=\"","\"");

                if (logintoken.Length != 40)
                    throw new CreatorException("invalid token lenght!");
tolio is offline  
Old 10/10/2014, 17:31   #11


 
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
Quote:
Originally Posted by tolio View Post
naja das problem mit den parsern was ich sehe ist halt das ganze funktioniert zuverlässig nur solange wie die seiten entsprechend die html standards einhalten, in zeiten in denen browser alles unkonforme eh selbstständig ausbessern fallen die ein oder andere fehler nicht auf. mit nem parser steht man dann da. desweiteren ist das eine abhängigkeit von externer software und das die alles richtig programmiert haben.

was an folgendem bsp code schwerer oder nicht gut wartbar sein soll kann ich um ehrlich zu sein nicht nachvollziehen:

Code:
                string logintoken = loginPage.GetBetween("_token\" type=\"hidden\" value=\"","\"");

                if (logintoken.Length != 40)
                    throw new CreatorException("invalid token lenght!");
Also ich hatte noch nie Probleme, selbst bei epvp gab es noch nichts, was das .NET HtmlAgilityPack nicht parsen konnte. Und wir sitzen hier schon auf einem ziemlich hässlichen XHtml Gemisch.

Nebenbei sei noch erwähnt das dein Code Beispiel genau das wiederspiegelt was ich oben erwähnt habe. Es geht hier vermutlich um einen String den er braucht. Da ist das nicht sehr fatal, problematisch wird es aber erst, wenn es nicht bei einem String bleibt und er beispielsweise ganze Seiten parsen will.

Wenn du ein Beispiel benötigst:
Mostey is offline  
Reply


Similar Threads Similar Threads
logout ?
02/06/2014 - DarkOrbit - 9 Replies
Anyone know how I know that when my ship this map 5-3 catch palladium not log off ?
VB.net webbrowser statt in IE in zweitem webbrowser laden :((
07/19/2013 - .NET Languages - 2 Replies
Hallo alle zusammen. Mein Webbrowser klickt auf einen button, und dieser öffnet eine neue seite, die im IE geöffnet wird. Doch statt sie im IE zu öffnen, soll er sie in einem zweitem webbrowser auf einer anderen form öffnen.. Das problem dabei ist, dass ich soweit ich weiß nicht einfach den link nehmen kann und mit webbrowser.navigate dorthin kann, weil ich dabei eingeloggt bleiben muss. Ich weiß dass das Thema schon oft behandelt wurde, sowohl hier als auch woanderas, aber diese ganzen...
[Webbrowser] In Do Loop warten bis Webbrowser fertig geladen hat
02/21/2013 - .NET Languages - 3 Replies
Ich hab hier folgenden Code: With New StreamReader(path) Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete End While Dim question As String = .ReadLine RichTextBox1.Text = question WebBrowser1.Document.GetElementById("profile- input").SetAttribute("value", question)
Logout hack
07/23/2012 - DarkOrbit - 2 Replies
People,i cant use logout hack. it works for you?? Im using darkorbit helper program by gahn.
Logout
03/18/2009 - RF Online - 7 Replies
If I use alt ctrl delete and I close RF do I logout at the same second? If no is there any possible way to do this? Since I saw a lot of MAU who logouted in a sec.



All times are GMT +2. The time now is 11:54.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.