Добавить новые куки в cookies.sqlite - PullRequest
0 голосов
/ 14 января 2019

Кодовая логика:

  1. Webdriver наследует все настройки и куки от обычного Firefox браузер.
  2. Этот веб-драйвер используется для посещения новых веб-сайтов, которые предоставляют новые куки.

Таким образом, вопрос заключается в том, как мне добавить эти новые файлы 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...