我正在尝试使用 selenium 登录 Google,但我不断收到此浏览器或应用程序可能不安全"的错误消息.
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-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'])
也没有帮助.
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.
这让我觉得登录页面可能会检测到我在自动化环境中运行.我尝试了这个解决方案,它可以隐藏应用程序在网络驱动程序中运行:当您使用 selenium 和 chromedriver 时,网站可以检测到吗?
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.尝试用你的google账号登录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 自动化登录 Google.的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!