无法使用Selenium / Splinter保存和重新加载Gmail Cookies

jon*_*bon 5 gmail selenium python-3.x splinter

我的目标是登录Gmail,序列化cookie,退出浏览器,然后打开新的浏览器,加载保存的cookie并检查我的电子邮件,而无需输入我的登录详细信息。非常简单明了,我几乎可以在所有尝试过的网站上做到这一点。但是,Gmail迫使我每次都重新登录。

这是我的代码:

from splinter import Browser
import selenium
import pickle

def export_cookies(browser, the_name):
    yummy = browser.cookies.all(verbose=True)
    location = 'cookies/' + the_name
    pickle_save(yummy, location)
    print(the_name, "saved", len(yummy))


def pickle_save(obj, location):
    file_name = location
    file_object = open(file_name, 'wb')
    pickle.dump(obj, file_object)
    file_object.close()


def pickle_load_account(cookie_file_name):
    try:
        return pickle.load(open(cookie_file_name, "rb"))
    except FileNotFoundError:
        return 0


def browser_add_cookies(browser, cookies):
    if len(cookies) > 0:
        for cookie in cookies:
            browser.cookies.add({cookie['name']: cookie['value']})
        print("-----", len(cookies), " cookies added, reloading")
        browser.visit('https://mail.google.com/mail/u/0/#inbox')
    else:
        print("No cookies to load. Error.")


browser = Browser('firefox')
browser.visit('https://mail.google.com/mail/u/0/#inbox')
cookie_file = "cookies/name"
load_cookies = pickle_load_account(cookie_file)
browser_add_cookies(browser, load_cookies)
browser.visit('https://mail.google.com/mail/u/0/#inbox')
input("Save cookies?")
export_cookies(browser, "name")
Run Code Online (Sandbox Code Playgroud)

此代码假定cookie已经保存,但是最后重新保存它们,因此进行第二次运行(如果您是第一次手动登录)。

我的猜测是Gmail是否以某种方式使用了更高级的cookie识别方法?

Tar*_*ani 1

您正在为一个域复制 cookie。您还需要复制以下域

accounts.google.com
mail.google.com
Run Code Online (Sandbox Code Playgroud)

甚至可能更多,请参阅下面的全新登录屏幕截图

域名