[PHP]Warum kann ich diese Seite nicht parsen ?
Hallo,
ich versuche jetzt schon eine ganze weile aus einer Seite die Werte einiger ' type="hidden" ' felder zu parsen aber aus irgendeinem Grund finden preg_match und preg_match_all nur viel zu wenige davon.
Seite: https://accounts.google.com/SignUp?s...mpl=googlemail
Ich hab mal ein Stück aus dem Code kopiert
PHP-Code:
//(code eingerückt)
<input type="hidden" name="service" id="service" value="mail">
<input type="hidden" name="continue" id="continue" value="https://mail.google.com/mail/?tab=wm">
<input type="hidden" name="ltmpl" id="ltmpl" value="googlemail">
<input type="hidden" name="timeStmp" id="timeStmp" value='1327619779492'/>
<input type="hidden" name="secTok" id="secTok" value='.AG5fkS8jUtSwWdEnj9zz3-FprJMxQvLqgA=='/>
<input type="hidden" name="dsh" id="dsh" value="7956360192668651999">
<input type="hidden" name="ktl" id="ktl" value="">
<input type="hidden" name="ktf" id="ktf">
<input type="hidden" id="_utf8" name="_utf8" value="+++9731;"/>
Wenn ich jetzt versuche z.b. secTok zu parsen finde ich nichts, hab jetzt schon ein paar Variationen durch probiert, aber ich komme nicht an die value´s hier mal ein Beispiel:
PHP-Code:
preg_match_all('#id="secTok" value=(.*)>#', $site, $secTok);
array(1) { +++91;0+++93;=> array(0) { } }
So finde ich gar nichts, das $secTok array bleibt leer. Wenn ich jetzt so suche:
PHP-Code:
preg_match_all('#id="secTok"#', $site, $secTok);
array(1) { +++91;0+++93;=> string(11) "id="secTok"" } }
Finde ich den String 'id="secTok"', aber sobald ich 'value=' ranhängen will finde ich wieder nichts.
PHP-Code:
preg_match_all('#id="secTok" value=#', $site, $secTok);
array(1) { +++91;0+++93;=> array(0) { } }
Irgendwie hab ich den Eindruck, der Fehler liegt bei dem Leerzeichen zwischen dem 'id="secTok"' und 'value=', aber wenn ich andererseits nur nach 'type=hidden' suche finde ich auch nichts(!), obwohl davon ja auf jeden fall diverse in dem code stehen.
PHP-Code:
preg_match_all('#type=hidden#', $site, $secTok);
array(1) { +++91;0+++93;=> array(0) { } }
Was meint ihr woran das liegt ?
AW: [PHP]Warum kann ich diese Seite nicht parsen ?
An fehlendem Wissen über Regular Expressions.
http://www.php.net/manual/de/pcre.pattern.php
AW: [PHP]Warum kann ich diese Seite nicht parsen ?
Muss ich mich durch die komplette Manual quälen, oder kannst das noch irgendwie eingrenzen ?
AW: [PHP]Warum kann ich diese Seite nicht parsen ?
Das liegt wohl an den Zeilenumbrüchen. Probier es so:
Code:
preg_match('#id="secTok"\s+value=\'([^\']+)\'#i', $site, $secTok);
AW: [PHP]Warum kann ich diese Seite nicht parsen ?
Ja wunderbar, danke inout so klappt es! :)
Muss das /s genau an der Stelle, wo der umbruch steht, sein ?
AW: [PHP]Warum kann ich diese Seite nicht parsen ?
\s+ steht in dem Fall für mindestens ein whitespace-Zeichen, also auch wenn dort kein Zeilenumbruch, sondern nur ein oder mehrere Leerzeichen stehen, so sollte es immer funktionieren.
Am besten im Pattern immer alle Leerzeichen durch \s+ oder \s* ersetzen, dann gibt es keine Probleme.
AW: [PHP]Warum kann ich diese Seite nicht parsen ?
Normalerweise gilt es als Sünde, HTML mit Regular Expressions zu parsen...
AW: [PHP]Warum kann ich diese Seite nicht parsen ?
Zitat:
Zitat von
d3mux
Normalerweise gilt es als Sünde, HTML mit Regular Expressions zu parsen...
Recht hast Du, ich wollte den Link vorhin schon posten, habe es dann aber doch gelassen, also hier ist er:
http://www.codinghorror.com/blog/200...hulhu-way.html ;)
AW: [PHP]Warum kann ich diese Seite nicht parsen ?
Hmmmm, mir wurde zwar dazu geraten wann immer möglich RegEx zu nutzen, aber ich lass mich na klar auch eines besseren belehren. Wird Cthulhu mich jetzt erwischen, oder hab ich noch eine Chance der ewigen Verdammnis zu entkommen :)
Was gibt es denn da für alternative zum RegEx parsen, sollte ich das lieber nur mit PHP Bordmitteln machen, oder lieber die DOM´s mit z.b. JQuery parsen statt mit RegEx zu arbeiten ?
Ich hab noch eine Frage, auf meiner Zielseite ist noch ein dubioser Wert der beim Registrieren übertragen wird, dieser wert heißt: "bgresponse=".
Leider ist dieser wert aber keine übergabe eines "hidden" field, sondern wird aus einem Stück Javascript errechnet.
http://nopaste.info/1572a72c7e.html
Hmm gaia_botguard klingt nicht gut! Wie könnte ich diesen wert denn jetzt "simulieren", einfach den JS Code so parsen wie die "hidden" Felder und einfach in das Script schreiben, oder wie würdet ihr das machen ?
(Ich bin nicht wirklich Fit in JS, deshalb frage ich mich wie man diese Protektion am besten umgehen könnte. Ich möchte hier auch nicht nach einem SRC betteln, es geht mir eher darum zu verstehen, wie ein Ansatz aussehen sollte ...)
AW: [PHP]Warum kann ich diese Seite nicht parsen ?
Zitat:
Zitat von
Freak1936
Was gibt es denn da für alternative zum RegEx parsen [...]
Die DOM und XML Funktionen z.B.
Für ein solches kleines Script würde ich aber auch RegEx benutzen...
Zum anderen Problem:
Man könnte jetzt natürlich den gesamten Algorithmus von JS nach PHP übersetzen, allerdings scheint das doch recht viel Arbeit zu sein.
Ansonsten könnte man es mit einem PHP JS Interpreter wie z.B. J4P5 probieren, allerdings habe ich da so meine Zweifel ob das funktioniert.
Ich würde dafür einfach die MSHTML Interfaces des IE missbrauchen.
Ob und wie das in PHP geht, kann ich Dir aber nicht sagen.
Ein kleines Beispiel in Delphi (aus einem alten Projekt von mir):
Code:
uses
MSHTML;
function CreateDocument(const markup: string): IHTMLDocument2;
var
doc: OleVariant;
begin
Result := CoHTMLDocument.Create as IHTMLDocument2;
doc := Result;
doc.Open;
doc.Write(markup);
doc.Close;
end;
WriteLn(CreateDocument('<script>document.write(668.5*2);</script>').body.innerHTML);
(Ausgabe: 1337)