Подтвердить что ты не робот

Сброс Python на веб-страницах javascript не удался только для страниц https

Я использую PyQt5 для очистки веб-страниц, что отлично подходит для URL http://, но не для URL-адресов https://.

Соответствующая часть моего script приведена ниже:

class WebPage(QWebPage):
    def __init__(self):
        super(WebPage, self).__init__()

        self.timerScreen = QTimer()
        self.timerScreen.setInterval(2000)
        self.timerScreen.setSingleShot(True)
        self.timerScreen.timeout.connect(self.handleLoadFinished)

        self.loadFinished.connect(self.timerScreen.start)


    def start(self, urls):
        self._urls = iter(urls)
        self.fetchNext()

    def fetchNext(self):
        try:
            url = next(self._urls)
        except StopIteration:
            return False
        else:
            self.mainFrame().load(QUrl(url))
        return True

    def processCurrentPage(self):
        url = self.mainFrame().url().toString()
        html = self.mainFrame().toHtml()

        #Do stuff with html
        print('loaded: [%d bytes] %s' % (self.bytesReceived(), url))

    def handleLoadFinished(self):
        self.processCurrentPage()
        if not self.fetchNext():
            qApp.quit()

Для защищенных страниц script возвращает пустую страницу. Единственный возвращаемый html - <html><head></head><body></body></html>.

Я немного потерял. Есть ли параметр, который мне не хватает для обработки безопасных URL-адресов?

4b9b3361

Ответ 2

протестирован с PyQt4 и нормально открытыми страницами с HTTPS

import sys
from PyQt4.QtGui import QApplication
from PyQt4.QtCore import QUrl
from PyQt4.QtWebKit import QWebView

class Browser(QWebView):
    def __init__(self):
        QWebView.__init__(self)
        self.loadFinished.connect(self._result_available)

    def _result_available(self, ok):
        frame = self.page().mainFrame()
        print(frame.toHtml())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    view = Browser()
    view.load(QUrl('https://www.google.com'))
    app.exec_()

Ответ 3

Как ваш код отлично работает с HTTP-страницей, но не работает с HTTPS, по-моему, это может быть связано с проблемой SSL.

Итак, пожалуйста, дважды проверьте, поддерживает ли ваша версия PyQt5 поддержку SSL... (Вы можете найти более подробную информацию относительно загрузки, установки и настройки openssl здесь)

Все, что вам нужно сделать после загрузки библиотек SSL, - это обеспечить что Qt может найти, где находятся библиотеки openSSL

Какую ОС вы используете? PyQt5 был построен с поддержкой SSL? Установлен Openssl?