Browsergame Bot | Informationen wie Geld, Zeit, Status usw...

07/30/2015 23:51 Krabat2#1
Hallo :)

Ich bin gerade dabei einen Bot für "Pennergame" zu schreiben.

Dieser sieht bisher so aus:

PHP Code:
//#include <stdio.h>
#include <iostream>
#include <curl\curl.h>
#include <time.h>
void sammeln(CURL *test);
void leeren(CURL *test);


int main()
{
    
CURL *test;
    
curl_global_init(CURL_GLOBAL_ALL);
    
test curl_easy_init();
    
time_t beginendbuffer;
    
buffer 0;
    if (
test)
    {
        
        
curl_easy_setopt(testCURLOPT_URL"http://www.pennergame.de/login/check/");
        
curl_easy_setopt(testCURLOPT_POSTFIELDS"username=XXX&password=XXX&submitForm=Login");
        
curl_easy_setopt(testCURLOPT_COOKIEJAR"cookie");
        
curl_easy_perform(test);
        
curl_easy_reset(test);
        while (
true)
        {
            
sammeln(test);
            
begin time(0);
            do
            {
                
end time(0);
                if (
end != buffer)
                {
                    
system("cls");
                    
std::cout << "Noch " << 605 - (end begin) << " Sekunden!" << std::endl;
                }
                
buffer end;
            
            } while ((
end begin) < 605);
            
leeren(test);
        }
        
    }
    
curl_global_cleanup();
    return 
0;
}

void sammeln(CURL *test)
{
    
curl_easy_setopt(testCURLOPT_URL"http://www.pennergame.de/activities/");
    
curl_easy_setopt(testCURLOPT_COOKIELIST"cookie");
    
curl_easy_perform(test);
    
curl_easy_reset(test);
    
curl_easy_setopt(testCURLOPT_URL"http://www.pennergame.de/activities/bottle/");
    
curl_easy_setopt(testCURLOPT_POSTFIELDS"sammeln=10&konzentrieren=1");
    
curl_easy_setopt(testCURLOPT_COOKIELIST"cookie");
    
curl_easy_perform(test);
    
curl_easy_reset(test);
    
}

void leeren(CURL *test)
{
    
curl_easy_setopt(testCURLOPT_URL"http://www.pennergame.de/activities/");
    
curl_easy_setopt(testCURLOPT_COOKIELIST"cookie");
    
curl_easy_perform(test);
    
curl_easy_reset(test);
    
curl_easy_setopt(testCURLOPT_URL"http://www.pennergame.de/activities/bottle/");
    
curl_easy_setopt(testCURLOPT_POSTFIELDS"type=1&time=10&bottlecollect_pending=True&Submit2=Einkaufswagen ausleeren");
    
curl_easy_setopt(testCURLOPT_COOKIELIST"cookie");
    
curl_easy_perform(test);
    
curl_easy_reset(test);

Der Bot ist ja noch sehr low. Er sucht automatisch nach Flaschen und leert den Einkaufswagen auch im 10 min. Takt aus. Nun würde ich die Flaschen gerne automatisch verkaufen sollte der Preis stimmen (der schwankt).

Bloß ich weiß nicht wie ich an diese Information ran komme, oder an eine Information wie z.B. wv. Geld ich habe o.Ä.

Hoffe jemand kann mir ein paar "Denkanstöße" geben :D
07/31/2015 02:07 xEgoist#2
Ich hab selbst vor kurzem nen Pennergame bot geschrieben aber mit C#, kann dir aber sagen wie du an die Infos ran kommst.

[Only registered and activated users can see links. Click Here To Register...]

Wenn du Auf der Seite bist lies den Seitenquelltext

Scroll runter bis du das siehst.

[Only registered and activated users can see links. Click Here To Register...]

Hier steht der Kurs, dein Geld, max Flaschen einfach alles sogar die Rechnung :p
Das du z.B. nur so viele Flaschen verkaufst wie es dein Geldbeutel zulässt.
07/31/2015 02:57 Krabat2#3
Und wie "extrahiere" ich diese Informationen? Mittels einem HTML Parser oder gibt es da bessere Lösungen?
07/31/2015 03:11 xEgoist#4
Quote:
Originally Posted by Krabat2 View Post
Und wie "extrahiere" ich diese Informationen? Mittels einem HTML Parser oder gibt es da bessere Lösungen?
Naja für das bisschen Infos reicht doch regex.

Du kannst den Seitenquelltext mit deinem BOT runterladen, right?

Dann speicher ihn in einen String und such nach der Info ich hab leider keine Ahnung wie das bei C++ ist aber hier sollte ebenfalls regex gehen.

Quote:
Match alle_flaschen = Regex.Match(Seitenquelltext, ".value = (\\d+)");

Hier mal nen kleiner Ausschnitt mit regex aus C# kannst ja mal googeln wie du das bei C++ benutzt es gibt auch viele "Regex Tester" zum schauen ob dein Regex funktionieren würde.

Regex durchsucht dann den ganzen String nach .value = (\\d+) d steht für zahl + steht für mindestens 1 zahl.
07/31/2015 12:01 Krabat2#5
Bis jetzt habe ich noch keine gescheite Möglichkeit gefunden den Quelltext abzuspeichern, aber ich werde sicherlich noch etwas finden :)

