class CookieStore(object): def __init__(self): self._cookie_jar = QNetworkCookieJar() def add(self, cookie_dict, scheme, hostname, path="/"): cookie_list = [] for key, value in cookie_dict.items(): cookie = QNetworkCookie() cookie.setDomain(hostname) cookie.setPath(path) key_b = QByteArray() key_b.append(key) cookie.setName(key_b) value_b = QByteArray() value_b.append(value) cookie.setValue(value_b) cookie_list.append(cookie) self._cookie_jar.setCookiesFromUrl(cookie_list, QUrl(str(scheme))) def get(self, url): cookie_list = self._cookie_jar.cookiesForUrl(QUrl(url)) cookie_dict = {} for cookie in cookie_list: cookie_dict[cookie.name()] = cookie.value() return cookie_dict def clear(self, url): cookie_list = self._cookie_jar.cookiesForUrl(QUrl(url)) for cookie in cookie_list: cookie.setValue("") self._cookie_jar.setCookiesFromUrl(cookie_list, QUrl(url))
def cookiesForUrl(self, url): """ Public method to get the cookies for a URL. @param url URL to get cookies for (QUrl) @return list of cookies (list of QNetworkCookie) """ if not self.__loaded: self.load() globalSettings = QWebSettings.globalSettings() if globalSettings.testAttribute(QWebSettings.PrivateBrowsingEnabled): return [] return QNetworkCookieJar.cookiesForUrl(self, url)
def cookiesForUrl(self, url): """ Public method to get the cookies for a URL. @param url URL to get cookies for (QUrl) @return list of cookies (list of QNetworkCookie) """ if not self.__loaded: self.load() globalSettings = QWebSettings.globalSettings() if globalSettings.testAttribute(QWebSettings.PrivateBrowsingEnabled): return [] return QNetworkCookieJar.cookiesForUrl(self, url)
class LoginWindow(QWebEngineView): def __init__(self): super().__init__() self.setWindowIcon(QIcon(app_icon)) self.setWindowTitle('login') self.loadFinished.connect(self.process_load_finish) self.main_window = None self.is_login = False cookie_store = self.page().profile().cookieStore() print(cookie_store) self.cookiejar = QNetworkCookieJar() cookie_store.cookieAdded.connect(self.cookie_added) self.login_on_startup() def set_main_window(self, main_window): self.main_window = main_window def show(self): self.load(QUrl(longzhu_login_url)) super().show() def process_load_finish(self): if self.url().host() == 'www.longzhu.com' and self.url().path() == '/': print('after login') self.page().toHtml(self.login) def login(self, data): try: self.login_html = data user_menu = pq(data)('#topbar-user-menu') self.level = user_menu.find('i.user-lv').attr['class'].split( '-')[-1] self.uid = user_menu.find( 'a.report-rbi-click').attr['data-label'].split(':')[-1] self.username = user_menu.find('span.topbar-username').text() self.is_login = True print(self.level) print(self.uid) print(self.username) for cookie in self.cookiejar.cookiesForUrl( QUrl(longzhu_login_url)): print('name = {}, value = {}'.format( str(cookie.name(), encoding='ascii'), str(cookie.value(), encoding='ascii'))) self.main_window.login(self.username, self.level) self.load(QUrl('')) self.hide() self.save_cookie() except: pass def logout(self): self.level = '' self.uid = '' self.username = '' self.is_login = False self.cookiejar.setAllCookies([]) self.page().profile().cookieStore().deleteAllCookies() self.delete_cookie() def login_on_startup(self): if self.load_cookie(): self.load(QUrl('http://www.longzhu.com')) def cookie_added(self, cookie): if cookie.name() == b'p1u_id' or cookie.name() == b'PLULOGINSESSID': print('name = {}, domain = {}, value = {}, path = {}, date = {}'. format(cookie.name(), cookie.domain(), cookie.value(), cookie.path(), cookie.expirationDate().date())) self.cookiejar.setCookiesFromUrl([cookie], QUrl(longzhu_login_url)) def save_cookie(self): with open(cookie_file, 'wb') as f: for cookie in self.cookiejar.allCookies(): f.write(cookie.toRawForm() + b'\n') def delete_cookie(self): try: os.remove(cookie_file) except OSError: pass def load_cookie(self): cookies = [] if os.path.isfile(cookie_file): with open(cookie_file, 'rb') as f: for line in f: cookie = QNetworkCookie.parseCookies(line) self.cookiejar.setCookiesFromUrl(cookie, QUrl(longzhu_login_url)) self.page().profile().cookieStore().setCookie(cookie[0]) return True return False