Selenium: Trying to log in with cookies - “Can only set cookies for current domain”

后端 未结 3 1793
刺人心
刺人心 2020-12-10 04:20

What I am trying to achieve

I am trying to log in to a website where cookies must be enabled using Selenium headless, I am using PhantomJS for drive

3条回答
  •  难免孤独
    2020-12-10 04:28

    Investigate the each cookies pairs. I ran into the similar issues and some of the cookies belonged to Google. You need to make sure cookies are being added only to the current Domain and also belong to the same Domain. In that case your exception is expected. On a side note, if I recall it correctly you cannot use localhost to add the cookies if you are doing so. Change to IP address. Also, investigate the cookies you are getting specially domain and expiry information. See, if they are returning null

    Edit

    I did this simple test on Gmail to show what you have done wrong. At first look I did not notice that you are trying to grab partial cookie, a pair, and add that to the domain. Since, the cookie does not have any Domain, path, expiry etc. information it was trying to add the cookie to current domain(127.0.0.1) and throwing some misleading info that did not quite make sense. Notice: in order to be a valid cookie it must have to have the correct Domain and expiry information which you have been missing.

    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

提交回复
热议问题