Очистка веб-страниц, управляемых Javascript, с помощью PyQt4 - как получить доступ к страницам, требующим аутентификации? - PullRequest
9 голосов
/ 18 марта 2011

Мне нужно почистить очень, очень простую страницу в интрасети нашей компании, чтобы автоматизировать один из наших внутренних процессов (возвращая вывод функции как успешный или нет).

Я нашел следующий пример:

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()

От http://blog.sitescraper.net/2010/06/scraping-javascript-webpages-in-python.html и это почти идеально.Мне просто нужно иметь возможность предоставить аутентификацию для просмотра страницы.

Я просматривал документацию по PyQt4, и я признаю, что многое из этого у меня над головой.Если бы кто-то мог помочь, я был бы признателен.

Редактировать: К сожалению, метод Грущчи не сработал для меня.Когда я сделал что-то подобное через 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)

Ответы [ 2 ]

7 голосов
/ 18 марта 2011

Я понял это.Вот чем я закончил на случай, если это поможет кому-то еще.

#!/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 голосов
/ 18 марта 2011

Попробуйте это:

  url = QUrl(url)
  url.setUserName(username)
  url.setPassword(password)
  self.mainFrame().load(url)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...