Die Anmeldung bei einem Google Mail-Konto schlägt fehl (Selen-Automatisierung).

8

Ich habe einen Selenium-Dienst, der sich als erster Schritt bei meinem Google Mail-Konto anmelden muss. Diese Funktion hat vor ein paar Wochen funktioniert, aber plötzlich schlägt die Anmeldung fehl und ich sehe diesen Fehler im Browser, der sowohl in Chrome- als auch in Firefox-Treibern in Selen ausprobiert wurde.

Geben Sie hier die Bildbeschreibung ein

Dieser Fehler tritt auf, nachdem der Selenium-Dienst die E-Mail-Adresse und das Kennwort eingegeben und auf die Anmeldeschaltfläche geklickt hat. Ein ähnlicher Fehler wurde auch im Google Support-Forum hier gemeldet - https://support.google.com/accounts/thread/10916318?hl=de . Sie sagten, dass "Google anscheinend die Erkennung von Automatisierungstools für ihren Anmeldefluss eingeführt hat!" In diesem Thread gibt es jedoch keine Lösung.

Einige andere Details, die nützlich sein könnten-

  • Ich kann mich in den
    von Selenium geöffneten Browsern nicht manuell bei Google-Konten anmelden .
  • Ich kann mich jedoch manuell bei diesen Konten in der Google Chrome-Anwendung anmelden.

Lassen Sie mich wissen, wenn Sie sich den Code ansehen müssen, ich werde ihn hier veröffentlichen. Danke im Voraus!

Bearbeiten Hinzufügen von Beispielcode zum Verweisen.

public void loginGoogleAccount(String emailId, String password) throws Exception {
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--profile-directory=Default");
    options.addArguments("--whitelisted-ips");
    options.addArguments("--start-maximized");
    options.addArguments("--disable-extensions");
    options.addArguments("--disable-plugins-discovery");
    WebDriver webDriver = new ChromeDriver(options);
    webDriver.navigate().to("https://accounts.google.com");
    Thread.sleep(3000);
    try {
        WebElement email = webDriver.findElement(By.xpath("//input[@type='email']"));
        email.sendKeys(emailId);
        Thread.sleep(1000);

        WebElement emailNext = webDriver.findElement(By.id("identifierNext"));
        emailNext.click();
        Thread.sleep(1000);

        WebDriverWait wait = new WebDriverWait(webDriver, 60);
        wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("identifierNext")));

        Thread.sleep(3000);
        WebElement passwordElement = webDriver.findElement(By.xpath("//input[@type='password']"));
        passwordElement.sendKeys(password);

        Thread.sleep(1000);
        WebElement passwordNext = webDriver.findElement(By.id("passwordNext"));
        passwordNext.click();

    } catch (Exception e) {
        LOGGER.info(String.format("No email/password field available or it is already logged in: [%s]: ",
                e.getMessage()));
    }
}
Gashu
quelle
1
Klingt nach einer Einschränkung bei Google selbst. Sie möchten wahrscheinlich nicht, dass Benutzer der UI-Automatisierung auf ihre Dienste zugreifen. Ich habe das gleiche Problem in letzter Zeit mehrmals bei StackOverflow gesehen und das Problem ist immer das gleiche. Sie werden wahrscheinlich mehr Glück haben, wenn Sie ihre API verwenden.
Christine
Es scheint, als ob Google weiß, dass ein Roboter versucht, sich anzumelden, und er möchte nicht, dass dies geschieht, wie @Christine sagte ... Ändern Sie den Chromedriver wie hier erwähnt , damit er den Roboter (Skript) nicht erkennen kann. Außerdem müssen Sie beim Anmelden eine zufällige Wartezeit verwenden, bevor Sie die einzelnen Tasten in den Textfeldern drücken, damit Sie kein Captcha sehen. Senden Sie keine Schlüssel direkt an Textfelder.
Ali Sajjad
@Christine Auf welche API beziehen Sie sich?
Gashu
@AliSajjad Das hat nicht geholfen, ich habe sowohl versucht, den Chromedriver zu modifizieren, als auch zufällige Wartezeiten verwendet.
Gashu
Haben Sie versucht, den verwendeten userAgent zu ändern? Vielleicht stellt sich Selen als Selen vor, also versucht Google, es zu blockieren. Dies könnte helfen -> stackoverflow.com/a/29966769/2838206
klubi

Antworten:

5

Aktivieren Sie "Weniger sicheren App-Zugriff zulassen". In
Ihrem Konto gibt es eine Einstellung, die Sie umschalten können, um dies zu unterstützen. Es ist das "Weniger sicheren App-Zugriff zulassen". Sie sollten in der Lage sein, den folgenden Link zu besuchen, um diese Einstellung umzuschalten, wenn Sie bereits bei dem Google Mail-Konto angemeldet sind, das Sie ändern möchten.

Link zum Ändern der Einstellungen in Ihrem Google-Konto: https://myaccount.google.com/lesssecureapps

Weitere Informationen (Quelle): https://support.google.com/accounts/answer/6010255

