Unable to set a cookie of Github using Selenium Webdriver

Viewed 73

I tried to set a cookie for GitHub using Selenium, but it always failed. After deeper analysis, I found that it was throwing an exception when setting a cookie with the name __Host-user_session_same_site. This seems very strange and I would like to know the reason for this phenomenon.

from selenium import webdriver
from selenium.webdriver.edge.options import Options
from selenium.webdriver.edge.service import Service
import json
import time

driveroptions = Options()

driveroptions.use_chromium = True
driveroptions.add_argument('–start-maximized')

driveroptions.binary_location = r'C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe'

service = Service(
    executable_path=r'C:\Program Files (x86)\Microsoft\Edge\Application\msedgedriver.exe')
driver = webdriver.Edge(options=driveroptions, service=service)

driver.set_page_load_timeout(60)
driver.implicitly_wait(3)

driver.get("https://github.com")

driver.maximize_window()

driver.delete_all_cookies()


with open('cookies.txt', 'r') as f:
    cookies_list = json.load(f)
    for cookie in cookies_list:
        cookie['expiry'] = int(time.time() + 10000)
        new_cookie = {k: cookie[k] for k in {'name', 'value', 'domain', 'path', 'expiry'}}
        # if cookie['name'] == '__Host-user_session_same_site':
        #     continue
        driver.add_cookie(new_cookie)

Before that, the cookies.txt was exported using f.write(json.dumps(driver.get_cookies())) after I logged into Github. If I turn on the commented code above, everything works fine. Otherwise, the program will throw an exception: selenium.common.exceptions.UnableToSetCookieException: Message: unable to set cookie. I don't quite understand what is so special about cookies with this name (__Host-user_session_same_site). My runtime environment information is as follows.

MicrosoftEdge=103.0.1264.62 MsEdgeDriver=103.0.1264.62

I would be very grateful if I could get your help.

1 Answers

This cookie is set to ensure that browsers that support SameSite cookies can check to see if a request originates from GitHub.

You will find only this cookie have a different value of Strict in the sameSite attribute, others being Lax. So when you skip this cookie, everything works fine. You can set this cookie separately by adding this code:

driver.add_cookie({'name':'__Host-user_session_same_site','value': 'itsValue','sameSite':'Strict'})
Related