コード例 #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 プロジェクト: jsoffer/eilat
    def set_cookies_from_url(self, cookies, url):
        """ Reimplementation from base class. Prevents cookies from being set
        if not from whitelisted domains.

        """
        (_, domain, suffix) = extract(url.host())
        site = domain + '.' + suffix

        if site not in self.allowed:
            if self.parent().show_detail:
                print("COOKIE FROM {} not set".format(url.toString()))  # COO01
            ret = []
        else:
            print("SET COOKIE FROM {}".format(url.toString()))
            ret = cookies

        return QNetworkCookieJar.setCookiesFromUrl(self, ret, url)
コード例 #3
0
    def set_cookies_from_url(self, cookies, url):
        """ Reimplementation from base class. Prevents cookies from being set
        if not from whitelisted domains.

        """
        (_, domain, suffix) = extract(url.host())
        site = domain + '.' + suffix

        if site not in self.allowed:
            if self.parent().show_detail:
                print("COOKIE FROM {} not set".format(url.toString()))  # COO01
            ret = []
        else:
            print("SET COOKIE FROM {}".format(url.toString()))
            ret = cookies

        return QNetworkCookieJar.setCookiesFromUrl(self, ret, 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
コード例 #5
0
ファイル: CookieJar.py プロジェクト: testmana2/test
 def setCookiesFromUrl(self, cookieList, url):
     """
     Public method to set cookies for a URL.
     
     @param cookieList list of cookies to set (list of QNetworkCookie)
     @param url url to set cookies for (QUrl)
     @return flag indicating cookies were set (boolean)
     """
     if not self.__loaded:
         self.load()
     
     globalSettings = QWebSettings.globalSettings()
     if globalSettings.testAttribute(QWebSettings.PrivateBrowsingEnabled):
         return False
     
     host = url.host()
     eBlock = self.__isOnDomainList(self.__exceptionsBlock, host)
     eAllow = not eBlock and \
         self.__isOnDomainList(self.__exceptionsAllow, host)
     eAllowSession = not eBlock and \
         not eAllow and \
         self.__isOnDomainList(
             self.__exceptionsAllowForSession, host)
     
     addedCookies = False
     acceptInitially = self.__acceptCookies != self.AcceptNever
     if (acceptInitially and not eBlock) or \
        (not acceptInitially and (eAllow or eAllowSession)):
         # url domain == cookie domain
         soon = QDateTime.currentDateTime()
         soon = soon.addDays(90)
         for cookie in cookieList:
             lst = []
             if not (self.__filterTrackingCookies and
                     cookie.name().startsWith(b"__utm")):
                 if eAllowSession:
                     cookie.setExpirationDate(QDateTime())
                 if self.__keepCookies == self.KeepUntilTimeLimit and \
                    not cookie.isSessionCookie and \
                    cookie.expirationDate() > soon:
                     cookie.setExpirationDate(soon)
                 lst.append(cookie)
                 if QNetworkCookieJar.setCookiesFromUrl(self, lst, url):
                     addedCookies = True
                 elif self.__acceptCookies == self.AcceptAlways:
                     # force it in if wanted
                     cookies = self.allCookies()
                     for ocookie in cookies[:]:
                         # does the cookie exist already?
                         if cookie.name() == ocookie.name() and \
                            cookie.domain() == ocookie.domain() and \
                            cookie.path() == ocookie.path():
                             # found a match
                             cookies.remove(ocookie)
                     
                     cookies.append(cookie)
                     self.setAllCookies(cookies)
                     addedCookies = True
     
     if addedCookies:
         self.__saveTimer.changeOccurred()
         self.cookiesChanged.emit()
     
     return addedCookies
コード例 #6
0
    def setCookiesFromUrl(self, cookieList, url):
        """
        Public method to set cookies for a URL.
        
        @param cookieList list of cookies to set (list of QNetworkCookie)
        @param url url to set cookies for (QUrl)
        @return flag indicating cookies were set (boolean)
        """
        if not self.__loaded:
            self.load()

        globalSettings = QWebSettings.globalSettings()
        if globalSettings.testAttribute(QWebSettings.PrivateBrowsingEnabled):
            return False

        host = url.host()
        eBlock = self.__isOnDomainList(self.__exceptionsBlock, host)
        eAllow = not eBlock and \
            self.__isOnDomainList(self.__exceptionsAllow, host)
        eAllowSession = not eBlock and \
            not eAllow and \
            self.__isOnDomainList(
                self.__exceptionsAllowForSession, host)

        addedCookies = False
        acceptInitially = self.__acceptCookies != self.AcceptNever
        if (acceptInitially and not eBlock) or \
           (not acceptInitially and (eAllow or eAllowSession)):
            # url domain == cookie domain
            soon = QDateTime.currentDateTime()
            soon = soon.addDays(90)
            for cookie in cookieList:
                lst = []
                if not (self.__filterTrackingCookies
                        and cookie.name().startsWith(b"__utm")):
                    if eAllowSession:
                        cookie.setExpirationDate(QDateTime())
                    if self.__keepCookies == self.KeepUntilTimeLimit and \
                       not cookie.isSessionCookie and \
                       cookie.expirationDate() > soon:
                        cookie.setExpirationDate(soon)
                    lst.append(cookie)
                    if QNetworkCookieJar.setCookiesFromUrl(self, lst, url):
                        addedCookies = True
                    elif self.__acceptCookies == self.AcceptAlways:
                        # force it in if wanted
                        cookies = self.allCookies()
                        for ocookie in cookies[:]:
                            # does the cookie exist already?
                            if cookie.name() == ocookie.name() and \
                               cookie.domain() == ocookie.domain() and \
                               cookie.path() == ocookie.path():
                                # found a match
                                cookies.remove(ocookie)

                        cookies.append(cookie)
                        self.setAllCookies(cookies)
                        addedCookies = True

        if addedCookies:
            self.__saveTimer.changeOccurred()
            self.cookiesChanged.emit()

        return addedCookies
コード例 #7
0
 def __init__(self, cookies, qt_url, parent=None):
     QNetworkCookieJar.__init__(self, parent)
     for cookie in cookies:
         QNetworkCookieJar.setCookiesFromUrl(
             self,
             QNetworkCookie().parseCookies(QByteArray(cookie)), qt_url)