2011-03-18 2 views
9

내부 프로세스 중 하나를 자동화하기 위해 (회사의 인트라넷에있는 매우 간단한 페이지를 긁어 내야 함수의 출력을 성공 여부로 반환해야합니다). http://blog.sitescraper.net/2010/06/scraping-javascript-webpages-in-python.html에서PyQt4로 자바 스크립트 기반 웹 페이지 긁기 - 인증이 필요한 페이지에 액세스하는 방법?

import sys 
from PyQt4.QtGui import * 
from PyQt4.QtCore import * 
from PyQt4.QtWebKit import * 

class Render(QWebPage): 
    def __init__(self, url): 
    self.app = QApplication(sys.argv) 
    QWebPage.__init__(self) 
    self.loadFinished.connect(self._loadFinished) 
    self.mainFrame().load(QUrl(url)) 
    self.app.exec_() 

    def _loadFinished(self, result): 
    self.frame = self.mainFrame() 
    self.app.quit() 

url = 'http://sitescraper.net' 
r = Render(url) 
html = r.frame.toHtml() 

과 거의 완벽 :

나는 다음과 같은 예를 발견했다. 페이지를 볼 때 인증을 제공 할 수 있어야합니다.

필자는 PyQt4에 대한 문서를 살펴 봤는데, 많은 것이 내 머리 위로 있다는 것을 인정할 것이다. 누구든지 도울 수 있다면, 고맙겠습니다.

편집 : 불행히도 gruszczy의 방법이 저에게 효과적이지 않았습니다. 나는 urllib2를 통해 비슷한 일을했을 때, 나는 다음과 같은 코드를 사용하고는했다 ...

username = 'user' 
password = 'pass' 

req = urllib2.Request(url) 
base64string = base64.encodestring('%s:%s' % (username, password))[:-1] 
authheader = "Basic %s" % base64string 
req.add_header("Authorization", authheader) 

handle = urllib2.urlopen(req) 

답변

7

나는 그것을 알아 냈다. 다른 사람을 도울 수있는 경우를 대비하여 다음과 같이 마무리되었습니다.

#!/usr/bin/python 
# -*- coding: latin-1 -*- 
import sys 
import base64 
from PyQt4.QtGui import * 
from PyQt4.QtCore import * 
from PyQt4.QtWebKit import * 
from PyQt4 import QtNetwork 

class Render(QWebPage): 
    def __init__(self, url): 
    self.app = QApplication(sys.argv) 

    username = 'username' 
    password = 'password' 

    base64string = base64.encodestring('%s:%s' % (username, password))[:-1] 
    authheader = "Basic %s" % base64string 

    headerKey = QByteArray("Authorization") 
    headerValue = QByteArray(authheader) 

    url = QUrl(url) 
    req = QtNetwork.QNetworkRequest() 
    req.setRawHeader(headerKey, headerValue) 
    req.setUrl(url) 

    QWebPage.__init__(self) 
    self.loadFinished.connect(self._loadFinished) 


    self.mainFrame().load(req) 
    self.app.exec_() 

    def _loadFinished(self, result): 
    self.frame = self.mainFrame() 
    self.app.quit() 

def main(): 
    url = 'http://www.google.com' 
    r = Render(url) 
    html = r.frame.toHtml() 
0

이 시도 :

url = QUrl(url) 
    url.setUserName(username) 
    url.setPassword(password) 
    self.mainFrame().load(url) 
+0

코멘트 영역의 코드 형식을 올바르게 지정하는 방법이 확실하지 않으므로 위 질문을 편집했습니다. – merph

+0

그렇다면 어떻게해야할지 모를까 봐 걱정됩니다. -/ – gruszczy

+0

어쨌든 멋지 네요. 너는 나를 올바른 길로 인도했다. – merph

관련 문제