EDIT:

Habe jetzt herausgefunden wie ich den Quelltext abespeicher, aber wie kopiere ich die Zahl dann? Wie ich sie mit REGEX finde ist kein problem aber wie nutze ich sie dann
08/02/2015 01:29 xEgoist#6
Da gibts ja nicht nur eine Zahl du musst damit rechnen.

Kannst ja auf der Pennergame Seite die Rechnung mal anschauen die ist im Seitenquelltext also hab ja oben auch nen link gepostet.

Hab hier auch noch mein Code
Hab da ebenfalls geübt, Rechtschreib- und Grammatikfehler inc. :P
(Natürlich wieder C#, aber wolltest ja nur wissen was du mit den Zahlen machst)


Am Ende musst du nur noch die Verkaufsmenge an die Website schicken. Machst du genauso wie nen Login.
08/04/2015 00:43 Krabat2#7
Ich hab jetzt alles geschafft :) ist nur leider ein "konsolen" bot, ich muss mich mal damit beschäftigen wie ich eine Oberfläche gescheit hinkriege
08/04/2015 11:52 const*#8
Quote:
Originally Posted by Krabat2 View Post
Ich hab jetzt alles geschafft :) ist nur leider ein "konsolen" bot, ich muss mich mal damit beschäftigen wie ich eine Oberfläche gescheit hinkriege
Du kannst unter Visual Studio (2010) ganz einfach Forms erstellen und auch designen, dir wird aber auffallen, dass der Code syntaktisch anders ist und von C# Funktionen klaut. :p
08/04/2015 17:26 YatoDev#9
oder man nimmt eine vernünftige gui library oder die win api.
Also entweder QT, GTK oder CreateWindow und die dazugehörigen standrad controls.

Für deinen fall dürfte die WinApi vollkommen reichen. Da sind alle standard schaltflächen und textfelder vorhanden. siehe dazu Google: CreateWindow und [Only registered and activated users can see links. Click Here To Register...]
08/05/2015 10:54 Ninjotzu#10
Quote:
Originally Posted by »FlutterShy™ View Post
oder man nimmt eine vernünftige gui library oder die win api.
Also entweder QT, GTK oder CreateWindow und die dazugehörigen standrad controls.

Für deinen fall dürfte die WinApi vollkommen reichen.
Ja du Held, und das nächste 3D-MMORPG programmieren wir dann in Assembler oder was? :facepalm:
08/05/2015 11:12 Padmak#11
Was ist denn dein Problem?
Kein Grund so assi zu reagieren, er hat völlig Recht damit, dass die WinApi völlig ausreicht.
Er will nur eine einfache Oberfläche bauen, die vermutlich nur paar Sachen anzeigt und ein oder zwei Eingabefelder. Dafür ist ein so aufgeblasenes Toolkit wie Qt oder sogar wxWidgets völlig übertrieben, und schadet vermutlich mehr als es hilft (Als Anfänger ist man schnell überfordert)

