Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
登录gmail帐户失败(selenium automation)_Selenium_Google Chrome_Selenium Webdriver_Webdriver_Selenium Chromedriver - Fatal编程技术网

登录gmail帐户失败(selenium automation)

登录gmail帐户失败(selenium automation),selenium,google-chrome,selenium-webdriver,webdriver,selenium-chromedriver,Selenium,Google Chrome,Selenium Webdriver,Webdriver,Selenium Chromedriver,我有一个Selenium服务,第一步必须登录到我的gmail帐户。这项功能在几周前就开始工作了,但突然登录开始失败,我在浏览器中看到了这个错误,在selenium的Chrome和Firefox驱动程序中都尝试过- 此错误发生在selenium服务插入电子邮件、密码并单击登录按钮之后。谷歌支持论坛也报告了类似的错误,他们说“谷歌似乎已经在他们的登录流中引入了自动化工具检测!”但在这个线程中没有解决方案 其他一些可能有用的细节- 我无法在浏览器中手动登录到Google帐户 由Selenium打开

我有一个Selenium服务,第一步必须登录到我的gmail帐户。这项功能在几周前就开始工作了,但突然登录开始失败,我在浏览器中看到了这个错误,在selenium的Chrome和Firefox驱动程序中都尝试过-

此错误发生在selenium服务插入电子邮件、密码并单击登录按钮之后。谷歌支持论坛也报告了类似的错误,他们说“谷歌似乎已经在他们的登录流中引入了自动化工具检测!”但在这个线程中没有解决方案

其他一些可能有用的细节-

  • 我无法在浏览器中手动登录到Google帐户
    由Selenium打开
  • 但我可以手动登录到谷歌的这些帐户 铬应用
如果您需要查看代码,请告诉我,我将在此处发布。 提前谢谢

编辑 添加示例代码以供参考

public void loginGoogleAccount(String emailId, String password) throws Exception {
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--profile-directory=Default");
    options.addArguments("--whitelisted-ips");
    options.addArguments("--start-maximized");
    options.addArguments("--disable-extensions");
    options.addArguments("--disable-plugins-discovery");
    WebDriver webDriver = new ChromeDriver(options);
    webDriver.navigate().to("https://accounts.google.com");
    Thread.sleep(3000);
    try {
        WebElement email = webDriver.findElement(By.xpath("//input[@type='email']"));
        email.sendKeys(emailId);
        Thread.sleep(1000);

        WebElement emailNext = webDriver.findElement(By.id("identifierNext"));
        emailNext.click();
        Thread.sleep(1000);

        WebDriverWait wait = new WebDriverWait(webDriver, 60);
        wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("identifierNext")));

        Thread.sleep(3000);
        WebElement passwordElement = webDriver.findElement(By.xpath("//input[@type='password']"));
        passwordElement.sendKeys(password);

        Thread.sleep(1000);
        WebElement passwordNext = webDriver.findElement(By.id("passwordNext"));
        passwordNext.click();

    } catch (Exception e) {
        LOGGER.info(String.format("No email/password field available or it is already logged in: [%s]: ",
                e.getMessage()));
    }
}

这个问题是因为硒铬的轮廓。创建一个新的chrome配置文件,并使用您遇到问题时使用的电子邮件id登录。然后打开同步

有了这个chrome配置文件,我可以跳过登录步骤,直接完成主流程。使用:
Chrome选项
添加新创建的Chrome配置文件作为参数

ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setBinary("Binary path of the Chrome");
希望此选项能帮助您。

切换“允许不太安全的应用程序访问”
您的帐户上有一个可以切换的设置,这可能会有所帮助。这是“允许不太安全的应用程序访问”。如果您已经登录到您想要修改的gmail帐户,您应该能够访问下面的链接来切换该设置

更改google帐户设置的链接:

进一步资料(来源):

检查您的Chrome版本是否>=79,如果是,则降级到78。以下是我所做的(Windows):

我卸载了“retail Chrome”,它不断地使用谷歌Chrome服务之类的诡计将自己升级到最新版本,在后台检查更新

