|
You last visited: Today at 02:32
Advertisement
Browsergame Bot | Informationen wie Geld, Zeit, Status usw...
Discussion on Browsergame Bot | Informationen wie Geld, Zeit, Status usw... within the C/C++ forum part of the Coders Den category.
07/30/2015, 23:51
|
#1
|
elite*gold: 0
Join Date: Jun 2011
Posts: 225
Received Thanks: 8
|
Browsergame Bot | Informationen wie Geld, Zeit, Status usw...
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 begin, end, buffer;
buffer = 0;
if (test)
{
curl_easy_setopt(test, CURLOPT_URL, "http://www.pennergame.de/login/check/");
curl_easy_setopt(test, CURLOPT_POSTFIELDS, "username=XXX&password=XXX&submitForm=Login");
curl_easy_setopt(test, CURLOPT_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(test, CURLOPT_URL, "http://www.pennergame.de/activities/");
curl_easy_setopt(test, CURLOPT_COOKIELIST, "cookie");
curl_easy_perform(test);
curl_easy_reset(test);
curl_easy_setopt(test, CURLOPT_URL, "http://www.pennergame.de/activities/bottle/");
curl_easy_setopt(test, CURLOPT_POSTFIELDS, "sammeln=10&konzentrieren=1");
curl_easy_setopt(test, CURLOPT_COOKIELIST, "cookie");
curl_easy_perform(test);
curl_easy_reset(test);
}
void leeren(CURL *test)
{
curl_easy_setopt(test, CURLOPT_URL, "http://www.pennergame.de/activities/");
curl_easy_setopt(test, CURLOPT_COOKIELIST, "cookie");
curl_easy_perform(test);
curl_easy_reset(test);
curl_easy_setopt(test, CURLOPT_URL, "http://www.pennergame.de/activities/bottle/");
curl_easy_setopt(test, CURLOPT_POSTFIELDS, "type=1&time=10&bottlecollect_pending=True&Submit2=Einkaufswagen ausleeren");
curl_easy_setopt(test, CURLOPT_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
|
|
|
07/31/2015, 02:07
|
#2
|
elite*gold: 126
Join Date: May 2009
Posts: 6,876
Received Thanks: 1,269
|
Ich hab selbst vor kurzem nen Pennergame bot geschrieben aber mit C#, kann dir aber sagen wie du an die Infos ran kommst.
Wenn du Auf der Seite bist lies den Seitenquelltext
Scroll runter bis du das siehst.
Hier steht der Kurs, dein Geld, max Flaschen einfach alles sogar die Rechnung 
Das du z.B. nur so viele Flaschen verkaufst wie es dein Geldbeutel zulässt.
|
|
|
07/31/2015, 02:57
|
#3
|
elite*gold: 0
Join Date: Jun 2011
Posts: 225
Received Thanks: 8
|
Und wie "extrahiere" ich diese Informationen? Mittels einem HTML Parser oder gibt es da bessere Lösungen?
|
|
|
07/31/2015, 03:11
|
#4
|
elite*gold: 126
Join Date: May 2009
Posts: 6,876
Received Thanks: 1,269
|
Quote:
Originally Posted by Krabat2
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
|
#5
|
elite*gold: 0
Join Date: Jun 2011
Posts: 225
Received Thanks: 8
|
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
|
#6
|
elite*gold: 126
Join Date: May 2009
Posts: 6,876
Received Thanks: 1,269
|
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)
Code:
// Hier werden alle Zahlen vom Seitenquelltext besorgt
Flaschen_Verkaufen.Pfandflaschen_Info(out AktuellerKurs, out wallet, out cash, out max, out Flaschen);
AlleFlaschen = Flaschen;
Kurs = AktuellerKurs;
//Max verdienst mit allen Flaschen und dem Aktuellen Kurs
result = max / 100;
//Wenn keine Flaschen vorhanden sind
if (Flaschen == 0)
{
//Die verkaufsmenge wird dann auch auf 0 gesetzt weil eben keine Flaschen da sind und es wird nichts verkauft
Verkaufsmenge = Flaschen;
return "Derzeit keine Flaschen verfügbar.";
}
//Der Part ist aus der Seitenquelltextdatei es wird geschaut ob der max verdienst + das eigene Geld höher sind als der Geldbeutel haben kann
else if ((result + cash) > wallet)
{
//Eine Rechnung nur so viel zu verkaufen wie in den Geldbeutel noch reinpassen
double count = (wallet - cash) / Kurs * 100;
//Es wird abgerundet
Verkaufsmenge = Math.Ceiling(count);
//Verkaufsmenge wurde festgelegt
AlleFlaschen = Verkaufsmenge;
//Wenn nichts mehr verkauft werden kann, weil der Geldbeutel voll ist wird das an die Logtextbox gesendet
if (count == 0)
{
string Antwort = "Dein Geldbeutel scheint voll zu sein, bitte gib dein Geld aus.";
return Antwort;
}
}
// wenn alle flaschen zusammen weniger ist als der Geldbeutel tragen kann wird alles verkauft
else if ((result + cash) < wallet)
{
Verkaufsmenge = Flaschen;
}
Am Ende musst du nur noch die Verkaufsmenge an die Website schicken. Machst du genauso wie nen Login.
|
|
|
08/04/2015, 00:43
|
#7
|
elite*gold: 0
Join Date: Jun 2011
Posts: 225
Received Thanks: 8
|
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
|
#8
|
elite*gold: 0
Join Date: Mar 2015
Posts: 776
Received Thanks: 313
|
Quote:
Originally Posted by Krabat2
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.
|
|
|
08/04/2015, 17:26
|
#9
|
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
|
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
|
|
|
08/05/2015, 10:54
|
#10
|
elite*gold: 0
Join Date: May 2010
Posts: 107
Received Thanks: 30
|
Quote:
Originally Posted by »FlutterShy™
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?
|
|
|
08/05/2015, 11:12
|
#11
|
elite*gold: 58
Join Date: Jun 2008
Posts: 2,311
Received Thanks: 8,420
|
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
|
#12
|
elite*gold: 0
Join Date: May 2010
Posts: 107
Received Thanks: 30
|
Quote:
Originally Posted by Padmak
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
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
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
|
#13
|
elite*gold: 0
Join Date: Mar 2010
Posts: 360
Received Thanks: 132
|
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
Das einlesen in die WinAPI dauert aber schon sehr lange.. und bis man den ganzen subclass kram verstanden hat.
|
|
|
08/05/2015, 14:22
|
#14
|
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 573
|
Quote:
Originally Posted by Ninjotzu
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
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
|
#15
|
elite*gold: 0
Join Date: May 2010
Posts: 107
Received Thanks: 30
|
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.
|
|
|
All times are GMT +1. The time now is 02:33.
|
|