@Valeks84

Сбой при рендеринге JS страницы с помощью PyQt5?

Привет!
Искал возможности для запуска JS из html и нашел замечательный вариант, намного проще всяких selenium и тд Используется библиотека PyQt5
Вот собственно код
import bs4 as bs
import sys
import urllib.request
from PyQt5.QtWebEngineWidgets import QWebEnginePage
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl

class Page(QWebEnginePage):
    def __init__(self, url):
        self.app = QApplication(sys.argv)
        QWebEnginePage.__init__(self)
        self.html = ''
        self.loadFinished.connect(self._on_load_finished)
        self.load(QUrl(url))
        self.app.exec_()

    def _on_load_finished(self):
        self.html = self.toHtml(self.Callable)
        print('Load finished')

    def Callable(self, html_str):
        self.html = html_str
        self.app.quit()


def main():
    page = Page('https://pythonprogramming.net/parsememcparseface/')
    soup = bs.BeautifulSoup(page.html, 'html.parser')
    js_test = soup.find('p', class_='jstest')
    print js_test.text

if __name__ == '__main__': main()


Все отлично работает, НО только при сосздании ПЕРВОГО объекта класса Client. При создании следующего объекта (ну нужно следующую страницу парсить), выходит ошибка Process finished with exit code 139 (interrupted by signal 11: SIGSEGV). Хотя программа завершается и дает результат, но все же эта ошибка и вскакивает окно, что программа crash.
MAC OS Sierra
  • Вопрос задан
  • 238 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Valeks84 Автор вопроса
Причина сбоя, вызов дважды создание вот этого объекта
self.app = QApplication(sys.argv)
Если его вынести за определение класса, то все работает. Но как теперь работать с классом, если он находится во внешней библиотеке (модуле)?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
28 нояб. 2024, в 13:31
30000 руб./за проект
28 нояб. 2024, в 13:22
1000 руб./за проект
28 нояб. 2024, в 13:00
70000 руб./за проект