GMail禁止通过Automation(Selenium)登录

时间:2019-08-22 06:10:29

标签: google-chrome selenium-webdriver automation gmail

我正在使用硒来自动化Web应用程序中的邮件验证过程。我已经有一个脚本来登录gmail并阅读该帐户收到的激活邮件。脚本直到昨天都运行良好,但是今天我遇到了问题。

Screenshot of issue

Additional Screenshot of issue

如果使用硒启动浏览器,则Gmail不允许登录。说,

  

您使用的是Google无法识别的浏览器,或者是我们不支持的浏览器设置。

  • 我尝试使用chromedriver版本升级到76.0.0 chrome版本76.0.3809.100(64位)。 (以前使用的chromedriver 2.45)问题仍然存在。
  • 已验证即使我使用Firefox而不是Chrome进行自动化,也会发生此问题。
  • 验证浏览器中已启用Javascript
  • Gmail不需要任何OTP或恢复邮件。很简单 阻止我尝试通过自动化登录。但是我能够 手动登录到同一帐户。
  

使用的软件:“ webdriverio”:“ ^ 4.14.1”,“ wdio-cucumber-framework”:   “ ^ 2.2.8”

感谢您的帮助。

8 个答案:

答案 0 :(得分:3)

经过数小时的反复试验,我只是尝试了一些对我有用的东西。

args: ['--disable-web-security', '--user-data-dir', '--allow-running-insecure-content' ]添加到我的配置中解决了该问题。

后来我意识到,这不是帮助我的原因,因为我尝试使用另一封电子邮件,但没有用。经过一些观察,我发现其他问题,并且已经尝试和测试了。

使用自动化

转到https://stackoverflow.com/users/login 选择使用Google策略登录 输入Google用户名和密码 登录到Stackoverflow 转到https://gmail.com(或您要访问的任何Google应用)

在一整天(大约24小时)内持续进行此操作后,尝试直接将您的登录信息直接自动自动直接登录gmail(或您要访问的任何Google应用)...我至少有两个人这样做成功。 PS-您可能要继续进行stackoverflow登录,直到我们都经历了该阶段为止,至少收到验证码请求。

答案 1 :(得分:2)

经过反复试验,发现只有在已经从同一App / IP /设备创建了多个gmail帐户的情况下,才发生此问题。 Google会以某种方式标记这些帐户并阻止它们(如果它们是由自动化框架/扩展程序启动的)。

临时解决方案:

  • 使用一个新的GMail帐户创建一个 与其他设备使用不同的手机号码(不推荐)。
  • 我们应该使用 nodemailer 之类的解决方法 zeolearn.com/magazine/sending-and-receiving-emails-using-nodejs (如Rahul L所提建议)
  • 自动化临时邮件提供商,例如 Guerilla Mail 10分钟邮件 担心只接收邮件

我的拙见是完全避免自动化第三方Mail应用程序的UI,因为您无法预测它们的UI和元素将如何变化。他们可能出于安全目的阻止您启动,并且他们拥有这样做的一切权利!

感谢Hamza Lachi和Rahul L花费您宝贵的时间来帮助我。

答案 2 :(得分:2)

转到 Gmail --> 设置 --> 搜索“不太安全的应用访问” --> 启用

这不是建议的方法,因为它允许访问安全性较低的应用程序并且更容易进入您的帐户,但如果它只是一个测试帐户并且没有重要数据传入或传出,您可以提供此试一试。

答案 3 :(得分:0)

您需要打开编辑器并复制此代码,并将其粘贴并保存为email.py,然后在该目录中打开terminal / cmd / powershell并键入此python .\email.py

注意:

确保将chrome驱动程序放在保存python文件的目录中

您需要复制此代码并将其粘贴到编辑器中

这是脚本:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import pyautogui as pg


username = input("Enter Your Username: ")

password = input("Enter Your Password: ")

driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://accounts.google.com/ServiceLogin?service=mail&passive=true&rm=false&continue=https://mail.google.com/mail/&ss=1&scc=1&ltmpl=default&ltmplcache=2&emr=1&osid=1#identifier")
driver.maximize_window()


mail = WebDriverWait(driver, 100).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='identifierId']"))).send_keys(username)

login = WebDriverWait(driver, 100).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='identifierNext']/span"))).click()

passw = WebDriverWait(driver, 100).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='password']/div[1]/div/div[1]/input"))).send_keys(password)

next = WebDriverWait(driver, 100).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='passwordNext']/span/span"))).click()

答案 4 :(得分:0)

  1. 将cookie编辑器添加到浏览器。

  2. 将您的帐户Cookie信息添加到浏览器。 您的帐户将自动打开。

答案 5 :(得分:0)

通过stackoverflow登录gmail的步骤:

  1. 打开浏览器窗口并打开stackoverflow
  2. 点击登录
  3. 使用Google登录
  4. 输入电子邮件和密码
  5. Stackoverflow使用gmail凭据登录
  6. 现在打开mail.google.com(gmail.com)
  7. 您现在使用selenium登录了gmail

您可以复制此代码并将其粘贴到编辑器中,必须在代码中要求的位置输入chrome驱动程序的路径,gmail的电子邮件地址和密码。

collect($respon_tel['item'])
    ->pluck('judul_kontrak', 'judul_kontrak')
    ->map($f = fn ($item) => trim(strtolower($item)))
    ->diff(
        collect($model)->pluck('nama_proyek')->map($f)
    )->map(function ($item, $key) {
        return [
            'nama_proyek' => $key,
            'from' => 'Another API',
        ];
    })->values();

答案 6 :(得分:0)

找到解决方案,添加这些论点:

options.AddArguments("--disable-web-security", "--user-data-dir=true", "--allow-running-insecure-content");

^^ C#顺便说一句

答案 7 :(得分:0)

我认为这不是自动化框架的问题,也不是自动化 Chrome 应用程序的问题,而是 Google 服务器阻止了自动登录请求。我没有任何明确的证据/真正了解他们是如何做到的,但有几条线索将我指向了这个方向:

  • 首先,在登录页面上,输入您的用户名并单击下一步后,将触发用户查找请求,类似于 https://accounts.google.com/_/lookup/accountlookup?hl=vi&_reqid=xxxxx&rt=j,此请求的响应包含类似于 https://accounts.google.com/signin/rejected?rrk=46&hl=vi 的内容。在后续请求中,浏览器只会尝试解决并显示错误对用户的意义。
  • 其次,here 表示“Google 不允许您从某些浏览器登录。Google 可能会停止通过软件自动化而非人工控制的浏览器登录< /em>”。这意味着 Google 已采取措施来检测来自自动化浏览器的请求,尤其是处于调试模式的 Chrome 系列浏览器,许多自动化框架都使用这些浏览器。
  • Taiko 的thread about similar issue 还提到 Google 会阻止来自以调试模式运行的 Chrome 的请求。

最近我尝试了 Cypress 和 Taiko,但没有任何效果,同样的“被拒绝”问题,这破坏了我为我的应用(使用 GG OIDC 登录)进行 e2e 测试的最初计划。