Padmak
08/05/2015 13:19 Ninjotzu#12
Quote:
Originally Posted by Padmak View Post
Was ist denn dein Problem?
Kein Grund so assi zu reagieren, er hat völlig Recht damit, dass die WinApi völlig ausreicht.
Er will nur eine einfache Oberfläche bauen, die vermutlich nur paar Sachen anzeigt und ein oder zwei Eingabefelder. Dafür ist ein so aufgeblasenes Toolkit wie Qt oder sogar wxWidgets völlig übertrieben, und schadet vermutlich mehr als es hilft (Als Anfänger ist man schnell überfordert)

Padmak
Sorry, aber das ist ja an Naivität gar nicht mehr zu überschreiten... . Jetzt mal Klartext.

Die WinApi ist eine von Microsoft,- für Windows,- bereitgestellte, spezifizierte Schnittstelle zum Betriebssystem.
In erster Linie ist damit also nicht die GUI-Programmierung beabsichtigt, sondern pure ,- und vor allem uneingeschränkte, - Windows-Entwicklung verbunden.

Der ganze Windowsspezifische Kram resultiert dann mit 60-80 Zeilen Code für ein leeres Fenster, das studieren der Nachrichtenverarbeitung, dem rumschlagen mit Ansi und Unicode Strings, der Bitmanipulierung (oder Verwendung von fehleranfälligen Makros) zur korrekten Nachrichtenauswertung, dem notwendigen Wissen bzgl. der Fehlerbehandlung,- sowie Auswertung und viele viele weitere Themen die bei Unwissenheit zu Bugs führen können, nach denen man Stunden lang suchen kann.


Vor mir liegt also ein nativer Code mit einem Umfang von schätzungsweise nicht mehr als 80 Zeilen, dessen Funktionalität in eine GUI auszulagern ist.
Warum sollte man also auf die Benutzung von QT, dem damit verbundenen ausgereiften Toolkit zur GUI-Erstellung, dem nativen C++ und dem vermutlich um 90% gekürzten Quellcode verzichten?
Etwa weil er auf die WinApi angewiesen ist? Nein. Kein Stück.

Ich zitiere dich:

Quote:
Originally Posted by Padmak View Post
Er will nur eine einfache Oberfläche bauen, die vermutlich nur paar Sachen anzeigt und ein oder zwei Eingabefelder.
Die Tatsache, dass du einem Anfänger die WinApi, nicht aber QT bzw. wxWidgets zumutest war natürlich auch sehr interessant..

Quote:
Originally Posted by Padmak View Post
Dafür ist ein so aufgeblasenes Toolkit wie Qt oder sogar wxWidgets völlig übertrieben, und schadet vermutlich mehr als es hilft (Als Anfänger ist man schnell überfordert)
08/05/2015 14:01 Daifoku#13
so schlimm is die WinApi gar nicht, und 80 Zeilen Code für ein Leeres Fenster ist übertrieben

Ein wenig künstlerische Freiheit, hier ein paar Manuell gezeichnete Linien, da ein paar Linien und man kann auch was schönes damit erreichen xD

[Only registered and activated users can see links. Click Here To Register...]

Das einlesen in die WinAPI dauert aber schon sehr lange.. und bis man den ganzen subclass kram verstanden hat.
08/05/2015 14:22 warfley#14
Quote:
Originally Posted by Ninjotzu View Post
Sorry, aber das ist ja an Naivität gar nicht mehr zu überschreiten... . Jetzt mal Klartext.

