In diesem Tutorial möchte ich euch zeigen, wie ihr mithilfe von Java und relativ wenig arbeitsaufwand leicht einen Login auf beliebigen Webseiten automatisieren könnt. Ich werde dies an elitepvpers demonstrieren. Um dem ganzen einen kleinen Sinn zu geben, zeige ich zusätzlich, wie man die Zahl der ungelesenen Nachrichten sowie die Zahl von allen Nachrichten und die egold Nummer ausliest.
Wenn man den Code ausprobieren möchte, braucht man nur eine Javaumgebung und die jaunt library, die man sich kostenlos downloaden kann.
Achtung: Dieses TUT erklärt nicht wie man programmiert oder die Syntax zu Java. Auch werden keine HTML Sachen erklärt.
Schritt 1:
Simples GUI um die Daten strukturiert anzuzeigen. Diesen Code wird nicht weiter erklärt. Er dient einfach zur Erstellung eines GUI.
Code:
package elitepvpers_login;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.SwingConstants;
public class code extends JFrame {
JLabel lblNewLabel_1 = new JLabel("Private Messages:");
JLabel lblNewLabel_2 = new JLabel("elite Gold: ");
private JPanel contentPane;
public code() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JLabel lblNewLabel = new JLabel("Account Information: ");
lblNewLabel.setFont(new Font("Arial Black", Font.PLAIN, 23));
lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
lblNewLabel.setBounds(0, 11, 434, 28);
contentPane.add(lblNewLabel);
lblNewLabel_1.setFont(new Font("Arial", Font.PLAIN, 14));
lblNewLabel_1.setBounds(59, 89, 172, 22);
contentPane.add(lblNewLabel_1);
lblNewLabel_2.setFont(new Font("Arial", Font.PLAIN, 14));
lblNewLabel_2.setBounds(59, 122, 172, 22);
contentPane.add(lblNewLabel_2);
}
public static void main(String[] args) {
code frame = new code();
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
Einbindung der jaunt library
Code:
import com.jaunt.*; import com.jaunt.component.Form;
Deklaration 3 Variablen, in denen später die Informationen des eigenen Accounts gespeichert werden.
Code:
private String first_message_number;
private String second_message_number;
private JPanel contentPane;
private String e_gold;
JLabel lblNewLabel_1 = new JLabel("Private Messages:");
JLabel lblNewLabel_2 = new JLabel("elite Gold: ");
Adden zweier Funktionen in der Mainmethode. In der ersten Funktion befindet sich die ganze Logik, in der zweiten werden die Informationen in das Label geschrieben.
Code:
public static void main(String[] args) {
code frame = new code();
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
frame.login_to_epvp_and_extract_account_information();
frame.print_information();
}
Jetzt kommen wir zum wichtigen Part dieses Tutorials, nämlich der Automatisierung des Logins.
Zuerst erstellen wir einen UserAgent innerhalb eines try catches Blocks. Mithilfe dieses Agents können wir nachher Seiten besuchen und requests senden.
Code:
try{
UserAgent userAgent = new UserAgent();
}
catch(JauntException e){
System.err.println(e);
}
Automatisierung Login
Dieser Schritt kann mit zwei verschiedenen Methoden gelöst werden. Ich zeige beide, erkläre aber nur die zweite Methode, da ich bei der Ersten Bilder benötige und ich momentan noch nicht berechtigt bin, diese einzubinden.
Methode 1:
Code:
userAgent.sendHEAD("http://www.elitepvpers.com/forum/login.php?do=login");
userAgent.sendPOST("http://www.elitepvpers.com/forum/login.php?do=login",
"vb_login_username=your_username&vb_login_password=&cookieuser=1&s=&securitytoken=1424094481-c28dfbdcc8291a7d2ff82ae234a3fb7fb8188941&do=login&vb_login_md5password=827ccb0eea8a706c4c34a16891f84e7b&vb_login_md5password_utf=827ccb0eea8a706c4c34a16891f84e7b&logintoken=62f6c856ac739a0304385e654ed1ff8f37c873f2662a72ad1ecef05ef8abf450&agentspecs=271&methoduuidv2=1&loginuuidv2=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImlzcyI6Imh0dHA6XC9cL3d3dy5lbGl0ZXB2cGVycy5jb21cL2ZvcnVtIn0.ImRXcWNHeWI4bGxWRUhZXC9PRGhtTEN1eUFBenpnaW0yeE0weTczK1VJZGF0Ig.dRsAffBinNqNyQmFSN8mwIFvk2_C0PT6ycg6LaKKO1A");
Methode 2
Code:
userAgent.visit("http://www.elitepvpers.com");
Form form = userAgent.doc.getForm(0);
form.setTextField("vb_login_username", "your_username");
form.setTextField("vb_login_password", "your_password");
form.submit();
System.out.println("location:" + userAgent.getLocation());
Danach wird das erste Formular geholt.
Beim setTextField wird das username Textfeld mit dem Namen vb_login_username mit deinem username gefüllt. Um den Namen eines Feldes herauszufinden, klickt man rechtsklick auf das Feld, dann Element untersuchen und dort findet man den Namen des Elements.
Zum Schluss submitet man die Form und schickt sie somit an den Server zur Verarbeitung.
Mit dem Syste.out.print.ln kann man noch überprüfen, ob der Login geklappt hat, in dem die aktuelle location ausgibt.
Schritt 7
Finden und herauslesen der Account Infos im Quelltext.
Code:
Element elements = userAgent.doc.findFirst("<ul id=\"userbaritems\">");
String messages = elements.getElement(1).innerHTML();
int index = messages.lastIndexOf(",");
int index2 = messages.indexOf("Unread ");
first_message_number = messages.substring(index2+7, index);
index = messages.lastIndexOf(".");
index2 = messages.indexOf("Total ");
second_message_number = messages.substring(index2+6, index);
e_gold = elements.getElement(3).getElement(1).innerHTML();
Somit haben wir bereits alle Infos, die wir wollten. Nun kann man das noch schön darstellen, dieser Schritt gehört aber nicht mehr zum wsentlichen Part.
Code:
lblNewLabel_1.setText(lblNewLabel_1.getText() + first_message_number + "/" + second_message_number); lblNewLabel_2.setText(lblNewLabel_2.getText() + e_gold);
Der ganze Code:
Code:
package elitepvpers_login;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.SwingConstants;
import com.jaunt.*;
import com.jaunt.component.Form;
public class code extends JFrame {
private String first_message_number;
private String second_message_number;
private String e_gold;
JLabel lblNewLabel_1 = new JLabel("Private Messages:");
JLabel lblNewLabel_2 = new JLabel("elite Gold: ");
private JPanel contentPane;
public code() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JLabel lblNewLabel = new JLabel("Account Information: ");
lblNewLabel.setFont(new Font("Arial Black", Font.PLAIN, 23));
lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
lblNewLabel.setBounds(0, 11, 434, 28);
contentPane.add(lblNewLabel);
lblNewLabel_1.setFont(new Font("Arial", Font.PLAIN, 14));
lblNewLabel_1.setBounds(59, 89, 172, 22);
contentPane.add(lblNewLabel_1);
lblNewLabel_2.setFont(new Font("Arial", Font.PLAIN, 14));
lblNewLabel_2.setBounds(59, 122, 172, 22);
contentPane.add(lblNewLabel_2);
}
public void login_to_epvp_and_extract_account_information()
{
try{
UserAgent userAgent = new UserAgent();
/*userAgent.sendHEAD("http://www.elitepvpers.com/forum/login.php?do=login");
userAgent.sendPOST("http://www.elitepvpers.com/forum/login.php?do=login",
"vb_login_username=yourname&vb_login_password=&cookieuser=1&s=&securitytoken=1424094481-c28dfbdcc8291a7d2ff82ae234a3fb7fb8188941&do=login&vb_login_md5password=827ccb0eea8a706c4c34a16891f84e7b&vb_login_md5password_utf=827ccb0eea8a706c4c34a16891f84e7b&logintoken=62f6c856ac739a0304385e654ed1ff8f37c873f2662a72ad1ecef05ef8abf450&agentspecs=271&methoduuidv2=1&loginuuidv2=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImlzcyI6Imh0dHA6XC9cL3d3dy5lbGl0ZXB2cGVycy5jb21cL2ZvcnVtIn0.ImRXcWNHeWI4bGxWRUhZXC9PRGhtTEN1eFRxK3ViQzhqa3RJa2Jid2lxYlpGR3dcL3ppbW8zWFRreXRSckVBV3BQUDNXT1YrKzdadnVFa0F5RThOc3ljVk1rZnRUQWlUektCTUt0c3JkN1M1T0k4dkVsdWNjYmM2TVNVaGVlNzRLT1wvd00wNDhiK1N4UXJsZmNSUjhPcUhpNXFDdkpETXl6NkRkYVlEUDVtbTR2dFRweEwxU2ZOdjVJc3hsRkptMHpqMTA5M3Mrd29KOWdcL1ZhWkt6WjFMTmxoM2FXeGpuNWdITkxxYW9BQVZJVVNZeUFBenpnaW0yeE0weTczK1VJZGF0Ig.dRsAffBinNqNyQmFSN8mwIFvk2_C0PT6ycg6LaKKO1A");
*/
userAgent.visit("http://www.elitepvpers.com");
Form form = userAgent.doc.getForm(0);
form.setTextField("vb_login_username", "yourname");
form.setTextField("vb_login_password", "your_password");
form.submit();
System.out.println("location:" + userAgent.getLocation() + "");
Element elements = userAgent.doc.findFirst("<ul id=\"userbaritems\">");
String messages = elements.getElement(1).innerHTML();
int index = messages.lastIndexOf(",");
int index2 = messages.indexOf("Unread ");
first_message_number = messages.substring(index2+7, index);
index = messages.lastIndexOf(".");
index2 = messages.indexOf("Total ");
second_message_number = messages.substring(index2+6, index);
e_gold = elements.getElement(3).getElement(1).innerHTML();
}
catch(JauntException e){
System.err.println(e);
}
}
public void print_information()
{
lblNewLabel_1.setText(lblNewLabel_1.getText() + first_message_number + "/" + second_message_number);
lblNewLabel_2.setText(lblNewLabel_2.getText() + e_gold);
}
public static void main(String[] args) {
code frame = new code();
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
frame.login_to_epvp_and_extract_account_information();
frame.print_information();
}
}
Das wäre es schon. Ich entschuldige mich bereits im Voraus für Schreibfehler oder Unklarheiten, welche wahrscheinlich häufig vorkommen werden. Meine elementare Absicht mit diesem Tut war, euch die Einfachheit der Webautomatisierung mit Java aufzuzeigen.
Mit freundlichen Grüssen
w1nst0ne






inkl. MD5 Hash vom Passwort erzeugen und Session Cookie holen und speichern: