El inicio de sesión en la cuenta de gmail falla (automatización de selenio)

8

Tengo un servicio Selenium que tiene que iniciar sesión en mi cuenta de gmail como primer paso. Esta funcionalidad funcionaba hace un par de semanas, pero de repente el inicio de sesión comienza a fallar y veo este error en el navegador, probé los controladores de Chrome y Firefox en selenio.

ingrese la descripción de la imagen aquí

Este error se produce después de que el servicio de selenio inserta el correo electrónico, la contraseña y hace clic en el botón de inicio de sesión. También se informó un error similar en el foro de soporte de Google aquí: https://support.google.com/accounts/thread/10916318?hl=es . Dijeron que "¡Google parece haber introducido la detección de herramientas de automatización en su flujo de inicio de sesión!" pero no hay solución en este hilo.

Algunos otros detalles que pueden ser útiles

  • No puedo iniciar sesión manualmente en las cuentas de Google en los navegadores
    abiertos por Selenium.
  • Pero puedo iniciar sesión manualmente en estas cuentas en la aplicación Google Chrome.

Avíseme si necesita echar un vistazo al código, lo publicaré aquí. ¡Gracias por adelantado!

Editar Agregar código de muestra para referir.

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
fuente
1
Suena como una limitación con los propios Google, probablemente no quieren que las personas que usan la automatización de la interfaz de usuario accedan a sus servicios. He visto este mismo problema aparecer en StackOverflow varias veces últimamente y el problema es siempre el mismo. Probablemente tendrás mejor suerte usando su API.
Christine
Parece que Google sabe que un robot podría estar intentando iniciar sesión y no quieren que eso suceda, como dijo @Christine ... Intente modificar el cromedriver como se menciona aquí para que no puedan detectar el robot (script). Además, al iniciar sesión, debe usar la espera aleatoria antes de presionar cada tecla en los cuadros de texto, para que no vea un captcha. No envíe directamente claves a cuadros de texto.
Ali Sajjad
@Christine ¿A qué API te refieres?
gashu
@AliSajjad Eso no ayudó, intenté modificar el controlador cromado y también usé un tiempo de espera aleatorio.
gashu
¿Has intentado modificar userAgent que se utiliza? Tal vez Selenium se presenta como Selenium, por lo tanto, Google intenta bloquearlo. Esto podría ayudar -> stackoverflow.com/a/29966769/2838206
klubi

Respuestas:

5

Alternar "Permitir acceso a aplicaciones menos seguras"
Hay una configuración en su cuenta que puede alternar que puede ayudar con esto. Es el "Permitir acceso a aplicaciones menos seguras". Debería poder visitar el siguiente enlace para alternar esa configuración si ya ha iniciado sesión en la cuenta de Gmail que desea modificar.

Enlace para cambiar la configuración en la cuenta de Google: https://myaccount.google.com/lesssecureapps

Más información (fuente): https://support.google.com/accounts/answer/6010255

NANfan
fuente
Definitivamente recomiendo estas soluciones, esta configuración realmente ayuda a que intentemos iniciar sesión utilizando la API de correo Java o la configuración de Maven sin intervención de la interfaz de usuario.
Amit Jain
3
Ya he intentado esto, desafortunadamente, esto no solucionó el problema.
Gashu
@gashu ¿Puedes explicarme exactamente lo que intentas hacer con esta prueba? Existen algunas herramientas que podría intentar aislar o arreglar aún más lo que está sucediendo. Una de esas herramientas se menciona en este artículo. Si me da más detalles sobre cómo se configura la prueba, qué acción se toma y qué se afirma al final de la prueba, ayudará a orientarlo en una dirección que pueda ayudar. medium.com/@levz0r/…
NANfan
44
No funciono para mi.
SurpriseDog
1
La pregunta se refería específicamente a Selenium, que la configuración de la aplicación de menor éxito no tiene nada que ver, porque para Google, Selenium no es una aplicación, y ciertamente no es compatible. Google puede detectar que el inicio de sesión se inicia desde un navegador utilizando un controlador web, y este nuevo bloque se dirige específicamente a eso. Actualmente no hay una solución conocida.
Moonstone
3

