[cookies] return loaded cookies as list

don't set_cookie() them immediately into a CookieJar
also, give some more consistent names to chrome/chromium functions
This commit is contained in:
Mike Fährmann
2024-10-12 16:32:29 +02:00
parent 39b7d748f6
commit 3946fe5ac4
4 changed files with 115 additions and 104 deletions

View File

@@ -456,46 +456,49 @@ class Extractor():
cookies = random.choice(cookies)
self.cookies_load(cookies)
def cookies_load(self, cookies):
if isinstance(cookies, dict):
self.cookies_update_dict(cookies, self.cookies_domain)
def cookies_load(self, cookies_source):
if isinstance(cookies_source, dict):
self.cookies_update_dict(cookies_source, self.cookies_domain)
elif isinstance(cookies, str):
path = util.expand_path(cookies)
elif isinstance(cookies_source, str):
path = util.expand_path(cookies_source)
try:
with open(path) as fp:
util.cookiestxt_load(fp, self.cookies)
cookies = util.cookiestxt_load(fp)
except Exception as exc:
self.log.warning("cookies: %s", exc)
else:
self.log.debug("Loading cookies from '%s'", cookies)
self.log.debug("Loading cookies from '%s'", cookies_source)
set_cookie = self.cookies.set_cookie
for cookie in cookies:
set_cookie(cookie)
self.cookies_file = path
elif isinstance(cookies, (list, tuple)):
key = tuple(cookies)
cookiejar = _browser_cookies.get(key)
elif isinstance(cookies_source, (list, tuple)):
key = tuple(cookies_source)
cookies = _browser_cookies.get(key)
if cookiejar is None:
if cookies is None:
from ..cookies import load_cookies
cookiejar = self.cookies.__class__()
try:
load_cookies(cookiejar, cookies)
cookies = load_cookies(cookies_source)
except Exception as exc:
self.log.warning("cookies: %s", exc)
cookies = ()
else:
_browser_cookies[key] = cookiejar
_browser_cookies[key] = cookies
else:
self.log.debug("Using cached cookies from %s", key)
set_cookie = self.cookies.set_cookie
for cookie in cookiejar:
for cookie in cookies:
set_cookie(cookie)
else:
self.log.warning(
"Expected 'dict', 'list', or 'str' value for 'cookies' "
"option, got '%s' (%s)",
cookies.__class__.__name__, cookies)
cookies_source.__class__.__name__, cookies_source)
def cookies_store(self):
"""Store the session's cookies in a cookies.txt file"""