NodeJS Post Requests + Captcha

Informationen zur neuen Foren-Software hier
Bei Login Problemen bitte ein neues Kennwort anfordern (nur alle 24 Stunden). Neuen Aktivierungscode anfordern oder Registrierung mit Aktivierungscode abschließen
Ansonsten Email an webmaster[äet]forum-raspberrypi.de
  • 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.

  • 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)


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


    Folgenden Beispielcode verwendet:

    Code
    1. var webdriver = require('selenium-webdriver');
    2. var driver = new webdriver.Builder()
    3. .forBrowser('chrome')
    4. .build()
    5. 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

  • Abend,
    Dann kommt bei mir nur

    Code
    1. Der Befehl "webdriver-manager" ist entweder falsch geschrieben oder
    2. 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:

  • Abend,


    mhh Umgebungsvariablen hatte ich zwischenzeitlich schonmal ergänzt.
    Ändert aber nichts... Selbe Fehlermeldung! Das Chromefenster wird übrigens angezeigt.
    Ich könnte den Fehler ein wenig eingrenzen.
    Der Fehler tritt erst auf sobald eine Seite geladen werden soll -> driver.get('http://www.google.com/ncr');


    Gruß Lutz

  • 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.

  • 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
    1. 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