Acabo de probar algo que funcionó para mí después de varias horas de prueba y error.

Agregar args: ['--disable-web-security', '--user-data-dir', '--allow-running-insecure-content' ]a mi configuración resolvió el problema.

Más tarde me di cuenta de que esto no fue lo que me ayudó, ya que intenté con un correo electrónico diferente y no funcionó. Después de algunas observaciones, descubrí algo más y esto ha sido probado y probado.

Usando la automatización :

Vaya a https://stackoverflow.com/users/login Seleccione Iniciar sesión con Google Strategy Ingrese el nombre de usuario y la contraseña de Google Inicie sesión en Stackoverflow Vaya a https://gmail.com (o cualquier aplicación de Google a la que desee acceder)

Después de hacer esto de manera constante durante todo un día (aproximadamente 24 horas), intente automatizar su inicio de sesión directamente en gmail (o cualquier aplicación de Google a la que desee acceder) directamente ... He tenido al menos otras dos personas que lo han hecho con éxito. PD: es posible que desee continuar con el inicio de sesión de stackoverflow hasta que al menos reciba una solicitud de captcha, ya que todos pasamos por esa fase también.

Yinka Alabi
fuente
1

Este problema se debió al perfil de cromo de selenio. Cree un nuevo perfil de Chrome e inicie sesión con el ID de correo electrónico con el que estaba enfrentando el problema. Luego encienda la sincronización.

Con este perfil de Chrome en su lugar, puedo omitir los pasos de inicio de sesión y hacer directamente el proceso principal. Uso: Chrome Optionspara agregar un perfil de Chrome recién creado como argumento.

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

Espero que este te ayude.

pramod_maddu
fuente
1
¡Gracias por responder! Pero estaba buscando una solución en la que no tengamos que crear un perfil de Chrome, con un perfil si no estoy equivocado, el selenio puede abrir un navegador a la vez, ¿verdad? Comienzo a recibir errores como el perfil de Chrome ya está en uso.
Gashu
1

Comprueba si tu versión de Chrome es> = 79 y, de ser así, baja a 78. Esto es lo que hice (Windows):

Desinstalé el "Chrome minorista" que constantemente se actualizaba a la última versión utilizando trucos engañosos como los servicios de Google Chrome que buscarían actualizaciones en segundo plano.

Incluso deshabilitar esos servicios del sistema no ayudó porque Chrome minorista también instala eventos de temporizador que volverían a habilitar dichos servicios en el medio de la noche, por lo que se despertaría con una nueva versión y ni siquiera se daría cuenta hasta que las cosas se rompan.

Instalé v78 desde el "instalador sin conexión" que se encuentra aquí, que no parece instalar ninguna función de actualización automática "útil": https://www.neowin.net/news/google-chrome-780390470-offline-installer/

El problema anterior desapareció como magia. Parece que v79 tiene una función anti-característica incorporada que llama a casa con información que le permite a Google concluir que un bot está funcionando.

Espero que esto funcione para usted ... si no, podría invertir mucho tiempo y crear su propio "simulador de Chrome" parcheando y compilando Chromium en consecuencia ...

blitter
fuente
Me equivoqué al pensar que Chrome v78 no instala características de actualización automática furtivas. Simplemente se reemplaza de vez en cuando con la versión 80+ al reiniciar. La única forma en que he encontrado para detener este comportamiento es mirar C:\Users\USERNAME\AppData\Local\Google\Chrome\Applicationantes de iniciar Chrome. Si hay un archivo new_chrome.exey / o una carpeta nombrada 80.*(o superior en el momento en que lee esto), entonces ha activado su actualización automática forzada. Eliminar new_chrome.exe, luego iniciar chrome.exe. Sería trivial escribir un archivo por lotes que se elimine new_chrome.exeantes de comenzar chrome.exe.
Blitter