尝试通过 Selenium 和 Python 使用 GeckoDriver Firefox 登录 Gmail 帐户时出现“此浏览器或应用程序可能不安全”错误

Posted

技术标签:

【中文标题】尝试通过 Selenium 和 Python 使用 GeckoDriver Firefox 登录 Gmail 帐户时出现“此浏览器或应用程序可能不安全”错误【英文标题】:“This browser or app may not be secure” error while attempting to login in to Gmail account using GeckoDriver Firefox through Selenium and Python 【发布时间】:2020-04-18 07:09:29 【问题描述】:

我想使用 selenium 登录我的 gmail 帐户。我使用 python2.7 。 它没有错误,但是页面说由于某种原因我无法登录我的帐户。你可以看到下面的截图。

这是我的代码:

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

EXE_PATH = r'C:\Users\LENOVO\Downloads\geckodriver.exe'
driver = webdriver.Firefox(executable_path=EXE_PATH)

def login():
    mail = 'myMail'
    pw = 'myPassword'
    driver.get('https://gmail.com')
    email = driver.find_element_by_name('identifier')
    email.send_keys(mail)
    driver.find_element_by_id('identifierNext').click()
    time.sleep(10)
    password = driver.find_element_by_name('password')
    password.send_keys(pw)
    driver.find_element_by_id('passwordNext').click()

我该怎么办?请帮助我,我只是一个菜鸟和初学者。谢谢楼主

【问题讨论】:

【参考方案1】:

绕过 Google 自动化检测的方法是使用 undetected_chromedriver 库。 您可以使用pip install undetected-chromedriver 安装该软件包。 启动驱动程序对象后,您可以简单地使用 selenium 来操作驱动程序。

# initiate the driver with undetetcted_chromedriver
import undetected_chromedriver.v2 as uc
driver = uc.Chrome()

# operate the driver as you would with selenium
driver.get('https://my-url.com') 

# Example use of selenium imports to be used with the driver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By

try:
    driver.find_element(By.XPATH, '//*[@id="my-id"]').click()
except NoSuchElementException:
    print("No Such Element Exception")

注意:Google 的登录是一个弹窗,所以不要忘记将窗口句柄交换到弹窗登录,然后再切换回主窗口。

【讨论】:

这根本不起作用,并且该软件包似乎未维护。即使使用他们被黑的驱动程序,我仍然可以看到 Google 启动页面。 @Cerin 我刚才再次测试了它,它仍然对我有用。 :-)【参考方案2】:

我还没有真正解决这个问题,但有一个解决方法。如果只是登录是您的唯一目的,那么这可能对您没有用,但如果您想执行进一步的操作并且使用 google 登录会妨碍您,那么:

您可以在 chrome 浏览器中手动登录。

使用您的默认 chrome 配置文件启动 chrome。

要查找您的 chrome 配置文件数据的路径,您需要在地址栏中输入 chrome://version/。

  options = webdriver.ChromeOptions()
  options.add_argument("user-data-dir=<Path to your chrome profile>")
  chrome_driver_path = "C:/Users/..."
  driver = webdriver.Chrome(executable_path=chrome_driver_path, chrome_options=options)

这将跳过您的登录步骤

【讨论】:

【参考方案3】:

我无法使用 selenium 或 headless-chromium-php 登录谷歌, 但是我们可以先用chrome登录google,在“chrome://version/”中找到“Profile Path”,例如我的profile路径是“/home/diyism/.config/google-chrome/Profile 2”,然后我将它复制到“/home/diyism/.config/google-chrome/selenium-profiles/default”,然后运行 ​​headless-chromium-php:

$factory = new \HeadlessChromium\BrowserFactory('/opt/google/chrome/chrome');
$browser = $factory->createBrowser([
        'headless' => false,
        'keepAlive' => true,
        'userDataDir'=>'/home/diyism/.config/google-chrome/selenium-profiles'
    ]);
$page = $browser->createPage();
$page->navigate('https://mail.google.com')->waitForNavigation();
$pageTitle = $page->evaluate('document.title')->getReturnValue();
sleep(20);
$page->screenshot()->saveToFile('gmail.inbox.list.png');

