Кодовая логика:
- Webdriver наследует все настройки и куки от обычного Firefox
браузер.
- Этот веб-драйвер используется для посещения новых веб-сайтов, которые предоставляют
новые куки.
Таким образом, вопрос заключается в том, как мне добавить эти новые файлы cookie обратно в cookies.sqlite
без возиться с инструкциями вставки SQL или есть способ создать новый файл cookies.sqlite
который будет содержать старые и новые куки? Ниже приведен код, в котором я пытался использовать подход с операторами вставки, но он мне не очень нравится, поскольку файлы cookie в файле cookies.sqlite
и файлы cookie, возвращаемые методом get_cookies()
, имеют разные форматы.
from selenium import webdriver
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
import os.path
import shutil
import time
import sqlite3
original_profile_dir = 'C:/Users/hocke/AppData/Roaming/Mozilla/Firefox/Profiles/x9fhjo47.default'
print ('creating profile')
profile = FirefoxProfile(profile_directory=original_profile_dir)
print ('Profile dir: %s' % profile.profile_dir)
profile.set_preference("general.useragent.override", 'bot')
print ('updating prefs')
profile.update_preferences()
print ('creating browser')
browser = webdriver.Firefox(firefox_profile=profile)
print ('loading page')
browser.get('http://ya.ru') # 'www.flashexample.com/'
time.sleep(2)
cookies_file = profile.profile_dir + '/cookies.sqlite'
try:
conn = sqlite3.connect(cookies_file )
cur = conn.cursor()
cur.execute("SELECT * FROM moz_cookies")
## cur.execute("SELECT name FROM sqlite_master WHERE type='table'")
rows = cur.fetchall()
for row in rows:
print(row)
cursor = conn.execute('select * from moz_cookies')
names = list(map(lambda x: x[0], cursor.description))
print(names)
# cookies.sqlite moz_cookies table columns
## ['id', 'baseDomain', 'originAttributes',
## 'name', 'value', 'host', 'path', 'expiry',
## 'lastAccessed', 'creationTime', 'isSecure',
## 'isHttpOnly', 'inBrowserElement', 'sameSite']
# example of a cookie found in cookies.sqlite database
## (8, 'mozilla.org', '', '_gat', '1', '.mozilla.org', '/', 1547430227, 1547430167201000, 1547430167201000, 0, 0, 0, 0)
# example of a cookie returned by get_cookies() method
## {'name': 'yandexuid', 'value': '8652085301547430444', 'path': '/',
## 'domain': '.ya.ru',
## 'secure': False,
## 'httpOnly': False,
## 'expiry': 1862790444}
sql = "INSERT INTO moz_cookies VALUES%s"
for cookie in browser.get_cookies():
print(cookie)
cur.execute(sql % cookie) # code intentionally fails here
except Exception as e:
print(e)
pass
browser.close()
time.sleep(2)
print('backup cookies')
for name in ('cookies.sqlite', 'webdriver-py-profilecopy/cookies.sqlite'):
cookies_file = os.path.join(profile.profile_dir, name)
if os.path.exists(cookies_file):
print ('found cookies file %s' % cookies_file)
target = os.path.join(original_profile_dir, 'cookies.sqlite')
print ('%s --> %s' % (cookies_file, target))
shutil.copy(cookies_file, target)
break