javascript - 由于 "This browser or app may not be secure.",无法使用 selenium 自动化登录谷歌

标签 javascript selenium google-chrome selenium-webdriver selenium-chromedriver

我正在尝试使用 selenium 登录谷歌,但我不断收到“此浏览器或应用程序可能不安全”的错误消息。
我用来登录的功能是:

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/unable-to-log-into-google-account-in-selenium-chrome-driver

https://stackoverflow.com/questions/59276975/couldnt-sign-you-in-this-browser-or-app-may-be-insecure-python-selenium-chrome
我试过同时使用 chrome 和 firefox 网络驱动程序,但都不起作用。
我也试过做.excludeSwitches(['enable-automation'])这也没有帮助。
这让我觉得也许登录页面可以检测到我在自动化环境中运行。
我尝试了这个解决方案,它可以隐藏应用程序正在 Web 驱动程序中运行:Can a website detect when you are using selenium with chromedriver?
我还查看了 User-Agent看看这是否是问题,但我发现它与我的常规 chrome 相同。
所有这一切都没有奏效,这让我陷入了困境。我已经看到解决方案说使用您正常安装的 chrome 中已经创建的用户配置文件,但这不适用于我的用例。
有没有人找到解决方案?我一直在寻找几个小时,却空手而归。
编辑:
看来这件事最近引起了很多关注。我找到了一个解决方案,让我可以继续使用自动化客户端而不会遇到太多问题。切换到 Puppeteer。
查看这些软件包:
    "puppeteer",
    "puppeteer-extra",
    "puppeteer-extra-plugin-stealth"
编辑2:
我看到这最近引起了很多关注。我找到了我最终用来登录的代码。我使用 puppeteer 而不是 selenium 来做到这一点
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.尝试用你的google账号登录stackoverflow
2. 登录后,进入邮箱

这是解决方案

     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");

谢谢

关于javascript - 由于 "This browser or app may not be secure.",无法使用 selenium 自动化登录谷歌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59514049/

相关文章:

javascript - 通过关闭菜单单击关闭下拉菜单 - 两个下拉菜单

python - 如何在只读模式下设置输入的值

javascript - 我必须在页面的元素中输入文本,但该页面有四个具有相同属性的元素

c# - 使用 C# 在 Selenium 中处理窗口弹出窗口

javascript - 在 Angular JS 中使用服务无法返回范围值

javascript - 完整的背景图像最初是固定的,然后在 DIV 内容结束时滚动

css - 为什么 Chrome 会忽略我的 CSS 选择器?

google-chrome - ctrl+g 和 ctrl+f 的区别

javascript - 如何通过 javascript(chrome 扩展)将文本从一个选项卡复制并粘贴到另一个选项卡?

javascript - Extjs如何解析jsonP响应