Comment puis-je remplir un formulaire en ligne avec Java?
Mon fournisseur de téléphonie cellulaire offre un nombre limité de messages texte gratuits sur leur site Web. J'utilise fréquemment le service bien que je déteste avoir toujours un onglet ouvert dans mon navigateur.
Est-ce que quelqu'un sait/me pointe dans la bonne direction de la façon dont je pourrais créer un fichier jar/utilitaire de ligne de commande afin que je puisse remplir les formulaires appropriés sur le site. J'ai toujours voulu coder un projet comme celui-ci en Java, juste au cas où quelqu'un me demanderait pourquoi je n'utilise pas autre chose.
Type Égard, Lar
8 answers
Utilisez Watij avec l'E Eclipse. Lorsque vous avez terminé, compilez comme un .exe ou exécuter avec un fichier batch.
Voici un exemple de code que j'ai écrit pour remplir des champs pour une recherche Google, qui peut être ajusté pour le formulaire Web que vous souhaitez contrôler :
package goog;
import junit.framework.TestCase;
import watij.runtime.ie.IE;
import static watij.finders.SymbolFactory.*;
public class GTestCases extends TestCase {
private static watij.runtime.ie.IE activeIE_m;
public static IE attachToIE(String url) throws Exception {
if (activeIE_m==null)
{
activeIE_m = new IE();
activeIE_m.start(url);
} else {
activeIE_m.goTo(url);
}
activeIE_m.bringToFront();
return (activeIE_m);
}
public static String getActiveUrl () throws Exception {
String currUrl = activeIE_m.url().toString();
return currUrl;
}
public void testGoogleLogin() throws Exception {
IE ie = attachToIE("http://google.com");
if ( ie.containsText("/Sign in/") ) {
ie.div(id,"guser").link(0).click();
if ( ie.containsText("Sign in with your") ||
ie.containsText("Sign in to iGoogle with your")) {
ie.textField(name,"Email").set("[email protected]");
ie.textField(name,"Passwd").set("test");
if ( ie.checkbox(name,"PersistentCookie").checked() ){
ie.checkbox(name,"PersistentCookie").click();
}
ie.button(name,"signIn").click();
}
}
System.out.println("Login finished.");
}
public void testGoogleSearch() throws Exception {
//IE ie = attachToIE( getActiveUrl() );
IE ie = attachToIE( "http://www.google.com/advanced_search?hl=en" );
ie.div(id,"opt-handle").click();
ie.textField(name,"as_q").set("Watij");
ie.selectList(name,"lr").select("English");
ie.button(value,"Advanced Search").click();
System.out.println("Search finished.");
}
public void testGoogleResult() throws Exception {
IE ie = attachToIE( getActiveUrl() );
ie.link(href,"http://groups.google.com/group/watij").click();
System.out.println("Followed link.");
}
}
On dirait que vous avez besoin d'un framework conçu pour faire des tests fonctionnels. Ceux-ci agissent comme des navigateurs et peuvent naviguer sur des sites Web pour les tests et l'automatisation. Vous n'avez pas besoin de la fonctionnalité de test, mais cela répondrait toujours à vos besoins.
Essayez HtmlUnit, ou LiFT, qui est une abstraction de niveau supérieur construite sur HtmlUnit.
Cela dépend de la façon dont ils envoient les informations du formulaire.
S'ils utilisent une simple requête GET, il vous suffit de remplir les paramètres d'URL appropriés.
Sinon, vous devrez publier les informations du formulaire sur la page cible.
Vous pouvez utiliser Watij, qui fournit une interface Java/COM sur Internet Explorer. Ensuite, écrivez une petite quantité de code Java pour naviguer dans le formulaire, insérer des valeurs et soumettre.
Alternativement, si c'est simple, alors consultezHttpClient , qui est une simple API Java HTTP client.
Quoi que vous fassiez, veillez à ne pas enfreindre vos conditions d'utilisation (facile lors des tests - peut-être devriez-vous travailler contre une interface simulée au départ?)
WebTest est encore un autre framework de test webapp qui peut être plus facile à utiliser que les alternatives citées par d'autres.
Consultez le Paquet Apache Commons Net. Là, vous pouvez envoyer une demande de publication à une page. C'est un niveau assez bas mais peut faire ce que vous voulez (sinon, vous pouvez consulter les suites de tests fonctionnels, mais ce n'est probablement pas aussi facile à explorer).