NodeJS Post Requests + Captcha

  • Abend,

    Vielleicht kann mir ja jemand helfen.

    Ich möchte mich auf einer Webseite mittels Post Request anmelden und bestimmte Aktionen ausführen (zb. bestimmte Beiträge Posten usw.).
    Allerdings ist die Anmeldung durch ein ReCaptcha von Google abgesichert. Da ich das Captcha nicht jedesmal von "Hand" lösen möchte,

    habe ich mir überlegt, die alternativer zunehmen und das Captcha mittels Audioausgabe lösen zulassen -> Diese Audiodatei kann man herunterladen und z.B mittels Python Script & Google Speech API lösen.
    Nun stehe ich aber vor den Problem das ich beim Post-Request, zusätzlich zu den Anmeldedaten auch auch irgendwie das Häckchen beim Capchta setzen muss um dann die Audiodatei zuladen.
    Hat da jemand eine Idee wie man das anstellen kann?

    Freundliche Grüße Lutz.

    Einmal editiert, zuletzt von Lutz Oswald (12. Oktober 2017 um 20:15)

  • Sieht interessant aus.
    Weißt du grad aus dem Kopf ob dies auch ohne Oberfläche funktioniert, also als reine Konsolenanwendung.
    Würde das gerne im Hintergrund auf dem Pi laufen lassen.
    Wie sieht das aus mit den Captchas da diese ja meistens als iFrame eingebettet sind. Lassen die sich ohne Probleme ansteuern?

    Grüße Lutz.

  • Ich habe gerade mal ein wenig Selenium angeschaut und probiert.

    Leider bekomme ich momentan noch ein Fehler nach dem Starten.

    Erst einmal kurz beschrieben wie ich meine Ordner Struktur aussieht:
    (Ja ich weiß der Ordner heißt PhantomJS obwohl ich es (noch) nicht als Phtnom laufen lasse)
    Selenium.png

    Zusätzlich mittels "npm install --save selenium-webdriver" das Selenium-Modul installiert.

    Folgenden Beispielcode verwendet:

    Code
    var webdriver = require('selenium-webdriver');
    
    var driver = new webdriver.Builder()
        .forBrowser('chrome')
        .build()
    driver.get('http://www.google.com/ncr');

    Und zum Schluss die erhaltene Fehlermeldung:

    Leider kann ich mit der Fehlermeldung nichts anfangen.

    Hoffe da auf eure Hilfe.

    Gruß Lutz

  • Hi,

    bin jetzt kein JS-Gott, aber hast du den Webserver vor Ausführen der Applikation gestartet?

    Falls nein, probiere mal in einer neuen CMD folgendes Commando:

    webdriver-manager start --standalone

    Quelle gibt's hier.

    “Don’t comment bad code - rewrite it.”

    Brian Kernighan

  • Abend,
    Dann kommt bei mir nur

    Code
    Der Befehl "webdriver-manager" ist entweder falsch geschrieben oder
    konnte nicht gefunden werden.

    Liegt das daran das ich die chromedriver.exe nur bei mir in den Ordner kopiert habe.

    In den Videotutorials wurde dazu nichts genauer gesagt, außer das man dem chromedriver.exe in den Ordner kopieren soll.

    Gruß Lutz

  • Liegt das daran das ich die chromedriver.exe nur bei mir in den Ordner kopiert habe.

    In den Videotutorials wurde dazu nichts genauer gesagt, außer das man dem chromedriver.exe in den Ordner kopieren soll.

    Aha, wir kommen der Sache näher. Nur kopieren reicht nicht. Du musst deine Umgebungsvariablen anpassen. Woher soll dein Skript wissen, wo die Chromedriver.exe liegt. Diese muss ja schließlich ausgeführt werden.

    Falls dir Videos eher taugen, zwar etwas schnell, aber probier mal das hier:

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    “Don’t comment bad code - rewrite it.”

    Brian Kernighan

  • Nach welcher Anleitung hast du das ganze Zeug installiert?

    Dein Problem scheint bekannt zu sein: https://github.com/angular/protractor/issues/3655

    Schau mal den letzten Post in diesem Issue, ich kann mir vorstellen dass das auf deine Chromedriver-Version zutrifft.

    Ich würde diese also erstmal prüfen und dann schauen, ob du mit einem Down- oder Upgrade mehr Glück hast. Ggf. auch mal den ChromeDriver komplett entfernen und erneut installieren.

    “Don’t comment bad code - rewrite it.”

    Brian Kernighan

  • Abend,

    habe jetzt mal das ein oder andere im Selenium ausprobiert.

    Jetzt bin ich grad an der Stelle, wo ich das Captcha Häckchen setzten möchte.

    Habe es mit folgenden Code probiert -> driver.findElement(webdriver.By.className('recaptcha-checkbox-checkmark')).click();
    Ergebnis ist das ich eine Fehlermeldung er halte

    Code
    NoSuchElementError: no such element: Unable to locate element: {"method":"css selector","selector":".recaptcha-checkbox-checkmark"}

    Sprich er kann das Captcha-Element nicht finden. Das liegt ja wahrscheinlich daran das dies mittels einem iFrame in die Seite integriert wurde.
    Wie kann ich denn auf ein Element eines iFrames zugreifen?

    Jemand eine Anhung und kann mir helfen.

    Gruß Lutz.

  • Hi,

    es gibt die Möglichkeit, dass du phantomJS mitteilst, es soll die webdriver-security deaktivieren. Damit sollte es potentiell möglich sein, Objekte zu finden, selbst wenn sie nicht in der selben Seite liegen.

    Mfg,

    sls

    “Don’t comment bad code - rewrite it.”

    Brian Kernighan

  • Abend,

    eventuell könnt ihr mir noch einmal helfen!?

    ich hänge zur zeit noch ein wenig am Captcha fest... Es liegt nicht daran es irgendwie gelöst zu bekommen sondern eher darum das es im PhantomJS angezeigt werden soll. Das wird es nämlich nicht...

    Um zu ermitteln warum dies so ist habe ich unter anderem ein paar Screenshots, bei der jeweiligen Aktion, von der Webseite gemacht.

    Und der Fehler ist anscheinend, das PhantomJS zu "Alt" ist

    Original Fehlercode:

    Code
    Führen Sie ein Upgrade aus auf einen unterstützten Browser aus, um eine reCAPTCHA-Aufgabe zu erhalten.
    Wenn Sie meine, dass diese Seite fälschlicherweise angezeigt wird, überprüfen Sie ihre Internetverbindung und laden Sie die Seite neu.

    Gibt es es eine Möglichkeit der Webseite eine neuere Version anzugeben? oder PhantomJS zu aktualisieren außer über den Node-Package Manager (NPM)?

    Oder eine komplett andere Möglichkeit diese Problem zulösen.

    Gruß Lutz.

  • Ich habe schon seit Ewigkeiten nicht mehr mit PhantomJS gearbeitet, aber ich glaube man kann relativ einfach einstellen, als welchen Browser dieser sich ausgibt - also bspw. als Firefox etc..

    .NET-, Unity3D-, Web-Dev.
    Mikrocomputer-Hobbyist.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!