我正试图用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的web驱动程序,但两者都不能工作。我也尝试过做.excludeSwitches(['enable-automation']),这也没有帮助。
这让我想,也许登录页面可以检测到我是在一个自动化环境中运行的。我尝试过这样的解决方案,它可以隐藏应用程序在web驱动程序中运行的情况:网站能检测到什么时候你使用selenium和色度驱动器吗?
我还查看了User-Agent,以确定这是否是问题所在,但我发现它与我的普通铬一是完全相同的。
所有这些都没有起作用,这让我陷入困境。我见过一些解决方案,这些解决方案说要使用从正常安装的chrome中创建的用户配置文件,但这对我的用例不起作用。
有人找到解决办法了吗?我找了好几个小时,空手而归.
编辑:最近似乎得到了很多关注。我找到了一个解决方案,可以让我继续使用自动化客户端,而不会有太多的问题。切换到木偶人。查看这些包:
"puppeteer",
"puppeteer-extra",
"puppeteer-extra-plugin-stealth"编辑2:我最近看到这件事得到了很多关注。我找到了我最后用来登录的代码。我用木偶师而不是硒来做这个。
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();
}发布于 2020-02-20 21:46:02
下面的内容也适用于我: 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");谢谢
发布于 2020-03-11 11:20:14
经过几个小时的尝试和错误,我刚刚尝试了一些对我有用的东西。
将args: ['--disable-web-security', '--user-data-dir', '--allow-running-insecure-content' ]添加到我的配置中解决了这个问题。
后来我意识到,这并不是帮助我的原因,因为我尝试了一封不同的电子邮件,但它并没有起作用。经过一些观察后,我想出了另一种方法,并对此进行了试验和测试。
使用自动化
转到https://stackoverflow.com/users/login,选择使用谷歌策略登录,输入谷歌用户名和密码,登录到Stackoverflow,转到https://gmail.com (或者任何你想访问的谷歌应用程序)
在连续做了一整天(大约24小时)之后,尝试直接自动登录gmail (或任何你想访问的Google应用程序).我至少让另外两个人成功地做了这件事。PS -您可能需要继续进行堆栈溢出登录,直到您至少得到一个captcha请求,因为我们都经历了这个阶段。
发布于 2020-02-03 14:46:01
一个对我有用的解决方法是在由webdriver启动的chrome实例中创建一个google帐户。使用这个新创建的帐户对我有效,但我不知道它和其他谷歌帐户到底有什么区别。
https://stackoverflow.com/questions/59514049
复制相似问题