我们如何使用本地Chrome的Cookie来使用Selenium登录?

时间:2018-02-19 15:58:38

标签: python google-chrome selenium cookies webdriver

我正在尝试创建一个使用Selenium登录Google Gmail网站的测试套件。 问题是Selenium会打开一个新的Chrome窗口(如隐身模式)而没有Cookie。 我的代码:

driver = webdriver.Chrome(executable_path=r'chromedriver.exe')
driver.get("https://hangouts.google.com/")

elem = driver.find_element_by_id("gb_70")
elem.send_keys(Keys.RETURN)

elem2 = driver.find_element_by_id("identifierId")
elem2.send_keys("mygmail@gmail.com")
elem2.send_keys(Keys.RETURN)
time.sleep(2)

elem3 = driver.find_element_by_xpath("//*[@class='whsOnd zHQkBf']")
elem3.send_keys("myPass")
elem3.send_keys(Keys.RETURN)

根据我在互联网上阅读的内容,可以创建2个会话,一个用于存储cookie,第二个用于使用这些cookie。 但这不是我正在寻找的东西,我需要它来使用Chrome存储的cookie。

我尝试手动阅读Chrome的Cookie(来自APPDATA),但它似乎是由浏览器加密的。

3 个答案:

答案 0 :(得分:5)

如果您需要在会话之间使用Cookie,还有其他方法可以执行此操作,请使用Chrome选项user-data-dir将文件夹用作配置文件,我运行:

chrome_options = Options()
chrome_options.add_argument("user-data-dir=selenium") 
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("www.google.com")

你可以在这里执行检查人工交互的登录,我这样做,然后我现在需要的cookie,每次我启动Webdriver与该文件夹一切都在那里。您也可以手动安装扩展程序并在每个会话中使用它们。 Secon我跑的时间,所有的饼干都在那里:

chrome_options = Options()
chrome_options.add_argument("user-data-dir=selenium") 
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("www.google.com") #Now you can see  the cookies, the settings, Extensions and the logins done in the previous session are present here

优点是你可以使用具有不同设置和cookie的多个文件夹,不需要加载扩展,卸载cookie,安装和卸载扩展,更改设置,通过代码更改登录,因此无法获得逻辑程序中断等等这也比通过代码完成所有操作更快。

答案 1 :(得分:1)

您需要执行以下步骤:

  1. 以典型的Gmail用户身份登录,并将Cookie保存到(https://www.google.com)等网址下的文件(脚本1)中。
  2. 使用Cookie登录:在所需的域中打开浏览器(https://www.google.com)并加载Cookie,刷新页面(脚本2)。
  3. 从你的代码:

    1. 我认为您需要在登录后添加等待。
    2. 检查是否已设置Cookie(开发者工具 - >应用程序 - > Cookie)。
    3. PS:如果在 - >之后仍有相同的问题将您的网址更改为" https://accounts.google.com"。

      希望它可以帮到你!

答案 2 :(得分:0)

更新:您可以为accounts.gmail.com

设置Cookie
  1. 导航至google.com,然后设置相关Cookie
  2. 导航至accounts.google.com并设置相关的Cookie(应该是不同的Cookie)
  3. 再次导航到gmail.com
  4. <强>为什么吗

    Gmail的问题在于,当您尝试登录时,系统会将您重定向到“mail.google.com”,因此您必须在会话中拥有此不同域的Cookie。

    如果您的浏览器位于域B中,则Selenium webdriver的add_cookie方法将不允许您为域A设置Cookie(在Gmail案例中,mail.google.com为A,google.com为B)。 使用Selenium完成任务的唯一方法是导航到mail.google.com,然后在到达此页面时设置cookie,然后再重定向,然后重新开始。这是有问题的,因为如果您导航到mail.google.com,您将立即被重定向,因此您无法设置Cookie。

    我会尝试三种方法:

    1. 尝试以某种方式停止重定向,以便您可以为mail.google.com设置Cookie,然后重新开始。
    2. 尝试找到另一个允许您设置Cookie的网络驱动程序
    3. 将selenium web-driver与cookie文件或用户数据目录一起使用
    4. 更改selenium webdriver的代码,以便您设置Cookie(https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/1953#c4