Одно и то же приложение показывает разный результат?
Один и тот же код показывает разные результаты на разных ПК. Может кто сталкивался с такой проблемой?
Ошибок не выводит, но и не выводит данные.
Может ли быть проблема в Windows (на одном 10, а на другом 11)
или в браузерах (Яндекс\Google)?
Иногда пишет, что браузер устарел.
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl
from PyQt5.QtWebEngineWidgets import QWebEnginePage
import time
import re
regex = r"price_85d2b9c\s+\w+\D+(?P<price>\d+\s+\d+)"
class Client(QWebEnginePage):
def __init__(self,url):
global app
self.app = QApplication([])
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)
#self.loadFinished(bool)
#print("Load Finished")
def Callable(self,data):
self.html = data
self.app.quit()
start = time.perf_counter()
url = "https://www.aviasales.ru/search/PEE0712MOW23121?request_source=search_form&expected_price_currency=rub&expected_price_source=calendar"
client_response = Client(url)
#print(client_response.html)
test_str = client_response.html
prices = []
matches = re.finditer(regex, test_str, re.MULTILINE)
for matchNum, match in enumerate(matches, start=1):
print("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
for groupNum in range(0, len(match.groups())):
groupNum = groupNum + 1
print("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
prices.append("{group}".format(group = match.group(groupNum)))
#print(prices)
end = time.perf_counter()
print(f"Time taken: {end - start:.2f} seconds")```
Ответы (2 шт):
Ну во-первых странно, что этот код хоть где - то запускается, так как внутри класса в ините на 11 строке вы используете "QApplication", который не импортировали. Т.е. после добавления следующего импорта в начале программы у меня всё запустилось:
from PyQt5.QtWidgets import QApplication
Если это не поможет, то посмотрите, что лежит в переменной test_str, вдруг туда почему - то не записывается html код страницы и соответственно дальше ничего не работает. Так же убедитесь, что версия библиотеки на обоих компьютерах совпадает(это удобно сделать через pip show <название либы>).
Сайт, с которым вы работаете, очень тяжелый. Попробуйте понаблюдать как он грузится.
Обратите внимание, я добавил кнопку, которую кликните после полной загрузки и отображения страницы. Результат работы смотрите и в textBrowser-е
import sys
import time
import re
from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets
regex = r"price_85d2b9c\s+\w+\D+(?P<price>\d+\s+\d+)"
class Widget(QtWidgets.QWidget):
def __init__(self):
super(Widget, self).__init__()
self.html = ''
self.pushButton = QtWidgets.QPushButton("Click me - после полной загрузки страницы")
self.pushButton.clicked.connect(self.button_clicked)
self.textBrowser = QtWidgets.QTextBrowser(self)
lay = QtWidgets.QVBoxLayout(self)
self.browser = QtWebEngineWidgets.QWebEngineView()
lay.addWidget(self.pushButton)
lay.addWidget(self.browser)
lay.addWidget(self.textBrowser)
self.browser.setUrl(QtCore.QUrl(
"https://www.aviasales.ru/search/PEE0712MOW23121?request_source=search_form&expected_price_currency=rub&expected_price_source=calendar"))
self.browser.loadStarted.connect(self.loadStartedHandler)
self.browser.loadProgress.connect(self.loadProgressHandler)
self.browser.loadFinished.connect(self.loadFinishedHandler)
def button_clicked(self):
self.page = self.browser.page()
self.html = self.page.toHtml(self.Callable)
def Callable(self, data):
self.html = data
# print(f'self.html -- {self.html} \n def Callable(self, data):') #
self.finditer_regex()
def finditer_regex(self):
test_str = self.html
prices = []
matches = re.finditer(regex, test_str, re.MULTILINE)
for matchNum, match in enumerate(matches, start=1):
_match = "Match {matchNum} was found at {start}-{end}: {match}".\
format(matchNum = matchNum, start = match.start(), end = match.end(),
match = match.group())
print(_match)
self.textBrowser.append(_match)
for groupNum in range(0, len(match.groups())):
groupNum = groupNum + 1
_group = "\tGroup {groupNum} found at {start}-{end}: {group}".\
format(groupNum = groupNum, start = match.start(groupNum),
end = match.end(groupNum), group = match.group(groupNum))
print(_group)
self.textBrowser.append(_group)
prices.append("{group}".format(group = match.group(groupNum)))
print('\n')
print(*prices, sep='\n')
self.textBrowser.append(str(prices))
@QtCore.pyqtSlot()
def loadStartedHandler(self):
print(time.time(), ": load started\n")
@QtCore.pyqtSlot(int)
def loadProgressHandler(self, prog):
print(time.time(), ":load progress", prog, '\n')
@QtCore.pyqtSlot()
def loadFinishedHandler(self):
print(time.time(), ": load finished\n")
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
view = Widget()
view.show()
sys.exit(app.exec_())