现在我可以在 gmail.inbox.list.png 中看到我的 gmail 收件箱列表。

【讨论】:

【参考方案4】:

试试这个对我有用的解决方案我现在什至可以使用这个解决方案登录我的 Gmail。在设置了用户代理属性之后,它就像一个奇迹一样工作。

<webview src="https://mail.google.com/" useragent="Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko"></webview>

【讨论】:

【参考方案5】:

此Google Support 页面声明通过浏览器登录“使用自动化测试框架”已被禁用,以下security reasons 和 Google 建议使用 browser-based OAuth 2.0 authentication service 执行“使用 Google 登录”。

由于某些网站(例如 ***.com)允许您使用“使用 Google 登录”登录他们的服务,因此必须通过 Google OAuth 2.0 身份验证进行。这意味着您这样做也间接登录了您的 Google 帐户,因此您可以使用所有 Google 服务。

因此您可以完全自动登录您的 Google 帐户,例如通过使用 Python 脚本,在您的代码中执行这些操作:

    打开一个由 selenium webdriver 控制的新浏览器窗口 在同一窗口中加载 *** 登录页面(或使用“使用 Google 登录”的任何其他网站) 选择“使用 Google 登录” 提供您的 Google 帐户凭据并登录 *** 打开https://mail.google.com/或https://www.gmail.com/加载谷歌邮箱

这样,您无需执行任何手动操作即可登陆您的 Gmail 邮箱。

请记住在不同操作之间添加一些 5s 延迟,因为操作太快或太频繁会被 *** 识别为恶意自动化操作,您可能会被阻止,您需要手动进行I'm not a robot 验证

【讨论】:

它对我有用,我每天都使用这种方法登录我的 Gmail 帐户! 这不再有效。我猜谷歌开发人员经常在 *** 上闲逛:P【参考方案6】:
    打开 selenium 控制的浏览器 手动打开 *** 站点(或其他获得 google 授权的站点) 手动通过 google 执行授权

然后,当您使用 gmail 授权再次运行代码时,它应该可以正常工作。

【讨论】:

【参考方案7】:

此错误屏幕...

...暗示 WebDriver 无法验证 Browsing ContextBrowser 会话。


Raphael Schaad 在文章"This browser or app may not be secure" error when trying to sign in with Google on desktop apps 中提到:

如果用户可以使用其他 Google 帐户登录同一个应用程序,那么问题一定出在特定帐户上。

可能的原因,它是用户使用双因素身份验证的唯一帐户。


解决方案

为此 Google 帐户禁用 双重身份验证并执行您的 @Test


tl;博士

Sign in with a supported browser

【讨论】:

嗯,谢谢你的帮助,主人。但是,我的帐户没有使用两因素身份验证。我从未在此帐户上启用它 @ArdoRianda 查看更新后的答案,让我知道状态。【参考方案8】:

这似乎是自动登录的一个已知问题。

如果您想实现这一点,则需要在您的 gmail 帐户中启用安全性较低的应用。

https://myaccount.google.com/lesssecureapps

此设置可能不适用于:

启用两步验证的帐户:此类帐户需要应用专用密码才能访问不太安全的应用。 G Suite 用户:如果您的管理员锁定了安全性较低的应用帐户访问权限,则此设置会隐藏。

【讨论】:

感谢您的解决方案大师。我试过你的解决方案,我启用了它。但是,它不起作用。问题仍未解决

以上是关于尝试通过 Selenium 和 Python 使用 GeckoDriver Firefox 登录 Gmail 帐户时出现“此浏览器或应用程序可能不安全”错误的主要内容,如果未能解决你的问题,请参考以下文章

使用Chrome驱动程序通过python和selenium在指定位置下载文件

ElementNotVisibleException:消息:尝试通过 Selenium 和 Python 单击按钮时出现元素不可交互错误

NoSuchElementException:消息:尝试通过 Selenium 和 Python 单击 VISA 按钮时无法找到元素

尝试通过 Chromedriver 2.34、Selenium 3.8 和 Python 3.6.2 登录富国银行时出错

如何通过 Selenium 和 Python 从 html 标签跨度获取文本

如何通过 Selenium WebDriver 和 Python 定位用户名和密码元素