甚至禁用那些系统服务也无济于事,因为零售Chrome也安装了一些定时器事件,这些事件会在半夜重新启用这些服务,所以你会醒来到一个新的版本,甚至在事情中断之前也不会注意到。 我从这里找到的“脱机安装程序”安装了v78,它似乎没有安装任何“有用的”自动升级功能:

上述问题像魔法一样消失了。v79似乎有一些内置的反功能,可以通过信息呼叫总部,让谷歌得出机器人正在工作的结论


希望这对你有用。。。如果没有,您可以投入大量时间,通过相应地修补和编译Chrome来创建自己的“Chrome模拟器”…

经过几个小时的反复试验,我刚刚尝试了一些适合我的东西

args:['--disable web security'、'--user data dir'、'--allow running unsecure content']
添加到我的配置中解决了这个问题

后来我意识到这并没有帮我解决问题,因为我尝试了另一封电子邮件,但没有成功。经过一些观察,我发现了一些其他的东西,这已经被尝试和测试过了

使用自动化

去 选择使用谷歌策略登录 输入谷歌用户名和密码 登录到Stackoverflow 转到(或任何你想访问的谷歌应用程序)

在坚持一整天(大约24小时)之后,尝试直接自动登录gmail(或任何你想访问的谷歌应用程序)。。。我至少有另外两个人成功地做到了这一点。 PS-您可能希望继续使用stackoverflow登录,直到您至少收到验证码请求,因为我们也都经历了该阶段。

这对我很有用:

from selenium import webdriver 
from time import sleep

username=raw_input("username: ") 
password=raw_input("password: ") 
driver=webdriver.Chrome('...')           
driver.get('https://stackoverflow.com/users/signup') 
sleep(3) 
driver.find_element_by_xpath('//*[@id="openid-buttons"]/button[1]').click() 
driver.find_element_by_id('identifierId').send_keys(username) 
driver.find_element_by_id('identifierNext').click() 
sleep(3) 
driver.find_element_by_name('password').send_keys(password) 
driver.find_element_by_id('passwordNext').click() 
sleep(2) 
driver.get('https://mail.google.com/mail/u/0/#inbox')

我找到了一个类似的解决方案。

听起来像是谷歌自身的一个限制,他们可能不希望人们使用UI自动化来访问他们的服务。我最近在StackOverflow上多次看到同样的问题,而且问题总是一样的。使用他们的API,你可能会有更好的运气。谷歌似乎知道机器人可能正在尝试登录,他们不希望像@Christine所说的那样发生这种情况。。。尝试修改前面提到的chromedriver,使其无法检测到机器人(脚本)。此外,在登录时,您必须在按下文本框中的每个键之前使用随机等待,以便看不到验证码。不要直接将密钥发送到文本框。@Christine您指的是哪种API?@AliSajjad没有帮助,我尝试了修改chromedriver和使用随机等待时间。您尝试过修改使用的userAgent吗?也许Selenium介绍自己为Selenium,因此Google试图阻止它。这可能会有帮助->谢谢回复!但我一直在寻找一个解决方案,我们不必创建chrome配置文件,如果我没有错的话,使用配置文件selenium可以一次打开一个浏览器,对吗?我开始出现错误,比如Chrome profile已经在使用。我绝对推荐这种解决方案,这种设置确实有助于我们尝试使用java mail api或使用maven配置登录,而无需ui干预。不幸的是,我已经尝试过了,这并没有解决问题。@gashu你能告诉我你到底想做什么吗?有一些工具,你可以尝试进一步隔离或修复正在发生的事情。本文中提到了一个这样的工具。如果你给我更多关于测试是如何设置的,采取了什么行动,以及测试结束时断言了什么的细节,这将有助于为你指明一个有帮助的方向。这个问题是关于Selenium的,不太成功的应用程序设置与此无关,因为对于Google来说,Selenium不是一个应用程序,当然也不是一个受支持的应用程序。古格尔