Die WinApi ist eine von Microsoft,- für Windows,- bereitgestellte, spezifizierte Schnittstelle zum Betriebssystem.
In erster Linie ist damit also nicht die GUI-Programmierung beabsichtigt, sondern pure ,- und vor allem uneingeschränkte, - Windows-Entwicklung verbunden.
No shit sherlock die Windows API (Application Programming Interface) ist eine Schnittstelle (Interface) für die Anwendungsentwicklung (Application Programming) unter Windows (Windows)? Wie kommst du bloß darauf

Quote:
Originally Posted by Ninjotzu View Post
Der ganze Windowsspezifische Kram resultiert dann mit 60-80 Zeilen Code für ein leeres Fenster, das studieren der Nachrichtenverarbeitung, dem rumschlagen mit Ansi und Unicode Strings, der Bitmanipulierung (oder Verwendung von fehleranfälligen Makros) zur korrekten Nachrichtenauswertung, dem notwendigen Wissen bzgl. der Fehlerbehandlung,- sowie Auswertung und viele viele weitere Themen die bei Unwissenheit zu Bugs führen können, nach denen man Stunden lang suchen kann.


Vor mir liegt also ein nativer Code mit einem Umfang von schätzungsweise nicht mehr als 80 Zeilen, dessen Funktionalität in eine GUI auszulagern ist.
Warum sollte man also auf die Benutzung von QT, dem damit verbundenen ausgereiften Toolkit zur GUI-Erstellung, dem nativen C++ und dem vermutlich um 90% gekürzten Quellcode verzichten?
Etwa weil er auf die WinApi angewiesen ist? Nein. Kein Stück.
80 Zeilen für ein Leeres window? 30 Zeilen vielleicht für das leere window, die man einfach copy&pasten kann, pro Control einfügen 2 weitere Zeilen, die man selbst machen muss. Pro Messageabfrage dann vielleicht noch 2 Zeilen.

Der aufwand (für kleine GUI's natürlich nur) ist mit windows API da fast nichts, im vergleich mit dem Einarbeiten in ein Komplett neues Framework.


Und dein problem mit der Windows API verstehe ich auch nicht so ganz, hat dir ein Böser Microsoft Entwickler mal als Kind die Süßigkeiten geklaut? Als Entwickler muss man ab und an auf die System API's zurückgreifen, und da ich denke dass der TE sowieso windows Entwicklung betreibt warum sollte er sie nicht nutzen wollen?
08/05/2015 16:28 Ninjotzu#15
Quote:
30 Zeilen vielleicht für das leere window, die man einfach copy&pasten kann, pro Control einfügen 2 weitere Zeilen, die man selbst machen muss.
Anhand dieser Aussage kann man deine Fähigkeiten als Programmierer ja schon mal gut einschätzen. Wenn sich der Wundercode deines Fensters auf 30 Zeilen beschränkt, dann kann ich aus dem "Copy & Paste" nur schließen, dass du nicht eine einzige Zeile davon verstanden hast.

Quote:
Und dein problem mit der Windows API verstehe ich auch nicht so ganz, hat dir ein Böser Microsoft Entwickler mal als Kind die Süßigkeiten geklaut?
Woher nimmst du denn bitte die Annahme, dass ich ein Problem mit der WinApi habe? Ich habe mich Jahrelang sehr ausführlich mit der WinApi beschäftigt, während du nicht einmal Ansatzweise verstehst worum es dabei geht, geschweige denn den Umfang einschätzen kannst.
Nicht zuletzt habe ich als (SL)Treiberentwickler für sowohl UMDF,- als auch KMDF-Driver und Kernel-Reverse Engineerer so einige nette Erfahrungen im Low-Level Bereich gemacht und kann davon auch heute noch extrem gut profetieren. Als ich den APC-TimeOut für LoL verkauft habe haben die kleinen Racker schließlich auch noch versucht mit ihrer DLL-Injection weiter zu kommen ;).

Also du Gartenzwerg ich würde dir jetzt mal empfehlen ins AutoIt Forum zu maschieren, denn da liegen deine Chancen immerhin bei einem 6er im Lotto mal etwas zu erreichen.