2010-02-17 10 views
9

J'essaie d'écrire un programme Java qui peut se connecter automatiquement à Facebook.Comment se connecter à Facebook par programmation en utilisant Java?

J'ai le code ci-dessous jusqu'à présent qui télécharge la page html à la maison dans une chaîne mais ne sais pas comment envoyer l'email et le mot de passe pour se connecter à Facebook? Le programme Java devra-t-il également gérer les cookies retournés pour rester connecté?

public static void main(String[] args) throws Exception { 
     URL url = new URL("http://www.facebook.com/"); 
     URLConnection yc = url.openConnection(); 
     BufferedReader in = new BufferedReader(new InputStreamReader(yc 
       .getInputStream())); 
     String inputLine; 
     String allInput = ""; 

     while ((inputLine = in.readLine()) != null) { 

      allInput += inputLine + "\r\n"; 
     } 
     System.out.println(allInput); 

     in.close(); 
    } 

}

Mise à jour:

J'ai essayé le code ci-dessous à l'aide HtmlUnit mais je reçois l'exception suivante:

Exception in thread "main" com.gargoylesoftware.htmlunit.ElementNotFoundException:  elementName=[form] attributeName=[name] attributeValue=[login_form] at com.gargoylesoftware.htmlunit.html.HtmlPage.getFormByName(HtmlPage.java:588) 

Quelqu'un sait pourquoi il en est?

final WebClient webClient = new WebClient(); 
    final HtmlPage page1 = webClient.getPage("http://www.facebook.com"); 
    final HtmlForm form = page1.getFormByName("login_form"); 

    final HtmlSubmitInput button = (HtmlSubmitInput) form.getInputsByValue("Login").get(0); 
    final HtmlTextInput textField = form.getInputByName("email"); 
    textField.setValueAttribute("[email protected]"); 
    final HtmlTextInput textField2 = form.getInputByName("pass"); 
    textField2.setValueAttribute("ahhhh"); 
    final HtmlPage page2 = button.click(); 
+0

Mais je reçois quelques exceptions comme Exception dans le thread "principal" java.lang.NoClassDefFoundError: org/apache/communes/httpclient/protocole/ProtocolSocketFactory. Pouvez-vous spécifier quelle version de Htmlunit jar doit être téléchargée juste pour s'assurer que j'ai fait la bonne chose? – lulu

Répondre

12

Vous devriez jeter un oeil à HTMLUnit, ce sera beaucoup plus simple que d'utiliser ce qui précède. La page et le code ci-dessous devraient vous guider:

final WebClient webClient = new WebClient(); 
final HtmlPage page1 = webClient.getPage("http://www.facebook.com"); 
final HtmlForm form = page1.getFormByName("login_form"); 

final HtmlSubmitInput button = form.getInputsByValue("Log in"); 
final HtmlTextInput textField = form.getInputByName("email"); 
textField.setValueAttribute("[email protected]jon.com"); 
final HtmlTextInput textField = form.getInputByName("pass"); 
textField.setValueAttribute("ahhhh"); 
final HtmlPage page2 = button.click(); 

http://htmlunit.sourceforge.net/gettingStarted.html

+1

Merci pour la réponse. J'ai essayé le code (voir la mise à jour ci-dessus) cependant j'obtiens une exception d'élément non trouvé pour le formulaire de connexion pour une raison quelconque? Une idée pourquoi? –

+0

C'est le premier formulaire sur la page, vous devriez donc pouvoir l'obtenir via la méthode getForms() [0]. Vous pourriez avoir du mal à soumettre le formulaire, mais je suis sûr que c'est possible via HttpUnit. – Jon

+0

Et comment obtenez-vous des données retournées, comme le jeton de session, avec ceci? – Ixx

11

Il y a quelques problèmes dans votre code

  1. est que login_form est pas le nom de la forme, mais la forme ID
  2. la soumettre la valeur du bouton i Log In
  3. le type de champ de mot de passe est HtmlPasswordInput

donc:

final WebClient webClient = new WebClient(); 
final HtmlPage page1 = webClient.getPage("http://www.facebook.com"); 
final HtmlForm form = (HtmlForm) page1.getElementById("login_form"); 

final HtmlSubmitInput button = (HtmlSubmitInput) form.getInputsByValue("Log In").get(0); 
final HtmlTextInput textField = form.getInputByName("email"); 
textField.setValueAttribute("[email protected]"); 
final HtmlPasswordInput textField2 = form.getInputByName("pass"); 
textField2.setValueAttribute("ahhhh"); 
final HtmlPage page2 = button.click(); 
+0

merci pour le code .. m'a aidé à résoudre les erreurs avec verison antérieure –

Questions connexes