Bot versagt

Wenn ich JavaScript im Browser deaktiviere, dann kommt nur die Meldung, dass ich es einschalten soll.

Ich lass den Code nun einfach ausführen. Per str_replace schreibe ich mir die Hauptfunktion etwas um, so dass er mir den Cookie als GET-Parameter übergibt, so dass ich beim nächsten Aufruf einfach diesen Wert als Cookie mit übergeben kann.

Ich dachte jetzt hätte ich es, aber leider kommt immer noch die Meldung, dass ich Cookies aktivieren soll. Wie kann ich denn sicherstellen, dass die Cookies korrekt mitgesendet werden?

Im Code steht jetzt folgendes:


PHP:
if (isset($_GET['qt'])) $get = 'qt=' . $_GET['qt'];
else $get = FALSE;

$wegDamit = 'var cookies = false;';
$hinDamit = 'window.location.href = "?qt="+sCvxb(); return;';

$tmp_fname = tempnam("/tmp", "COOKIE");
$agent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0";
$header[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";

$curl_handle = curl_init ($url);

curl_setopt($curl_handle,    CURLOPT_USERAGENT, $agent);
curl_setopt($curl_handle,    CURLOPT_HTTPHEADER, $header);

curl_setopt ($curl_handle, CURLOPT_COOKIEJAR, $tmp_fname);
curl_setopt ($curl_handle, CURLOPT_RETURNTRANSFER, true);

if ($get) curl_setopt ($curl_handle, CURLOPT_COOKIE, $get);

$output = curl_exec ($curl_handle);
if ($get === FALSE) $output = str_replace($wegDamit, $hinDamit, $output);
echo $output;
 
Was soll das bringen?
Du kannst nicht einfach so mit echo JS zu cUrl ausführen.

cUrl verwendest du ja praktisch, um der Website gegenüber einen Browser zu simulieren.
Dass du auf PHP-Seite zB. Cookies managen musst, die diese Seite dir gibt, ist ja bekannt.
Und wenn du jetzt JS ausführen willst muss das zwischen
den einzelnen cUrl-Seitenaufrufen passieren
Eventuell von JS geänderte Cookies musst du im PHP-Programm berücksichtigen usw.

Das, was du machst, ist den JS-Code in deinem Browser daheim auszuführen.
Da dort nicht die von cUrl angefragte Seite angezeigt wird
und keine Cookies usw. davon vorhanden wird ziemlich gar nichts vom JS-Code funktionieren.
Und auch wenn hats überhaupt keine Auswirkungen auf das,
wie dein PHP-Programm mit dieser Seite kommuniziert.


Für den Browser geschriebenes JS simuliert auszuführen...
ich würd weiter versuchen, den Code zu verstehen.
Sonst vllt. mal davon was probieren:
http://htmlunit.sourceforge.net/ (Hürde PHP<->Java)
http://pecl.php.net/package/spidermonkey
 
Hi sheel,

natürlich wird mir in meinem Browser die Seite von Fremdserver angezeigt. Ich habe doch in der letzten Zeile das echo $ouput stehen. Vorher tausche ich aber noch eine Zeile aus dem JavaScript Code aus, um an den geheimen String zu kommen.

Das klappt auch wunderbar. Ich erhalte im zweiten Aufruf als GET-Parameter den geheim String, wodurch ich diesen nun auch beim zweiten cURL-Request als Cookie mitschicke.

Das sollte genau den Vorgang nachstellen, der auch in einem gewöhnlichen Seitenaufruf passiert. Nur weiß ich aktuell nicht, ob dieser Cookie wirklich übergeben wird. Zusätzlich wird auch im tmp Ordner keine Datei erzeugt, die irgendwelche Cookies beinhalten könnte.

Daher meine Frage, ob ich dieser Part so korrekt ist:

PHP:
curl_setopt ($curl_handle, CURLOPT_COOKIEJAR, $tmp_fname);
curl_setopt ($curl_handle, CURLOPT_RETURNTRANSFER, true);

if ($get) curl_setopt ($curl_handle, CURLOPT_COOKIE, $get);

Gruß
 
Hab es endlich geschafft. Die Zeile COOKIEFILE hat gefehlt, damit cURL die vorherige Session wieder aufnimmt.

Nun kann der Bot loslegen, aber leider ist nach wenigen Seiten schluß, da der Server ein Captcha anzeigt.

Bei einer Wartezeit von 10 Sekunden zwischen den Seitenaufrufen komme ich auf rund 50 Seiten. Wenn ich kürzer warte, stoppt er schon nach wenigen Aufrufen. Hat da jemand Erfahrung, wie man so etwas austricksen kann, bzw. mehr als nur 50 Seiten mit einem Durchlauf rausholen kann? Vllt mit unterschiedlichen Wartezeiten statt immer der gleichen Wartezeit, oder vllt längeren Wartezeiten.
 
Zuletzt bearbeitet:
Nene, ich frag die nicht. Die haben da so viele Hindernisse eingebaut. Ich geb es einfach auf^^

Muss 1.5 Millionen Seiten auslesen und habe gerade mal rund 100 geschafft.

Habe gestern noch einen anderen Bot fertig gemacht, der das Ganze im Browser steuert. Seite aufmacht, speichert, und dann die nächste aufmacht.

Das scheint zu funktionieren, würde aber etwa 1 Jahr dauern, bis ich alle Seiten habe.

Wie gesagt, ich gebe es auf...
 
Auch deswegen könnte sich Fragen lohnen, weil sie dir vllt. einen Weg ohne Hindernisse geben :)

Und bei solchen Dimensionen macht ein schneller Rechner/Internetverbindung
bzw. ein Mietserver irgendwo schon einen Unterschied
(wenn man irgendwie an sowas drankommt, ohne jahrelange vertragliche Bindung und so.
Bekannte etc.)

PS: Bei einem Jahr würdest du ca. 20sec pro Seite brauchen.
Das geht auch auf deinem Rechner schneller.
 
Ich habe das dem Kunden erst mal so zurück gegeben. Ich denke fragen bringt da nichts, weil der Fremdserver durch die Daten ein Wettbewerbsvorteil hat.

Der Kunde nimmt in Kauf, dass das Auslesen der Daten ruhig mal ein Jahr dauern kann.
 
Zurück