Falha ao fazer login na conta do Gmail (automação selenium)


8

Eu tenho um serviço Selenium que precisa fazer login na minha conta do Gmail como o primeiro passo. Essa funcionalidade estava funcionando há algumas semanas, mas de repente o logon começa a falhar e estou vendo esse erro no navegador, tentei nos drivers Chrome e Firefox no selênio -

insira a descrição da imagem aqui

Este erro ocorre após o serviço selênio inserir o email, a senha e clicar no botão de login. Um erro semelhante também foi relatado no Fórum de suporte do Google aqui - https://support.google.com/accounts/thread/10916318?hl=en , eles disseram que "o Google parece ter introduzido a detecção de ferramentas de automação no fluxo de login!" mas não há solução neste segmento.

Alguns outros detalhes que podem ser úteis

  • Não consigo fazer login manualmente nas Contas do Google nos navegadores
    abertos pelo Selenium.
  • Mas consigo fazer login manualmente nessas contas no aplicativo Google Chrome.

Deixe-me saber se você precisa dar uma olhada no código, vou publicá-lo aqui. Desde já, obrigado!

Edite Adicionando código de amostra para referência.

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()));
    }
}

1
Parece uma limitação para o próprio Google, eles provavelmente não querem que as pessoas que usam a automação da interface do usuário acessem seus serviços. Eu já vi esse mesmo problema aparecer no StackOverflow várias vezes ultimamente e o problema é sempre o mesmo. Você provavelmente terá mais sorte usando a API deles.
Christine

Parece que o google sabe que um robô pode estar tentando fazer login e eles não querem que isso aconteça como @Christine disse ... Tente modificar o chromedriver como mencionado aqui para que eles não possam detectar o robô (script). Além disso, durante o login, você deve usar a espera aleatória antes de pressionar cada tecla nas caixas de texto, para não ver um captcha. Não envie chaves diretamente para caixas de texto.
Ali Sajjad

@Christine Qual API você está se referindo?
Gashu 31/12/19

@AliSajjad Isso não ajudou, tentei modificar o chromedriver e também usei o tempo de espera aleatória.
Gashu 31/12/19

Você já tentou modificar o userAgent usado? Talvez o Selenium se apresente como Selenium, assim o Google tenta bloqueá-lo. Isso pode ajudar -> stackoverflow.com/a/29966769/2838206
klubi

Respostas:


5

Alternar "Permitir acesso menos seguro a aplicativos"
Há uma configuração em sua conta que você pode alternar que pode ajudar nisso. É o "Permitir acesso menos seguro a aplicativos". Você poderá acessar o link abaixo para alternar essa configuração se já estiver conectado à conta do Gmail que deseja modificar.

Link para alterar a configuração na conta do Google: https://myaccount.google.com/lesssecureapps

Mais informações (fonte): https://support.google.com/accounts/answer/6010255


Definitivamente, recomendo essas soluções, essa configuração realmente ajuda a tentar fazer login usando a API do java mail ou usando a configuração do maven sem intervenção da interface do usuário.
Amit Jain

3
Eu já tentei isso, infelizmente, isso não resolveu o problema.
gashu 15/01

@gashu Você pode me explicar exatamente o que você está tentando fazer com este teste? Existem algumas ferramentas por aí que você pode tentar isolar ou corrigir ainda mais o que está acontecendo. Uma dessas ferramentas é mencionada neste artigo. Se você me fornecer mais detalhes sobre como o teste é configurado, que ação é tomada e o que é afirmado na conclusão do teste, ajudará a direcioná-lo para uma direção que pode ajudar. medium.com/@levz0r/...
NANfan

4
Não funcionou para mim.
SurpriseDog

1
A questão era especificamente sobre o Selenium, que a configuração de aplicativo com menos sucesso não tem nada a ver, porque, para o Google, o Selenium não é um aplicativo e, certamente, não é compatível. O Google pode detectar que o logon é iniciado a partir de um navegador usando um driver da web, e esse novo bloco visa especificamente isso. Atualmente, não há solução conhecida.
Moonstone

3

Eu apenas tentei algo que funcionou para mim depois de várias horas de tentativa e erro.

A adição args: ['--disable-web-security', '--user-data-dir', '--allow-running-insecure-content' ]à minha configuração resolveu o problema.

Percebi depois que não foi isso que me ajudou, pois tentei com um email diferente e não funcionou. Após algumas observações, descobri outra coisa e isso foi tentado e testado.

Usando automação :

Vá para https://stackoverflow.com/users/login Selecione Faça login com a Estratégia do Google Digite o nome de usuário e a senha do Google Faça login no Stackoverflow Vá para https://gmail.com (ou qualquer outro aplicativo do Google que você deseja acessar)

Depois de fazer isso consistentemente por um dia inteiro (cerca de 24 horas), tente automatizar seu login diretamente no Gmail (ou em qualquer aplicativo do Google que você deseja acessar) diretamente ... Já tive pelo menos duas outras pessoas fazendo isso com sucesso. PS - Você pode continuar com o login do stackoverflow até receber pelo menos uma solicitação de captcha, pois todos nós passamos por essa fase também.


1

Esse problema ocorreu devido ao perfil de selênio cromado. Crie um novo perfil chrome e faça login nele com o ID de email com o qual você estava enfrentando o problema. Em seguida, ative a sincronização.

Com este perfil chrome instalado, posso pular as etapas de login e executar diretamente o processo principal. Use: Chrome Optionspara adicionar um perfil cromado recém-criado como argumento.

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

Espero que este ajude você.


1
Obrigado pela resposta! Mas eu estava procurando uma solução em que não precisamos criar o perfil Chrome, com perfil, se não estiver errado, o selênio pode abrir um navegador por vez, certo? Começo a receber erros como o perfil do Chrome já está em uso.
gashu 3/01

1

Verifique se sua versão do Chrome é> = 79 e, em caso afirmativo, faça o downgrade para 78. Aqui está o que eu fiz (Windows):

Desinstalei o "Chrome de varejo", que constantemente se atualizava para a versão mais recente usando truques furtivos, como os serviços do Google Chrome, que verificavam atualizações em segundo plano.

Mesmo desabilitar esses serviços do sistema não ajudou, porque o Chrome de varejo também instala eventos temporizados que reativariam esses serviços no meio da noite, para que você acordasse com uma nova versão e nem notasse até que as coisas quebrassem.

Instalei a v78 a partir do "instalador offline" encontrado aqui, que parece não instalar nenhum recurso de atualização automática "útil": https://www.neowin.net/news/google-chrome-780390470-offline-installer/

O problema acima desapareceu como mágica. Parece que a v79 possui algum anti-recurso embutido que chama de lar com informações que permitem ao Google concluir que um bot está trabalhando.

Espero que isso funcione para você ... caso contrário, você pode investir muito tempo e criar seu próprio "simulador de Chrome" corrigindo e compilando o Chromium de acordo ...


Eu errei ao pensar que o Chrome v78 não instala recursos de atualização automática sorrateira. Ele simplesmente se substitui de vez em quando pela versão 80+ na reinicialização. A única maneira que encontrei para interromper esse comportamento é olhar C:\Users\USERNAME\AppData\Local\Google\Chrome\Applicationantes de iniciar o chrome. Se houver um arquivo new_chrome.exee / ou uma pasta nomeada 80.*(ou superior quando você ler isso), a atualização automática forçada será acionada. Exclua new_chrome.exee inicie chrome.exe. Seria trivial escrever um arquivo em lotes excluído new_chrome.exeantes de iniciar chrome.exe.
blitter 21/03
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.