python webkit webview помните куки?
Я написал короткий скрипт на python, который открывает Google-музыку в окне веб-просмотра. однако я не могу найти ничего о том, как заставить webkit использовать куки, чтобы мне не приходилось входить каждый раз при запуске.
Вот что у меня есть:
#!/usr/bin/env python
import gtk, webkit
import ctypes
libgobject = ctypes.CDLL('/usr/lib/i386-linux-gnu/libgobject-2.0.so.0')
libwebkit = ctypes.CDLL('/usr/lib/libsoup-2.4.so.1')
libsoup = ctypes.CDLL('/usr/lib/libsoup-2.4.so.1')
libwebkit = ctypes.CDLL('/usr/lib/libwebkitgtk-1.0.so.0')
proxy_uri = libsoup.soup_uri_new('http://tcdproxy.tcd.ie:8080') #proxy urli
session = libwebkit.webkit_get_default_session()
libgobject.g_object_set(session, "proxy-uri", proxy_uri, None)
w = gtk.Window()
w.connect("destroy",w.destroy)
w.set_size_request(1000,600)
w.connect('delete-event', lambda w, event: gtk.main_quit())
s = gtk.ScrolledWindow()
v = webkit.WebView()
s.add(v)
w.add(s)
w.show_all()
v.open('http://music.google.com')
gtk.main()
Любая помощь по этому вопросу будет принята с благодарностью, спасибо,
Ричард
3 ответа
Сработало, но для этого потребовалось изучить больше типов, чем я хотел -_-. Попробуйте это - мне потребовались другие пути к библиотекам и т. Д., Чем вы, поэтому я просто вставлю то, что важно.
#remove all cookiejars
generic_cookiejar_type = libgobject.g_type_from_name('SoupCookieJar')
libsoup.soup_session_remove_feature_by_type(session, generic_cookiejar_type)
#and replace with a new persistent jar
cookiejar = libsoup.soup_cookie_jar_text_new('/path/to/your/cookies.txt',False)
libsoup.soup_session_add_feature(session, cookiejar)
Код довольно понятен. Есть также SoupCookieJarSqlite, который вы можете предпочесть, хотя я уверен, что текстовый файл будет проще для разработки.
РЕДАКТИРОВАТЬ: на самом деле, удаление банку печенья, кажется, ничего не делает, поэтому соответствующий фрагмент
#add a new persistent cookie jar
cookiejar = libsoup.soup_cookie_jar_text_new('/path/to/your/cookies.txt',False)
libsoup.soup_session_add_feature(session, cookiejar)
Я знаю его старый вопрос и искал ответ повсюду. Наконец-то появился сам после проб и ошибок. Надеюсь, что это помогает другим.
Это в основном тот же ответ от Мэтта, просто использующий интроспекцию GIR и чувствующий себя более питоническим.
from gi.repository import Soup
cookiejar = Soup.CookieJarText.new("<Your cookie path>", False)
cookiejar.set_accept_policy(Soup.CookieJarAcceptPolicy.ALWAYS)
session = WebKit.get_default_session()
session.add_feature(cookiejar)
В последней версии т.е.GTK WebKit2 4.0
, это нужно сделать следующим образом:
import gi
gi.require_version('Soup', '2.4')
gi.require_version('WebKit2', '4.0')
from gi.repository import Soup
from gi.repository import WebKit2
browser = WebKit2.WebView()
website_data_manager = browser.get_website_data_manager()
cookie_manager = website_data_manager.get_cookie_manager()
cookie_manager.set_persistent_storage('PATH_TO_YOUR/cookie.txt', WebKit2.CookiePersistentStorage.TEXT)
cookie_manager.set_accept_policy(Soup.CookieJarAcceptPolicy.ALWAYS)