Hallo alle zusammen
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.
Schritt 2:
Einbindung der jaunt library
Schritt 3:
Deklaration 3 Variablen, in denen später die Informationen des eigenen Accounts gespeichert werden.
Schritt 4:
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.
Schritt 5:
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.
Schritt 6
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:
In der ersten Zeile sendet man den Header, der immer bei einem Seitenaufruf automatisch gesendet wird. Die URL ist der Ort der Verarbeitung der Logineingabe. Die Methode sendPOST sendet einen post request mit deinen Formular angaben. Wen interessiert wie man diese Daten bekommt klickt hier.
Methode 2
Die visit Methode ist relativ selbsterklärend.
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.
Um diese Infos zu kriegen muss man den Quelltext analysieren. Die Infos zu deinen Nachrichten und dem Elitegold befinden sich im <ul> tag, deshalb speichere ich das in der Variable elements. Danach wird das ZWEITE Element innerhalb des ul tags herausgelesen, nämlich ein li tag in dem die Nachrichten gespeichert sind. Deshalb getElement(1). Die 6 nächsten Zeilen sind normale Stringoperationen, um die Nummern der Nachrichten zu extrahieren. In der letzten Zeile wird das egold aus dem Quelltext extrahiert. Dieses müssen wir glücklicherweise nicht mehr weiter bearbeiten.
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.
Der ganze Code:
ACHTUNG Hier müssen noch die userdaten angepasst werden.
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
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