由于“此浏览器或应用程序可能不安全”,无法使用 selenium 自动化登录 Google。
Posted
技术标签:
【中文标题】由于“此浏览器或应用程序可能不安全”,无法使用 selenium 自动化登录 Google。【英文标题】:Unable to sign into google with selenium automation because of "This browser or app may not be secure." 【发布时间】:2020-04-18 05:00:58 【问题描述】:我正在尝试使用 selenium 登录 Google,但一直收到“此浏览器或应用程序可能不安全”的错误消息。
我用来登录的功能是:
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://***.com/questions/59433453/unable-to-log-into-google-account-in-selenium-chrome-driver 和 https://***.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】:此错误消息...
This browser or app may not be secure.
Try using a different browser. If you’re already using a supported browser, you can refresh your screen and try again to sign in.
...暗示 WebDriver 无法验证 Browsing Context 即 Browser 会话。
可能的原因及解决办法
此错误背后可能有多种原因,如下所示:
@Raphael Schaad 在文章"This browser or app may not be secure" error when trying to sign in with Google on desktop apps 中提到,如果用户可以使用其他 Google 帐户登录同一个应用程序,那么问题肯定出在特定帐户上。可能的原因,它是用户使用双因素身份验证的唯一帐户。 另一个可能的原因是使用了Less secure apps。如果某个应用或网站不符合 google-chrome 的 security standards 要求,Google 可能会阻止任何试图通过它登录您的帐户的人。安全性较低的应用可能会让黑客更容易进入您的帐号,因此阻止从这些应用登录有助于确保您的帐号安全。解决方案
在这些情况下,相应的解决方案是:
为此 Google 帐户禁用 双重身份验证并执行您的 @Test。 Allow less secure apps您可以在Sign in to gmail account fails (selenium automation)找到详细讨论
tl;博士
一些相关文档:
Sign in with a supported browser【讨论】:
这不起作用。我正在使用 selenium ChromeDriver 83.0.4103.39,并且该帐户没有启用双重身份验证和允许不太安全的应用程序。 以上两个建议都不起作用 没有一个解决方案有效。发帖前你测试过吗? 禁用两因素身份验证并允许测试帐户上不太安全的应用程序对我有用。谢谢。【参考方案2】:对我有用的一种解决方法是在由 webdriver 启动的 chrome 实例中创建一个 google 帐户。使用这个新创建的帐户对我有用,但我不知道它与其他 google 帐户有什么区别。
【讨论】:
【参考方案3】:以下内容也适用于我: 1.尝试用你的google账号登录*** 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");
谢谢
【讨论】:
【参考方案4】:经过几个小时的反复试验,我刚刚尝试了一些对我有用的方法。
将args: ['--disable-web-security', '--user-data-dir', '--allow-running-insecure-content' ]
添加到我的配置中解决了这个问题。
后来我意识到这对我没有帮助,因为我尝试使用不同的电子邮件但它不起作用。经过一番观察,我想出了一些别的办法,这已经过试验和测试了。
使用自动化:
转到https://***.com/users/login 选择使用 Google 策略登录 输入谷歌用户名和密码 登录到 *** 转至https://gmail.com(或您想访问的任何 Google 应用)
在持续执行此操作一整天(大约 24 小时)后,尝试直接自动登录到 gmail(或您想要访问的任何 Google 应用程序)...我至少有另外两个人这样做成功。 PS - 您可能希望继续使用 *** 登录,直到您至少收到验证码请求,因为我们都经历了那个阶段。
【讨论】:
非常感谢。这些配置解决了我的问题!我的问题是,在我的登录屏幕中,有一个通过 Gmail 登录的按钮,正常 Chrome 的一切正常,但无法使用 Headless chrome 登录。添加--disable-web-security
和--allow-running-insecure-content
解决了这个问题!
@LinhNhatNguyen 虽然这些是我首先尝试解决的问题,但实际上并没有解决它(我使用自动化提供的更新做了其他事情),我很高兴把它留在那里帮助你。【参考方案5】:
这对我有用:
我正在使用 Puppeteer,但我敢打赌它对于任何自动化脚本都是一样的。
您必须有一个 userDataDirectory 以便浏览器可以使用相同的存储信息。
您必须首先使用headless: false
运行脚本,以便您可以打开浏览器。如果您尝试在当前选项卡(自动导航的选项卡)上登录,那么每次登录尝试都会出现该错误。
诀窍(对我来说)是打开一个新标签,手动导航,再试一次。
下次运行脚本时,无需登录。
【讨论】:
抱歉,这个技巧在大约一周内不再起作用(请参阅我的问题***.com/questions/63773283/…)。还有其他想法吗?以上是关于由于“此浏览器或应用程序可能不安全”,无法使用 selenium 自动化登录 Google。的主要内容,如果未能解决你的问题,请参考以下文章
使用 python 和 selenium 进行自动化 Google 登录显示“”此浏览器或应用程序可能不安全“”
尝试通过 Selenium 和 Python 使用 GeckoDriver Firefox 登录 Gmail 帐户时出现“此浏览器或应用程序可能不安全”错误
由于在 Code::Block 中缺少“libgcc_s_dw2-1.dll”,OpenCV 程序无法运行
由于 Firebase 的 IDBIndex 错误,无法提供服务器呈现的应用程序
python执行以下代码报:ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。