J'ai un service Selenium qui doit se connecter à mon compte gmail comme première étape. Cette fonctionnalité fonctionnait il y a quelques semaines, mais tout à coup la connexion commence à échouer et je vois cette erreur dans le navigateur, j'ai essayé à la fois dans Chrome et les pilotes Firefox dans Selenium -
Cette erreur survient après que le service Selenium a inséré l'e-mail, le mot de passe et cliqué sur le bouton de connexion. Une erreur similaire a également été signalée dans le forum d'assistance Google ici - https://support.google.com/accounts/thread/10916318?hl=en , ils ont déclaré que "Google semble avoir introduit des outils d'automatisation détection sur leur flux de connexion! " mais il n'y a pas de solution dans ce fil.
Quelques autres détails qui pourraient être utiles-
Faites-moi savoir si vous avez besoin de jeter un œil au code, je le posterai ici. Merci d'avance!
Modifier Ajout d'un exemple de code pour se référer.
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()));
}
}
Basculez "Autoriser l'accès aux applications moins sécurisé"
Il existe un paramètre sur votre compte que vous pouvez basculer qui peut vous aider. Il s'agit de "Autoriser l'accès aux applications moins sécurisé". Vous devriez pouvoir visiter le lien ci-dessous pour basculer ce paramètre si vous êtes déjà connecté au compte gmail que vous souhaitez modifier.
Lien pour modifier les paramètres du compte Google: https://myaccount.google.com/lesssecureapps
Informations supplémentaires (source): https://support.google.com/accounts/answer/6010255
Vérifiez si votre Chrome est> = 79 et si oui, rétrogradez à 78. Voici ce que j'ai fait (Windows):
J'ai désinstallé "Chrome de vente au détail" qui continuait constamment à se mettre à niveau vers la dernière version en utilisant des astuces sournoises telles que Google Chrome services qui vérifieraient les mises à jour en arrière-plan.
Même la désactivation de ces services système n'a pas aidé car Retail Chrome installe également des événements de minuteur qui réactiveraient lesdits services au milieu de la nuit, vous vous réveilleriez donc avec une nouvelle version, et même pas remarquer jusqu'à ce que les choses se brisent.
J'ai installé la v78 à partir du "programme d'installation hors ligne" qui se trouve ici, qui ne semble pas installer de fonctionnalités de mise à niveau automatique "utiles": https://www.neowin.net/news/google-chrome-780390470-offline -installer /
Le problème ci-dessus a disparu comme par magie. Il semble que la v79 possède une fonction anti-fonctionnalité intégrée qui appelle à la maison des informations qui permettent à Google de conclure qu'un bot est au travail.
J'espère que cela fonctionne pour vous ... sinon, vous pourriez investir beaucoup de temps et créer votre propre "simulateur Chrome" en corrigeant et compilant Chromium en conséquence ...
Ce problème était dû au profil Selenium chrome. Créez un nouveau profil chrome et connectez-vous avec l'identifiant de messagerie avec lequel vous faisiez face au problème. Ensuite Activez la synchronisation.
Avec ce profil chrome en place, je peux ignorer les étapes de connexion et effectuer directement le processus principal. Utilisez: Chrome Options
pour ajouter le nouveau profil chrome comme argument.
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setBinary("Binary path of the Chrome");
J'espère que celui-ci vous aidera.
Je viens d'essayer quelque chose qui a fonctionné pour moi après plusieurs heures d'essais et d'erreurs.
Ajouter args: ['--disable-web-security', '--user-data-dir', '--allow-running-insecure-content' ]
à ma configuration a résolu le problème.
J'ai réalisé plus tard que ce n'était pas ce qui m'a aidé alors que j'essayais avec un autre e-mail et cela n'a pas fonctionné. Après quelques observations, j'ai compris autre chose et cela a été essayé et testé.
Utilisation de l'automatisation :
Accédez à https://stackoverflow.com/users/login Sélectionnez Se connecter avec la stratégie Google Entrez le nom d'utilisateur et le mot de passe Google Connectez-vous à Stackoverflow Accédez à https://gmail.com (ou quelle que soit l'application Google à laquelle vous souhaitez accéder)
Après avoir fait cela de manière cohérente pendant une journée entière (environ 24 heures), essayez d'automatiser votre connexion directement à gmail (ou à l'application Google à laquelle vous souhaitez accéder) directement ... J'ai eu au moins deux autres personnes qui l'ont fait avec succès. PS - Vous voudrez peut-être continuer avec la connexion stackoverflow jusqu'à ce que vous obteniez au moins une demande de captcha, car nous avons tous traversé cette phase également.