由于“此浏览器或应用程序可能不安全",无法使用 selenium 自动化登录谷歌. [英] Unable to sign into google with selenium automation because of "This browser or app may not be secure."

查看:289
本文介绍了由于“此浏览器或应用程序可能不安全",无法使用 selenium 自动化登录谷歌.的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 selenium 登录谷歌,但不断收到此浏览器或应用程序可能不安全"的错误消息.

I am trying to login to google with selenium and I keep getting the error that "This browser or app may not be secure."

我用来登录的功能是:

async function loginToChrome(driver, username, password) {
  await driver.get("https://accounts.google.com/signin");
  await driver.sleep(1000);
  let email_phone = await driver.findElement(
    By.xpath("//input[@id='identifierId']")
  );
  await email_phone.sendKeys(username);
  await driver.findElement(By.id("identifierNext")).click();
  await driver.sleep(1000);

  let passEl = await driver.findElement(By.xpath("//input[@name='password']"));
  await passEl.sendKeys(password);
  await driver.findElement(By.id("passwordNext")).click();
  await driver.sleep(1000);
}

这是同样的问题https://stackoverflow.com/questions/59433453/无法登录 google-account-in-selenium-chrome-driverhttps://stackoverflow.com/questions/59276975/couldnt-sign-you-in-this-browser-or-app-may-be-insecure-python-selenium-chrome

我尝试使用 chrome 和 firefox 网络驱动程序,但都不起作用.我也试过做 .excludeSwitches(['enable-automation']) 这也没有帮助.

I have tried using both the chrome and firefox web drivers and both don't work. I have also tried doing .excludeSwitches(['enable-automation']) which also didn't help.

这让我想到,也许登录页面可以检测到我正在自动化环境中运行.我尝试了这个解决方案,它会隐藏应用程序正在网络驱动程序中运行:网站可以检测到您何时使用带有 chromedriver 的 selenium 吗?

This made me think that maybe the sign-in page could detect that I was running in an automated environment. I tried this solution that would hide that the app is running in a web driver: Can a website detect when you are using selenium with chromedriver?

我还查看了 User-Agent 以查看这是否是问题所在,但我发现它与我的常规 chrome 相同.

I have also looked into the User-Agent to see if that was the problem but what I have found is that it is identical to my regular chrome one.

所有这些都没有奏效,这让我陷入困境.我已经看到一些解决方案说要使用正常安装的 chrome 中已经创建的用户配置文件,但这不适用于我的用例.

All of this has not worked which makes leaves me stuck. I have seen solutions that say to use an already created user profile from your normal installation of chrome, but this wouldn't work for my use case.

有没有人找到解决办法?我已经找了几个小时了,结果两手空空.

Has anyone found the solution to this? I have been searching for hours and have come up empty-handed.

好像最近这件事引起了很多关注.我找到了一个解决方案,可以让我继续使用自动化客户端而不会出现太多问题.切换到 Puppeteer.查看这些包:

It seems like this has been getting a lot of attention recently. I found a solution that allowed me to continue to use an automated client without having too many problems. Switching to Puppeteer. Look into these packages:

    "puppeteer",
    "puppeteer-extra",
    "puppeteer-extra-plugin-stealth"

编辑 2:我最近看到这引起了很多关注.我找到了我最终用来登录的代码.我使用 puppeteer 而不是 selenium 来做到这一点

EDIT 2: I have seen this get a lot of attention recently. I found the code that I ended up using to login. I used puppeteer instead of selenium to do this

async function login(
  page: Page,
  username: string,
  password: string,
  backup: string
) {
  await page.goto("https://accounts.google.com/");

  await page.waitForNavigation();

  await page.waitForSelector('input[type="email"]');
  await page.click('input[type="email"]');

  await page.waitForNavigation();

  //TODO : change to your email
  await page.type('input[type="email"]', username);
  await page.waitForSelector("#identifierNext");
  await page.click("#identifierNext");

  await page.waitFor(1000);

  await page.waitForSelector('input[type="password"]');
  await page.click('input[type="password"]');
  await page.waitFor(500);
  //TODO : change to your password
  await page.type('input[type="password"]', password);

  await page.waitForSelector("#passwordNext");
  await page.click("#passwordNext");
  await page.waitForNavigation();
}

推荐答案

以下内容也适用于我:1.尝试用你的谷歌账户登录stackoverflow2.登录后,转到电子邮件

The followings work me as well: 1. try to login stackoverflow with your google account 2. once login, go to the email

解决办法

     WebDriver driver;
    System.setProperty("webdriver.chrome.driver", "chromeDriver/chromedriver.exe");
    driver = new ChromeDriver();
     GeneralClass te =  new GeneralClass ();

    driver.get("https://accounts.google.com/signin/oauth/identifier?client_id=717762328687-iludtf96g1hinl76e4lc1b9a82g457nn."
            + "apps.googleusercontent.com&as=JS6BM8cjL-8j9votansdkw&destination=https%3A%2F%2Fstackauth"
            + ".com&approval_state=!ChRoYWVvLUlNMk5hSXJWUGlaSVl2WBIfc3lSa0lueENpb29lSU5vbEVpbVNxcUZGaGNkSEJoYw%E2%88%99AJDr988AAAAAXlBKc7PzEomxSzgNqd4wLptVlf0Ny3Qx&oauthgdpr=1&xsrfsig=ChkAeAh8T8JNDxCf2Zah5fb_rQ55OMiF8KmMEg5hcHByb3ZhbF9zdGF0ZRILZGVzdGluYXRpb24SBXNvYWN1Eg9vYXV0aHJpc2t5c2NvcGU&flowName=GeneralOAuthFlow");
     te.waitingForElementSendingKey(driver, By.id("identifierId"), "XXXXXXXX@gmail.com");
     te.waitingForElementForClickOnly(driver, By.id("identifierNext"));
     te.waitingForElementSendingKey(driver,By.name("password"), "PASSSWORD");
     te.waitingForElementForClickOnly(driver, By.id("passwordNext"));
     Thread.sleep(1500);
     driver.get("https://mail.google.com/mail/u/0/#inbox");

谢谢

这篇关于由于“此浏览器或应用程序可能不安全",无法使用 selenium 自动化登录谷歌.的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