python - Selenium:尝试使用 cookie 登录 - "Can only set cookies for current domain"

标签 python post selenium cookies http-post

我正在努力实现的目标

我正在尝试登录一个必须使用 Selenium headless 启用 cookie 的网站,我正在使用 PhantomJS 作为驱动程序。

问题

我首先使用 Selenium IDE 记录了该过程,使用 Firefox(不是 headless )它工作正常。然后我将代码导出到 Python,现在我无法登录,因为它抛出一个错误,提示“只能为当前域设置 Cookie”。我不知道为什么会遇到这个问题,是不是我在正确的域中?

代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
import unittest, time, re

        self.driver = webdriver.PhantomJS()
        self.driver.implicitly_wait(30)
        self.base_url = "https://login.example.com"

        driver = self.driver
        driver.get(self.base_url)

        all_cookies = self.driver.get_cookies()

        # It prints out all cookies and values just fine
        for cookie in all_cookies
            print cookie['name'] + " --> " + cookies['value']

        # Set cookies to driver
        for s_cookie in all_cookies:
            c = { s_cookie['name'] : s_cookie['value']}
            # This is where it's throwing an error saying "Can only set Cookies for current domain
            driver.add_cookie(c)

        ...

我尝试过的

我试过将 cookie 保存在字典中,转到另一个域,返回到原始域并添加 cookie,然后尝试登录,但它仍然不起作用(如 this thread 中所建议)

感谢任何帮助。

最佳答案

调查每个 cookie 对。我遇到了类似的问题,一些 cookie 属于谷歌。您需要确保 cookie 仅添加到当前域并且也属于同一域。在那种情况下,您的异常是预期的。附带一提,如果我没记错的话,您不能使用 localhost 添加 cookie。更改为 IP 地址。此外,调查您获得的 cookie 的特殊域和过期信息。看,如果他们返回 null

编辑

我在 Gmail 上做了这个简单的测试来显示你做错了什么。乍一看,我没有注意到您正试图获取部分 cookie,一对,并将其添加到域中。由于 cookie 没有任何域、路径、过期等信息,它试图将 cookie 添加到当前域 (127.0.0.1) 并抛出一些不太有意义的误导性信息。注意:为了成为一个有效的 cookie,它必须具有您遗漏的正确域和过期信息。

import unittest
from selenium.webdriver.common.by import By

from selenium import webdriver


__author__ = 'Saifur'


class CookieManagerTest(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.PhantomJS("E:\\working\\selenium.python\\selenium\\resources\\phantomjs.exe")
        self.driver.get("https://accounts.google.com/ServiceLogin?service=mail&continue=https://mail.google.com/mail/")
        self.driver.find_element(By.ID, "Email").send_keys("userid")
        self.driver.find_element(By.ID, "next").click()
        self.driver.find_element(By.ID, "Passwd").send_keys("supersimplepassword")
        self.driver.find_element(By.CSS_SELECTOR, "[type='submit'][value='Sign in']").click()
        self.driver.maximize_window()

    def test(self):
        driver = self.driver
        listcookies = driver.get_cookies()

        for s_cookie in listcookies:
            # this is what you are doing
            c = {s_cookie['name']: s_cookie['value']}
            print("*****The partial cookie info you are doing*****\n")
            print(c)
            # Should be done
            print("The Full Cookie including domain and expiry info\n")
            print(s_cookie)
            # driver.add_cookie(s_cookie)


    def tearDown(self):
        self.driver.quit()

Console output:

D:\Python34\python.exe "D:\Program Files (x86)\JetBrains\PyCharm Educational Edition 1.0.1\helpers\pycharm\utrunner.py" E:\working\selenium.python\selenium\python\FirstTest.py::CookieManagerTest true Testing started at 9:59 AM ...

*******The partial cookie info you are doing*******

{'PREF': 'ID=*******:FF=0:LD=en:TM=*******:LM=*******:GM=1:S=*******'}

The Full Cookie including domain and expiry info

{'httponly': False, 'name': '*******', 'value': 'ID=*******:FF=0:LD=en:TM=*******:LM=1432393656:GM=1:S=iNakWMI5h_2cqIYi', 'path': '/', 'expires': 'Mon, 22 May 2017 15:07:36 GMT', 'secure': False, 'expiry': *******, 'domain': '.google.com'}

Notice: I just replaced some info with ******* on purpose

关于python - Selenium:尝试使用 cookie 登录 - "Can only set cookies for current domain",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30292025/

相关文章:

javascript - 如何从 JavaScript 将数据 POST 到 php,然后返回到同一个 JavaScript 函数

post - 如何确定TCP/IP中上传+下载的总数据量

Python 元调试

android - 如何制作带有导航按钮的Python Kivy webview应用程序并在浏览器中打开外部链接?

php - IE7 中一个子文件夹的 $_POST 变量为空

python - Selenium PhantomJS 等待图像可用

eclipse - "testng doesn' t 支持嵌套的 "java"元素。”- 执行 build.xml 时 - JAR 目标

selenium - 如何处理 IE selenium 上的新选项卡?

python - 如果出现被零除的如何通过

python - 关于hough_line和hough_line_peaks的代码解释