示例#1
0
def convert(args):
    profile = QWebEngineProfile()
    page = HeadlessPage(profile)

    settings = page.settings()
    settings.setAttribute(settings.JavascriptCanOpenWindows, False)
    settings.setAttribute(settings.WebGLEnabled, False)
    settings.setAttribute(settings.AutoLoadIconsForPage, False)
    settings.setAttribute(settings.ShowScrollBars, False)

    qurl = QUrl(args['url'])
    req = QWebEngineHttpRequest(qurl)

    for name, value in args.get('headers', ()):
        req.setHeader(name.encode('utf-8'), value.encode('utf-8'))

    store = page.profile().cookieStore()
    for name, value in args.get('cookies', ()):
        cookie = QNetworkCookie(name.encode('utf-8'), value.encode('utf-8'))
        cookie.setDomain(qurl.host())
        store.setCookie(cookie)

    with prepare_loop(page.loadFinished):
        page.load(req)

    for js in args.get('run_script', ()):
        with prepare_loop() as loop:
            page.runJavaScript(js, lambda _: loop.quit())

    if args['dest'] != '-':
        with prepare_loop(page.pdfPrintingFinished):
            page.printToPdf(os.path.abspath(args['dest']))
    else:
        sys.stdout.buffer.write(page.printToPdfAndReturn())
示例#2
0
 def get_qnetwork_cookie(self):
     cookie = QNetworkCookie()
     cookie.setExpirationDate(self.expiration_date)
     cookie.setHttpOnly(self.http_only)
     cookie.setValue(self.value)
     cookie.setSecure(self.secure)
     cookie.setPath(self.path)
     cookie.setDomain(self.domain)
     cookie.setName(self.name)
     return cookie
示例#3
0
 def _make_qt_cookie(cookie):
     """Build a QNetworkCookie object from a cookielib.Cookie object."""
     qt_cookie = QNetworkCookie(cookie.name.encode(), cookie.value.encode())
     qt_cookie.setDomain(cookie.domain)
     if cookie.expires is not None:
         qt_cookie.setExpirationDate(QDateTime.fromTime_t(cookie.expires))
     qt_cookie.setHttpOnly(bool(cookie.get_nonstandard_attr("HttpOnly")))
     qt_cookie.setPath(cookie.path)
     qt_cookie.setSecure(cookie.secure)
     return qt_cookie
示例#4
0
 def cookie(self):
     cookie = QNetworkCookie()
     cookie.setDomain(self.m_domainLineEdit.text())
     cookie.setName(self.m_nameLineEdit.text().encode())
     cookie.setValue(self.m_valueLineEdit.text().encode())
     cookie.setExpirationDate(QDateTime(self.m_dateEdit.date()))
     cookie.setPath(self.m_pathLineEdit.text())
     cookie.setSecure(
         self.m_isSecureComboBox.currentText() == self.tr("yes"))
     cookie.setHttpOnly(
         self.m_isHttpOnlyComboBox.currentText() == self.tr("yes"))
     return cookie
示例#5
0
 def initCookies(self):
     for cookie in cookies:
         qcookie = QNetworkCookie()
         qcookie.setName(cookie.get('name', '').encode())
         qcookie.setValue(cookie.get('value', '').encode())
         qcookie.setDomain(cookie.get('domain', ''))
         qcookie.setPath(cookie.get('path', ''))
         qcookie.setExpirationDate(
             QDateTime.fromString(str(cookie.get('expirationDate', 0)),
                                  Qt.ISODate))
         qcookie.setHttpOnly(cookie.get('httpOnly', False))
         qcookie.setSecure(cookie.get('secure', False))
         # 注意可以设置具体的url
         self.cookieStore.setCookie(qcookie, QUrl())
示例#6
0
 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)))
示例#7
0
    def har_cookie2qt(cls, cookie):
        qcookie = QNetworkCookie()
        qcookie.setName(to_bytes(cookie["name"]))
        qcookie.setValue(to_bytes(cookie["value"]))

        if 'domain' in cookie:
            qcookie.setDomain(cookie["domain"])

        if 'httpOnly' in cookie:
            qcookie.setHttpOnly(cookie["httpOnly"])

        if 'secure' in cookie:
            qcookie.setSecure(cookie["secure"])

        if 'path' in cookie:
            qcookie.setPath(cookie["path"])

        if cookie.get('expires'):
            expires = QDateTime.fromString(cookie["expires"], Qt.ISODate)
            qcookie.setExpirationDate(expires)

        return qcookie
示例#8
0
    def har_cookie2qt(cls, cookie):
        qcookie = QNetworkCookie()
        qcookie.setName(to_bytes(cookie["name"]))
        qcookie.setValue(to_bytes(cookie["value"]))

        if 'domain' in cookie:
            qcookie.setDomain(cookie["domain"])

        if 'httpOnly' in cookie:
            qcookie.setHttpOnly(cookie["httpOnly"])

        if 'secure' in cookie:
            qcookie.setSecure(cookie["secure"])

        if 'path' in cookie:
            qcookie.setPath(cookie["path"])

        if cookie.get('expires'):
            expires = QDateTime.fromString(cookie["expires"], Qt.ISODate)
            qcookie.setExpirationDate(expires)

        return qcookie
示例#9
0
    def __init__(self):
        super().__init__()
        self.setWindowTitle('My Browser')
        self.resize(800, 600)
        url = 'https://www.baidu.com'
        req_cookies = {
            'BD_UPN': '',
            'PSTM': '',
            'BIDUPSID': '',
            'BAIDUID': '',
            'BDORZ': '',
            'delPer': '',
            'BD_CK_SAM': '',
            'PSINO': '',
            'BDRCVFR[feWj1Vr5u3D]': '',
            'ZD_ENTRY': '',
            'H_PS_645EC': '',
            'BDUSS': '',
            'BD_HOME': '',
            'H_PS_PSSID': ''
        }

        self.webview = QWebEngineView()
        cookiestore = self.webview.page().profile().cookieStore()
        cookie = QNetworkCookie()
        for key, value in req_cookies.items():
            # 设置cookie的键
            cookie.setName(key.encode())
            # 设置cookie的值
            cookie.setValue(value.encode())
            # 设置cookie的域
            cookie.setDomain('.baidu.com')
            cookiestore.setCookie(cookie)

        self.webview.load(QUrl(url))
        self.setCentralWidget(self.webview)