首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >由于“此浏览器或应用程序可能不安全”,无法使用selenium自动化登录谷歌。

由于“此浏览器或应用程序可能不安全”,无法使用selenium自动化登录谷歌。
EN

Stack Overflow用户
提问于 2019-12-28 19:06:18
回答 5查看 34.1K关注 0票数 16

我正试图用selenium登录谷歌,我一直收到一个错误:“这个浏览器或应用程序可能不安全。”

我用来登录的函数是:

代码语言:javascript
运行
复制
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-driverhttps://stackoverflow.com/questions/59276975/couldnt-sign-you-in-this-browser-or-app-may-be-insecure-python-selenium-chrome相同的问题。

我试过同时使用chrome和firefox的web驱动程序,但两者都不能工作。我也尝试过做.excludeSwitches(['enable-automation']),这也没有帮助。

这让我想,也许登录页面可以检测到我是在一个自动化环境中运行的。我尝试过这样的解决方案,它可以隐藏应用程序在web驱动程序中运行的情况:网站能检测到什么时候你使用selenium和色度驱动器吗?

我还查看了User-Agent,以确定这是否是问题所在,但我发现它与我的普通铬一是完全相同的。

所有这些都没有起作用,这让我陷入困境。我见过一些解决方案,这些解决方案说要使用从正常安装的chrome中创建的用户配置文件,但这对我的用例不起作用。

有人找到解决办法了吗?我找了好几个小时,空手而归.

编辑:最近似乎得到了很多关注。我找到了一个解决方案,可以让我继续使用自动化客户端,而不会有太多的问题。切换到木偶人。查看这些包:

代码语言:javascript
运行
复制
    "puppeteer",
    "puppeteer-extra",
    "puppeteer-extra-plugin-stealth"

编辑2:我最近看到这件事得到了很多关注。我找到了我最后用来登录的代码。我用木偶师而不是硒来做这个。

代码语言:javascript
运行
复制
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();
}
EN

Stack Overflow用户

发布于 2020-05-01 15:03:54

以下是对我起作用的东西:

我正在使用Puppeteer,但我敢打赌,对于任何自动脚本,它都是一样的。

您必须有一个userDataDirectory,以便浏览器可以使用相同的存储信息。

您必须首先使用headless: false运行脚本,这样才能打开浏览器。如果您尝试在当前选项卡上登录(自动导航的选项卡),那么在每次登录尝试时都会得到该错误。

诀窍(对我)是打开一个新的选项卡,手动导航,再试一次。

下次运行脚本时,不需要登录。

票数 1
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59514049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档