NANfan
quelle
Ich empfehle diese Lösung auf jeden Fall. Diese Einstellung hilft uns wirklich dabei, uns mit Java Mail API oder Maven Configuration ohne UI-Intervention anzumelden.
Amit Jain
3
Ich habe dies bereits versucht. Leider wurde das Problem dadurch nicht behoben.
Gashu
@gashu Kannst du mir genau erklären, was du mit diesem Test machen willst? Es gibt einige Tools, mit denen Sie versuchen können, die Vorgänge weiter zu isolieren oder zu beheben. Ein solches Tool wird in diesem Artikel erwähnt. Wenn Sie mir näher erläutern, wie der Test eingerichtet ist, welche Maßnahmen ergriffen werden und was am Ende des Tests behauptet wird, hilft dies, Sie in eine Richtung zu weisen, die Ihnen helfen kann. medium.com/@levz0r/…
NANfan
4
Hat bei mir nicht funktioniert.
SurpriseDog
1
Die Frage bezog sich speziell auf Selenium, mit dem die weniger erfolgreiche App-Einstellung nichts zu tun hat, da Selenium für Google keine App ist und sicherlich keine unterstützte. Google kann mithilfe eines Web-Treibers erkennen, dass die Anmeldung über einen Browser initiiert wird. Dieser neue Block zielt speziell darauf ab. Derzeit ist keine Lösung bekannt.
Mondstein
3

Ich habe gerade etwas ausprobiert, das nach mehreren Stunden Versuch und Irrtum für mich funktioniert hat.

Durch Hinzufügen args: ['--disable-web-security', '--user-data-dir', '--allow-running-insecure-content' ]zu meiner Konfiguration wurde das Problem behoben.

Später wurde mir klar, dass dies nicht das war, was mir geholfen hat, als ich es mit einer anderen E-Mail versuchte und es nicht funktionierte. Nach einigen Beobachtungen habe ich etwas anderes herausgefunden und dies wurde erprobt und getestet.

Automatisierung verwenden :

Gehen Sie zu https://stackoverflow.com/users/login. Wählen Sie Mit Google-Strategie anmelden. Geben Sie den Google-Benutzernamen und das Kennwort ein. Melden Sie sich bei Stackoverflow an. Gehen Sie zu https://gmail.com (oder zu der Google-App, auf die Sie zugreifen möchten).

Nachdem Sie dies einen ganzen Tag lang (ca. 24 Stunden) konsequent getan haben, versuchen Sie, Ihr Login direkt bei Google Mail (oder der Google-App, auf die Sie zugreifen möchten) direkt zu automatisieren. Mindestens zwei andere Personen haben dies mit Erfolg durchgeführt. PS - Möglicherweise möchten Sie mit der Stapelüberlauf-Anmeldung fortfahren, bis Sie zumindest eine Captcha-Anfrage erhalten, da wir alle diese Phase ebenfalls durchlaufen haben.

Yinka Alabi
quelle
1

Dieses Problem war auf das Selen-Chrom-Profil zurückzuführen. Erstellen Sie ein neues Chrome-Profil und melden Sie sich mit der E-Mail-ID an, mit der Sie das Problem hatten. Schalten Sie dann die Synchronisierung ein.

Mit diesem Chromprofil kann ich die Anmeldeschritte überspringen und den Hauptprozess direkt ausführen. Verwenden Sie Chrome Options:, um ein neu erstelltes Chrome-Profil als Argument hinzuzufügen.

ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setBinary("Binary path of the Chrome");

Hoffe dieser hilft dir.

pramod_maddu
quelle
1
Danke für die Antwort! Aber ich suchte nach einer Lösung, bei der wir kein Chrome-Profil erstellen müssen. Wenn ich mich nicht irre, kann Selen jeweils einen Browser öffnen, oder? Ich bekomme Fehler, da das Chrome-Profil bereits verwendet wird.
Gashu
1

Überprüfen Sie, ob Ihre Chrome-Version> = 79 ist, und führen Sie in diesem Fall ein Downgrade auf 78 durch. Folgendes habe ich getan (Windows):

Ich habe "Retail Chrome" deinstalliert, das sich ständig mit hinterhältigen Tricks wie Google Chrome-Diensten, die im Hintergrund nach Updates suchen, ständig auf die neueste Version aktualisiert.

Selbst das Deaktivieren dieser Systemdienste hat nicht geholfen, da Chrome im Einzelhandel auch Timer-Ereignisse installiert, die diese Dienste mitten in der Nacht wieder aktivieren, sodass Sie mit einer neuen Version aufwachen und es erst bemerken, wenn Probleme auftreten.

Ich habe v78 über das hier gefundene "Offline-Installationsprogramm" installiert, das anscheinend keine "hilfreichen" Funktionen für das automatische Upgrade installiert: https://www.neowin.net/news/google-chrome-780390470-offline-installer/

Das obige Problem verschwand wie Magie. Es scheint, dass in Version 79 einige Anti-Funktionen integriert sind, die Informationen nach Hause rufen, mit denen Google den Schluss ziehen kann, dass ein Bot am Werk ist.

Ich hoffe, das funktioniert für Sie ... wenn nicht, könnten Sie viel Zeit investieren und Ihren eigenen "Chrome-Simulator" erstellen, indem Sie Chromium entsprechend patchen und kompilieren ...

Blitter
quelle
Ich habe zu Unrecht gedacht, dass Chrome v78 keine hinterhältigen Funktionen für das automatische Upgrade installiert. Es ersetzt sich beim Neustart einfach von Zeit zu Zeit durch Version 80+. Die einzige Möglichkeit, dieses Verhalten zu stoppen, besteht darin, es C:\Users\USERNAME\AppData\Local\Google\Chrome\Applicationvor dem Starten von Chrome zu überprüfen. Wenn eine Datei new_chrome.exeund / oder ein Ordner mit dem Namen 80.*(oder höher zum Zeitpunkt des Lesens) vorhanden ist, wurde die erzwungene automatische Aktualisierung ausgelöst. Löschen new_chrome.exeund dann starten chrome.exe. Es wäre trivial, eine Batch-Datei zu schreiben, die new_chrome.exevor dem Start gelöscht wird chrome.exe.
Blitter