예제 #1
0
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))
예제 #2
0
파일: CookieJar.py 프로젝트: testmana2/test
 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)
예제 #3
0
    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)
예제 #4
0
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