Esempio n. 1
0
def loadPage(url):
    page = QWebEnginePage()
    loop = QEventLoop()  # Create event loop
    page.loadFinished.connect(loop.quit)  # Connect loadFinished to loop quit
    page.load(QUrl(url))
    loop.exec_()  # Run event loop, it will end on loadFinished
    return page.toHtml(get_html)
Esempio n. 2
0
async def load_p_url_then_run_js_co(page: QtWebEngineWidgets.QWebEnginePage,
                                    u: Qt.QUrl, js: str, wcobjects: dict):
    fut = asyncio.get_event_loop().create_future()

    def register_channel_objects():
        wc = QWebChannel(page)
        wc.registerObjects(wcobjects)
        page.setWebChannel(wc)

    def ready(ok: bool):
        su = page.url()
        if su == u:
            page.loadFinished.disconnect()

            def jsready():
                asyncio.get_event_loop().call_soon_threadsafe(
                    fut.set_result, ok)

            try:
                page.runJavaScript(js, jsready)
            except Exception as je:
                print(repr(je), file=sys.stderr)
                traceback.print_stack()
        # else we have about:blank or something like it, let it run more times

    page.loadFinished.connect(ready)
    register_channel_objects()
    page.load(u)
    return await fut
Esempio n. 3
0
class Html2PdfConverter(QObject):
    def __init__(self, inputPath: str, outputPath: str) -> None:
        super().__init__()
        self.m_inputPath = inputPath
        self.m_outputPath = outputPath
        self.m_page = QWebEnginePage()

        self.m_page.loadFinished.connect(self.loadFinished)
        self.m_page.pdfPrintingFinished.connect(self.pdfPrintingFinished)

    def run(self) -> bool:
        self.m_page.load(QUrl.fromUserInput(self.m_inputPath))
        return QApplication.exec_()

    @pyqtSlot(bool)
    def loadFinished(self, ok: bool):
        if not ok:
            sys.stderr.write("failed to load URL '%s'" % (self.m_inputPath,))
            QCoreApplication.exit(1)
            return
        self.m_page.printToPdf(self.m_outputPath)

    @pyqtSlot(str, bool)
    def pdfPrintingFinished(self, filePath: str, success: bool):
        if not success:
            sys.stderr.write("failed to print to output file '%s'" % (filePath,))
            QCoreApplication.exit(1)
        else:
            QCoreApplication.quit()
Esempio n. 4
0
class MapWidget(QWebEngineView):
    """
    The MapWidget class is a QWebEngineView that houses the leaflet map.
    Since it is a QWidget, it can be added to any QLayout.
    """
    @property
    def page(self):
        return self._page

    @property
    def channel(self):
        return self._channel

    def __init__(self):
        super().__init__()
        self._page = QWebEnginePage()
        self.setPage(self._page)
        self._channel = QWebChannel()
        self._page.setWebChannel(self._channel)
        self._loadPage()

    def _loadPage(self):
        html_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),
                                 'web', 'map.html')
        # QEventLoop is used to make the page loading behave syncronously
        init_loop = QEventLoop()
        self._page.loadFinished.connect(init_loop.quit)
        self._page.load(QUrl().fromLocalFile(html_path))
        init_loop.exec()
Esempio n. 5
0
    class ExtractorHtml:
        def __init__(self, url):
            self.html = None

            _app = QApplication([])
            self._page = QWebEnginePage()
            self._page.load(QUrl(url))
            self._page.loadFinished.connect(self._load_finished_handler)

            # Ожидание загрузки страницы и получения его содержимого
            # Этот цикл асинхронный код делает синхронным
            while self.html is None:
                _app.processEvents()

            _app.quit()

            self._page = None

        def _callable(self, data):
            if check_content_func:
                if check_content_func(data):
                    self.html = data

            else:
                self.html = data

        def _load_finished_handler(self):
            self._page.toHtml(self._callable)
Esempio n. 6
0
    class ExtractorHtml:
        def __init__(self, url):
            _app = QApplication([])
            self._page = QWebEnginePage()
            self._page.loadFinished.connect(self._load_finished_handler)

            self.html = None

            # Небольшой костыль для получения содержимого страницы сайта http://gama-gama.ru
            # Загрузка страницы проходит 2 раза: сначада кусок хитрого javascript кода, потом страница
            # сайта с содержимым
            self._counter_finished = 0

            self._page.load(QUrl(url))

            # Ожидание загрузки страницы и получения его содержимого
            # Этот цикл асинхронный код делает синхронным
            while self.html is None:
                _app.processEvents()

            _app.quit()

            # Чтобы избежать падений скрипта
            self._page = None

        def _callable(self, data):
            self.html = data

        def _load_finished_handler(self, _):
            self._counter_finished += 1

            if self._counter_finished == 2:
                self._page.toHtml(self._callable)
Esempio n. 7
0
class MainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.setWindowTitle("pyatter")
        self.show()
        self.browser = self.init_browser()
        self.profile = self.init_profile(self.browser)
        self.webpage = QWebEnginePage(self.profile, self.browser)
        self.browser.setPage(self.webpage)
        self.setCentralWidget(self.browser)
        self.init_navbar()

        url = "https://www.google.com"
        self.webpage.load(QUrl(url))

    def init_browser(self):
        browser = QWebEngineView()
        browser.settings().setAttribute(QWebEngineSettings.AllowRunningInsecureContent, True)
        browser.settings().setAttribute(QWebEngineSettings.AllowWindowActivationFromJavaScript, True)
        return browser

    def init_profile(self, browser):
        profile = QWebEngineProfile(browser)
        profile.setHttpUserAgent('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36')
        return profile

    def init_navbar(self):
        navigation_bar = QToolBar('Navigation')
        self.addToolBar(navigation_bar)

        wa_button = QAction('whatsapp', self)
        wa_url = 'https://web.whatsapp.com'
        wa_button.triggered.connect(lambda: self.open_service(wa_url))
        navigation_bar.addAction(wa_button)

        slack_button = QAction('slack', self)
        sl_url = 'https://www.slack.com'
        slack_button.triggered.connect(lambda: self.open_service(sl_url))
        navigation_bar.addAction(slack_button)

        skype_button = QAction('skype', self)
        sk_url = 'https://www.skype.com'
        skype_button.triggered.connect(lambda: self.open_service(sk_url))
        navigation_bar.addAction(skype_button)

        quit_button = QAction('quit', self)
        quit_button.triggered.connect(self.close_app)
        navigation_bar.addAction(quit_button)

    def open_service(self, surl):
        self.webpage.load(QUrl(surl))

    def close_app(self):
        sys.exit()
Esempio n. 8
0
async def load_p_url_co(page: QtWebEngineWidgets.QWebEnginePage, u: Qt.QUrl):
    fut = asyncio.get_event_loop().create_future()

    def ready(ok: bool):
        su = page.url()
        if su == u:
            page.loadFinished.disconnect()
            asyncio.get_event_loop().call_soon_threadsafe(fut.set_result, ok)
        # else we have about:blank or something like it, let it run more times

    page.loadFinished.connect(ready)
    page.load(u)
    return await fut
Esempio n. 9
0
class MapWidget(QWebEngineView):
    """
    The MapWidget class is a QWebEngineView that houses the leaflet map.
    Since it is a QWidget, it can be added to any QLayout.
    """

    @property
    def page(self):
        return self._page

    @property
    def channel(self):
        return self._channel

    def __init__(self, use_file_absolute_path: bool = True, alternative_base_path: str=""):
        super().__init__()
        if use_file_absolute_path or len(alternative_base_path) == 0:
            self.base_path = os.path.dirname(os.path.abspath(__file__))
        else:
            self.base_path = alternative_base_path
        self._page = QWebEnginePage()
        self.setPage(self._page)
        self._channel = QWebChannel()
        self._page.setWebChannel(self._channel)
        self._loadPage()
        self.setContextMenuPolicy(Qt.NoContextMenu)

    def _get_page_path(self):
        return os.path.join(self.base_path, 'web', 'map.html')

    def _loadPage(self):
        html_path = self._get_page_path()
        # QEventLoop is used to make the page loading behave syncronously
        init_loop = QEventLoop()
        self._page.loadFinished.connect(init_loop.quit)
        self._page.load(QUrl().fromLocalFile(html_path))
        init_loop.exec()
Esempio n. 10
0
    class ExtractorHtml:
        def __init__(self, url):
            _app = QApplication([])
            self._page = QWebEnginePage()

            self.html = None

            # Небольшой костыль для получения содержимого страницы сайта
            # https://www.origin.com/rus/ru-ru/search?searchString=
            # Загрузка страницы проходит постепенно -- данные не сразу появляются, поэтому нужно
            # подождать пока они закончатся загружаться. Для этого заводится таймер, который дает по 5 секунд
            # после каждой закончившееся загрузки чтобы после вытащить данные из страницы
            timer = QTimer()
            timer.setSingleShot(True)
            timer.setInterval(5000)
            timer.timeout.connect(self._load_finished_handler)

            self._page.loadProgress.connect(
                lambda x: x == 100 and timer.start())

            self._page.load(QUrl(url))

            # Ожидание загрузки страницы и получения его содержимого
            # Этот цикл асинхронный код делает синхронным
            while self.html is None:
                _app.processEvents()

            _app.quit()

            self._page = None

        def _callable(self, data):
            self.html = data

        def _load_finished_handler(self):
            self._page.toHtml(self._callable)
Esempio n. 11
0
class Umbrella(QMainWindow, Ui_MainWindow) :
    #생성자
    def __init__(self) :
        super().__init__()
        self.init_my_location()
        self.setupUi(self)  # 초기화
        self.url = "http://localhost:8080/umbrella"
        # self.url = "http://localhost:8000/umbrella2.html"
        self.webEngineView.load(QUrl(self.url))
        self.page = QWebEnginePage()
        self.page.setUrl(QUrl(self.url))
        self.page.setView(self.webEngineView)
        self.appLoaded = False
        chrome_option = Options()
        chrome_option.add_argument("--headless")
        chrome_option.add_argument("--mute-audio")
        self.browser = webdriver.Chrome(chrome_options=chrome_option, executable_path="resources/chromedriver.exe")
        self.browser.get(self.url)

        self.runner = Runner(self)
        self.dc = DataCollector()
        # self.comboBox.addItem("키워드")
        # self.comboBox.addItem("주소")
        self.itemList = []
        self.rowList = []
        # self.page.featurePermissionRequested.connect(self.setPagePermission)

        #page 변환
        self.pushButton_3.clicked.connect(self.translate_ui)
        self.pushButton.clicked.connect(self.runner.map_removeMarkers)
        # self.pushButton.clicked.connect(self.map_removeMarkers)
        # self.pushButton.clicked.connect(self.runner.map_getLevel)
        # self.pushButton.clicked.connect(lambda: self.runner.map_setLevel(random.randrange(7)))
        # self.pushButton.clicked.connect(lambda: self.runner.coord_to_address(self.my_location_lat,self.my_location_lng, random.randrange(0,5)))
        # self.pushButton.clicked.connect(lambda: self.getDistance([33.450500,126.569968],[[33.450500,126.569968],[35.404195,126.886323],[39.668777,126.065913]]))
        # self.pushButton.clicked.connect(self.test_a)
        # self.pushButton.clicked.connect(self.search)
        self.lineEdit.returnPressed.connect(lambda: self.runner.search(self.lineEdit.text().strip()))
        self.pushButton.clicked.connect(lambda: self.runner.search(self.lineEdit.text().strip()))
        self.page.loadFinished.connect(lambda: self.runner.setMap(self.my_location_lat, self.my_location_lng))
        # self.setMap(self.my_location_lat, self.my_location_lng)

        self.pushButton2.clicked.connect(self.mark_around)
        self.pushButton3.clicked.connect(lambda: self.runner.setMap(self.my_location_lat,self.my_location_lng))
        self.page.urlChanged.connect(self.setButton)


        self.listWidget.itemActivated.connect(self.activateRow)
        # self.lineEdit.setText(self.runner.coord_to_address(self.my_location_lat,self.my_location_lng, 0))
        self.lineEdit.setText(self.runner.coord_to_address(self.my_location_lat,self.my_location_lng, 0))
    def translate_ui(self) :

        print('aaaaaaaa')
        self.stackedWidget.setCurrentIndex(1)


    def mark_around(self) :
        self.remove_list()
        if not self.page.url().toString().strip().startswith("http://localhost:8080/umbrella") :
            self.page.load(QUrl(self.url))
            return
        self.runner.map_removeMarkers()
        lat, lng = self.runner.map_getCenter()
        data = self.dc.get_data_by_latlng(lat, lng, 1000)
        self.runner.marking(data)
        self.show_list(data)
        self.lineEdit.setText(self.runner.coord_to_address(lat, lng, 0))



    def init_my_location(self) :
        url = 'https://www.googleapis.com/geolocation/v1/geolocate?key=AIzaSyDQKxbTt0MrFNH85kTJXzickMD5s88UVaI'
        data = {
            'considerIp': True,
        }

        result = requests.post(url, data)

        my_location = json.loads(result.text)
        # print(my_location)
        # print("lat : ",my_location.get('location').get('lat'))
        # print("lon : ",my_location.get('location').get('lng'))
        self.my_location_lat = str(my_location.get('location').get('lat'))
        self.my_location_lng = str(my_location.get('location').get('lng'))


    def setButton(self) :
        if self.page.url().toString().strip().startswith("http://localhost:8080/umbrella") :
            self.pushButton2.setText("판매처 탐색")
        else :
            self.pushButton2.setText("지도 새로고침")

    def show_list(self, data) :
        for i in range(len(data)) :
            item = QListWidgetItem(self.listWidget)
            row = Item(data[i])
            item.setWhatsThis(str(i))
            item.setSizeHint(row.sizeHint())
            self.listWidget.setItemWidget(item, row)
            self.listWidget.addItem(item)
            self.itemList.append(item)
            self.rowList.append(row)
    def remove_list(self) :
        for i in range(len(self.itemList)) :
            self.itemList[i].setHidden(True)
        self.itemList = []
        self.rowList = []

    def activateRow(self, row) :
        self.runner.setMap(self.rowList[int(row.whatsThis())].lat,self.rowList[int(row.whatsThis())].lng)
        self.runner.info_open(self.rowList[int(row.whatsThis())].code)
        # self.runner.map_setLevel(2)
        pass
Esempio n. 12
0
    @pyqtSlot(str)
    def callme(self, arg: str):
        # b = a.toObject()
        print(arg)


js_call = jscall()

channel = QWebChannel(Page)
channel.registerObject("webobj", js_call)
Page.setWebChannel(channel)
def _status(status):
    print('load status: ', status)
    # Page.runJavaScript('window.d487 = document.getElementsByTagName("img")', _js)
    # Page.runJavaScript('d487[1].src',_js)
    # Page.runJavaScript('Qt.ev("document.getElementsByTagName(\'a\')")[1].click()', _js)
    Page.runJavaScript('Qt.register()', _js)


def _js(result):
    print('js result: ', result)


Page.loadFinished.connect(_status)

Page.load(QUrl.fromLocalFile(QDir.currentPath()+'/index.html'))
view.show()

app.exec()
Esempio n. 13
0
class RequestWidget(QWidget):

    def __init__(self, parent, keyList, request=None):
        super().__init__(parent)

        self.keyList = keyList

        # INITIALIZE POLYGON MANAGEMENT

        self.polygonSettings = []
        self.polygonActivated = False
        self.html = ""
        self.webChannel = QWebChannel()
        self.webChannel.registerObject('request', self)
        self.polygonPage = QWebEnginePage()
        self.polygonPage.setWebChannel(self.webChannel)

        # INITIALIZE UI

        self.layout = self.__generateLayout__()
        self.setLayout(self.layout)

        elementsTypeGB, self.nodesCB, self.waysCB, self.relCB, self.areasCB = self.__generateTypeWidget__()
        self.layout.addRow("ELEMENTS TYPE", elementsTypeGB)
        self.layout.addRow(HorizontalLine(self))

        self.locationNameWidget = self.__generateLocationWidget__()
        self.layout.addRow("LOCATION", self.locationNameWidget)
        self.layout.addRow(HorizontalLine(self))

        filtersButtons, self.filtersWidget, self.filtersLayout = self.__generateFiltersWidget__()
        self.layout.addRow("FILTERS", filtersButtons)
        self.layout.addRow(self.filtersWidget)
        self.layout.addRow(HorizontalLine(self))

        polygonButtons = self.__generatePolygonWidget__()
        self.layout.addRow("POLYGON", polygonButtons)
        self.layout.addRow(HorizontalLine(self))

        self.surroundGB, self.aroundRadiusEdit = self.__generateSurroundingWidget__()
        self.layout.addRow("SURROUNDINGS", self.surroundGB)
        self.layout.addRow(HorizontalLine(self))

        self.idsWidget = self.__generateIdsWidget__()
        self.layout.addRow("IDS", self.idsWidget)

        # SETTING DATA

        if request is None:
            self.requestName = SetNameManagement.getUniqueSetName()
        else:
            self.__setRequest__(request)

    # UI COMPONENTS

    def __generateLayout__(self):
        layout = QFormLayout()
        layout.setContentsMargins(10, 10, 10, 10)

        layout.setFieldGrowthPolicy(QFormLayout.ExpandingFieldsGrow)
        layout.setLabelAlignment(Qt.AlignLeft)
        layout.setFormAlignment(Qt.AlignLeft | Qt.AlignTop)

        return layout

    def __generateLocationWidget__(self):
        locationNameWidget = QLineEdit()
        locationNameWidget.setPlaceholderText("Areas: 'New York', 'Italy'...")
        locationNameWidget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
        return locationNameWidget

    def __generatePolygonWidget__(self):
        return WidgetFactory.buildIconButtonGroup([
            {"image": "polygon.png", "tooltip": "Draw polygon", "checkable": True, "action": self.enableDisablePolygon},
            {"image": "reset.png", "tooltip": "Remove polygon", "checkable": False, "action": self.clearPolygon}
        ])

    def __generateTypeWidget__(self):
        elementsTypeGB = QWidget()
        elementsTypeLayout = QVBoxLayout()
        elementsTypeGB.setLayout(elementsTypeLayout)
        elementsTypeLayout.setContentsMargins(10, 0, 0, 0)
        elementsTypeLayout.setSpacing(0)

        nodesCB = QCheckBox(self.tr("&Nodes"))
        elementsTypeLayout.addWidget(nodesCB)

        waysCB = QCheckBox(self.tr("&Ways"))
        waysCB.setChecked(True)
        elementsTypeLayout.addWidget(waysCB)

        relCB = QCheckBox(self.tr("&Relations"))
        elementsTypeLayout.addWidget(relCB)

        areasCB = QCheckBox(self.tr("&Areas"))
        areasCB.stateChanged.connect(self.__onAreaSelected__)
        elementsTypeLayout.addWidget(areasCB)

        nodesCB.stateChanged.connect(lambda b: self.areasCB.setChecked(False) if b else None)
        waysCB.stateChanged.connect(lambda b: self.areasCB.setChecked(False) if b else None)
        relCB.stateChanged.connect(lambda b: self.areasCB.setChecked(False) if b else None)

        return elementsTypeGB, nodesCB, waysCB, relCB, areasCB

    def __generateSurroundingWidget__(self):
        surroundGB = QGroupBox()
        surroundGB.setFlat(True)
        surroundLayout = QVBoxLayout()
        surroundLayout.setContentsMargins(0, 0, 0, 0)

        noneRB = QRadioButton(self.tr("&None"))
        noneRB.setObjectName("None")
        noneRB.setChecked(True)
        surroundLayout.addWidget(noneRB)

        adjacentRB = QRadioButton(self.tr("&Adjacent streets"))
        adjacentRB.setObjectName("Adjacent")
        surroundLayout.addWidget(adjacentRB)

        aroundRB = QRadioButton(self.tr("&Streets around"))
        aroundRB.setObjectName("Around")
        surroundLayout.addWidget(aroundRB)

        aroundRadiusEdit = QLineEdit("")
        aroundRadiusEdit.hide()
        aroundRadiusEdit.setPlaceholderText("Radius in meters")
        aroundRadiusEdit.setValidator(QIntValidator(0, 10000000, surroundGB))
        aroundRB.toggled.connect(lambda b: aroundRadiusEdit.show() if b else aroundRadiusEdit.hide())
        surroundLayout.addWidget(aroundRadiusEdit)

        surroundGB.setLayout(surroundLayout)

        return surroundGB, aroundRadiusEdit

    def __generateFiltersWidget__(self):
        filtersButtons = QWidget()
        filtersButtonsLayout = QHBoxLayout()
        filtersButtons.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
        filtersButtonsLayout.setAlignment(Qt.AlignRight)
        filtersButtonsLayout.setSpacing(0)
        filtersButtonsLayout.setContentsMargins(0, 0, 0, 0)
        filtersButtons.setLayout(filtersButtonsLayout)

        addFilterButton = IconButton(QIcon(os.path.join(picturesDir, "add.png")),
                                     filtersButtons.windowHandle(),
                                     filtersButtons.height())
        addFilterButton.setToolTip("Add filter")
        addFilterButton.setFlat(True)
        addFilterButton.setStyleSheet("""QPushButton::menu-indicator{image: none;}""")

        filtersMenu = QMenu()

        equalAct = QAction('Equal', self)
        equalAct.triggered.connect(lambda: self.addFilterByComparison(comparison=TagComparison.EQUAL))
        filtersMenu.addAction(equalAct)

        maxAct = QAction('Maximum', self)
        maxAct.triggered.connect(lambda: self.addFilterByComparison(comparison=TagComparison.AT_MOST))
        filtersMenu.addAction(maxAct)

        minAct = QAction('Minimum', self)
        minAct.triggered.connect(lambda: self.addFilterByComparison(comparison=TagComparison.AT_LEAST))
        filtersMenu.addAction(minAct)

        containAllAct = QAction('Contain all', self)
        containAllAct.triggered.connect(lambda: self.addFilterByComparison(comparison=TagComparison.CONTAIN_ALL))
        filtersMenu.addAction(containAllAct)

        oneOfAct = QAction('Is one of', self)
        oneOfAct.triggered.connect(lambda: self.addFilterByComparison(comparison=TagComparison.IS_ONE_OF))
        filtersMenu.addAction(oneOfAct)

        hasKeyAct = QAction('Has key', self)
        hasKeyAct.triggered.connect(lambda: self.addFilterByComparison(comparison=TagComparison.HAS_KEY))
        filtersMenu.addAction(hasKeyAct)

        hasOneKeyAct = QAction('Has one key', self)
        hasOneKeyAct.triggered.connect(lambda: self.addFilterByComparison(comparison=TagComparison.HAS_ONE_KEY))
        filtersMenu.addAction(hasOneKeyAct)

        hasNotKeyAct = QAction('Has not key', self)
        hasNotKeyAct.triggered.connect(lambda: self.addFilterByComparison(comparison=TagComparison.HAS_NOT_KEY))
        filtersMenu.addAction(hasNotKeyAct)

        addFilterButton.setMenu(filtersMenu)

        filtersButtonsLayout.addWidget(addFilterButton)

        filtersWidget = QWidget(self)
        filtersLayout = QVBoxLayout()
        filtersLayout.setContentsMargins(10, 10, 10, 10)
        filtersWidget.setLayout(filtersLayout)

        return filtersButtons, filtersWidget, filtersLayout

    def __generateIdsWidget__(self):
        return VariableInputList(0, "Numeric id", QRegularExpressionValidator(QRegularExpression("^[0-9]+$")))

    # REQUEST GETTERS

    def __getLocationName__(self):
        return self.locationNameWidget.text()

    def __getType__(self):
        return OsmType.getType(self.nodesCB.isChecked(), self.waysCB.isChecked(),
                               self.relCB.isChecked(), self.areasCB.isChecked())

    def __getSelectedSurrounding__(self):
        switcher = {
            "Adjacent": Surround.ADJACENT,
            "Around": Surround.AROUND,
            "None": Surround.NONE
        }
        selectedSurrounding = [b for b in self.surroundGB.findChildren(QRadioButton) if b.isChecked()][0]
        return switcher.get(selectedSurrounding.objectName())

    @pyqtSlot(QJsonValue)
    def __setPolygons__(self, val):
        self.polygonSettings = []
        for point in val.toArray():
            self.polygonSettings.append([point["lat"].toDouble(), point["lng"].toDouble()])

    def __getPolygon__(self):
        return self.polygonSettings

    def getAroundRadius(self):
        return int(self.aroundRadiusEdit.text()) if len(self.aroundRadiusEdit.text()) > 0 else 100

    def getRequest(self):
        request = OverpassRequest(self.__getType__(),
                                  self.__getSelectedSurrounding__(),
                                  self.requestName,
                                  self.getAroundRadius())
        request.setLocationName(self.__getLocationName__())
        if request.locationId is None and request.locationName != "":
            logging.warning("Location name not found in the request '{}'. It will be ignored.".format(self.requestName))
        request.addPolygon(self.__getPolygon__())
        request.setIds(self.__getIds__())
        for filterWidget in self.filtersWidget.findChildren(FilterWidget):
            try:
                request.addFilter(filterWidget.getFilter())
            except BadFilterAttributes as e:
                raise BadFilterAttributes("Error in one of the filters of request '{}'. {}".format(self.requestName, str(e)))
        return request

    def getName(self):
        return self.requestName

    def getMap(self):
        return self.polygonPage

    def __getIds__(self):
        return self.idsWidget.getItems()

    # REQUEST SETTERS

    def addFilterByComparison(self, comparison):
        newFilterWidget = FilterWidget(self.filtersWidget, comparison, self.keyList)
        self.filtersLayout.addWidget(newFilterWidget)

    def addFilter(self, filter):
        currentKeys = {filter.getKey(): filter for filter in self.findChildren(FilterWidget)}
        if filter.key != "" and filter.key in currentKeys.keys():
            logging.warning("The key {} is used more than once in the set {}.".format(filter.key, self.getName()))
        newFilterWidget = FilterWidget(self.filtersWidget, filter.comparison, self.keyList)
        self.filtersLayout.addWidget(newFilterWidget)
        newFilterWidget.setFilter(filter)

    def __setLocationName__(self, locationName):
        self.locationNameWidget.setText(locationName)

    def __setType__(self, requestType):
        typeConfig = OsmType.getConfig(requestType)
        self.waysCB.setChecked(typeConfig["way"])
        self.nodesCB.setChecked(typeConfig["node"])
        self.relCB.setChecked(typeConfig["rel"])
        self.areasCB.setChecked(typeConfig["area"])

    def __setSelectedSurrounding__(self, surroundValue):
        if surroundValue == Surround.ADJACENT:
            self.surroundGB.findChild(QRadioButton, "Adjacent").setChecked(True)
        elif surroundValue == Surround.AROUND:
            self.surroundGB.findChild(QRadioButton, "Around").setChecked(True)
        elif surroundValue == Surround.NONE:
            self.surroundGB.findChild(QRadioButton, "None").setChecked(True)

    def changePolygon(self, coors):
        self.polygonSettings = coors
        if self.html != "":
            self.changePage(self.html)

    def setAroundRadius(self, radius):
        return self.aroundRadiusEdit.setText(str(radius))

    def __setRequest__(self, request):
        self.requestName = request.name
        self.__setType__(request.type)
        self.setAroundRadius(request.aroundRadius)
        self.__setSelectedSurrounding__(request.surrounding)
        for filterWidget in self.filtersWidget.findChildren(FilterWidget):
            filterWidget.deleteLater()
        for filter in request.filters:
            self.addFilter(filter)
        self.__setLocationName__(request.locationName)
        self.setIds(request.ids)
        self.changePolygon(request.polygon)

    def changePage(self, html):
        self.html = html
        soup = bs4.BeautifulSoup(html, features="html.parser")
        js = soup.new_tag("script")
        js.string = (JS_SCRIPT % (str(self.polygonSettings), str(self.polygonActivated).lower()))
        soup.append(js)
        soup.head.append(soup.new_tag("script", src="qrc:///qtwebchannel/qwebchannel.js"))
        htmlFileName = os.path.join(tempDir, "{}.html".format(self.requestName))
        with open(htmlFileName, "w+") as f:
            f.write(str(soup))

        self.polygonPage.load(QUrl.fromLocalFile(htmlFileName))

    def setIds(self, ids=None):
        self.idsWidget.setItems(ids)

    def addId(self, newId=0):
        self.idsWidget.addItem(newId)

    def __del__(self):
        SetNameManagement.releaseName(self.requestName)

    # SIGNALS

    def __onAreaSelected__(self):
        self.nodesCB.setChecked(False)
        self.waysCB.setChecked(False)
        self.relCB.setChecked(False)

    def clearPolygon(self):
        self.polygonPage.runJavaScript("cleanPolygon();", lambda x: logging.debug("LINE"))

    def enableDisablePolygon(self, checked):
        self.polygonActivated = checked
        self.polygonPage.runJavaScript("enablePolygon();" if checked else "disablePolygon();")
            import re
            match = re.search(r'\d{,2}.\d{,2}.\d{4}', update_date_text)
            if match is None:
                return

            date_string = match.group()

            import os
            file_name = os.path.basename(href)
            file_name = date_string + '_' + file_name

            from datetime import datetime
            print(datetime.today().date(), file_name, file_url)


url = 'http://www.dns-shop.ru/'

app = QApplication([])
page = QWebEnginePage()
page.load(QUrl(url))
page.loadFinished.connect(lambda x=None: page.toHtml(_callable))

# Настроим вызов загрузки страницы на каждые 10 часов
timer = QTimer()
timer.setInterval(10 * 60 * 60 * 1000)
timer.timeout.connect(lambda x=None: page.load(QUrl(url)))
timer.start()

app.exec()
Esempio n. 15
0
 def load(self, url):
     if not isinstance(url, QUrl):
         url = QUrl.fromUserInput(url)
     self.__delay_loading_url = None
     return QWebEnginePage.load(self, url)
Esempio n. 16
0
class Umbrella(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()

        self.init_my_location()
        self.setupUi(self)  # 초기화
        # self.url = "http://192.168.0.3:8080/umbrella"
        self.url = "http://localhost:8080/umbrella.html"
        self.webEngineView.load(QUrl(self.url))
        self.page = QWebEnginePage()
        self.page.setUrl(QUrl(self.url))
        self.page.setView(self.webEngineView)
        # self.webEngineView2.load(QUrl("http://ncov.mohw.go.kr/bdBoardList_Real.do?brdId=1&brdGubun=11&ncvContSeq=&contSeq=&board_id=&gubun="))

        self.appLoaded = False
        chrome_option = Options()
        chrome_option.add_argument("--headless")
        chrome_option.add_argument("--mute-audio")
        self.browser = webdriver.Chrome(
            chrome_options=chrome_option,
            executable_path="resources/chromedriver.exe")
        self.browser.get(self.url)
        self.user_uuid = uuid.uuid4()
        self.runner = Runner(self)
        self.dc = DataCollector(self)
        self.dm = DataManager(self)
        self.itemList = []
        self.rowList = []
        self.dataChecker = 0

        # self.webEngineView2.load(QUrl(self.dc.html_test()))

        self.initSignal()
        self.timeSeries = self.dc.get_timeseries()
        self.comboBox.addItem("-----")
        for i in sorted(self.timeSeries.keys()):
            self.comboBox.addItem(i)

        #테트리스
        # self.tboard = Board(self.page_3)
        # self.tboard.msg2Statusbar.connect(self.test_1)
        # self.tboard.start()
        # self.tboard.setStyleSheet("background-color:#ffffff")
        # self.tboard.setGeometry(460,0,460,820)

    def test_1(self, msg):
        if msg == "Game over":
            self.tboard.initBoard()
            self.tboard.start()

    def initSignal(self):
        #page 변환
        self.pushButton_3.clicked.connect(
            lambda: self.stackedWidget.setCurrentIndex(1))
        self.pushButton_4.clicked.connect(
            lambda: self.stackedWidget.setCurrentIndex(1))
        self.intro_button.clicked.connect(
            lambda: self.stackedWidget.setCurrentIndex(1))
        self.pushButton_5.clicked.connect(
            lambda: self.stackedWidget.setCurrentIndex(1))
        self.pushButton__image.clicked.connect(
            lambda: self.stackedWidget.setCurrentIndex(0))
        self.pushButton__image2.clicked.connect(
            lambda: self.stackedWidget.setCurrentIndex(0))
        self.pushButton.clicked.connect(self.runner.map_removeMarkers)
        #intro 데이터 입력
        self.lineEdit.returnPressed.connect(
            lambda: self.runner.search(self.lineEdit.text().strip()))
        self.pushButton.clicked.connect(
            lambda: self.runner.search(self.lineEdit.text().strip()))
        self.page.loadFinished.connect(lambda: self.runner.setMap(
            self.my_location_lat, self.my_location_lng))
        self.pushButton2.clicked.connect(self.mark_around)
        self.pushButton3.clicked.connect(lambda: self.runner.setMap(
            self.my_location_lat, self.my_location_lng))
        self.page.urlChanged.connect(self.setButton)
        self.listWidget.itemActivated.connect(self.activateRow)
        self.listWidget.itemClicked.connect(self.rowClicked)
        self.lineEdit.setText(
            self.runner.coord_to_address(self.my_location_lat,
                                         self.my_location_lng, 0))

        self.radio1.clicked.connect(lambda: self.setDataChecker(0))
        self.radio2.clicked.connect(lambda: self.setDataChecker(2))
        self.radio3.clicked.connect(lambda: self.setDataChecker(3))
        self.radio4.clicked.connect(lambda: self.setDataChecker(4))

        self.widget_1.pressed.connect(self.view_graph)
        self.widget_2.pressed.connect(self.view_graph)
        self.widget_3.pressed.connect(self.view_graph)
        self.widget_4.pressed.connect(self.view_graph)

        self.comboBox.currentTextChanged.connect(self.show_timeSeries)

    def show_timeSeries(self, nat):
        if nat in self.timeSeries.keys():
            self.dm.graph_timeseries(self.timeSeries.get(nat))

    def view_graph(self):
        self.stackedWidget.setCurrentIndex(2)

    def mark_around(self):
        print("markaround")
        self.remove_list()
        if not self.page.url().toString().strip().startswith(self.url):
            self.page.load(QUrl(self.url))
            return
        self.runner.map_removeMarkers()
        try:
            lat, lng = self.runner.map_getCenter()
        except:
            print("mark_arount exception")
            return
        data = self.dc.get_data_by_latlng(lat, lng, 1000)
        self.runner.marking(data)
        self.show_list(data)
        self.lineEdit.setText(self.runner.coord_to_address(lat, lng, 0))

    def setDataChecker(self, num):
        self.dataChecker = num

    #표지
    def intro(self):
        data = self.dc.A()
        #Text
        self.dm.show_intro_list(data)
        #그래프
        self.dm.intro_graph(data)

    def init_my_location(self):
        url = 'https://www.googleapis.com/geolocation/v1/geolocate?key=AIzaSyDQKxbTt0MrFNH85kTJXzickMD5s88UVaI'
        data = {
            'considerIp': True,
        }
        result = requests.post(url, data)
        my_location = json.loads(result.text)
        self.my_location_lat = str(my_location.get('location').get('lat'))
        self.my_location_lng = str(my_location.get('location').get('lng'))

    def setButton(self):
        if self.page.url().toString().strip().startswith(
                "http://localhost:8080/umbrella"):
            self.pushButton2.setText("판매처 탐색")
        else:
            self.pushButton2.setText("지도 새로고침")

    def show_list(self, data):
        remainP = [
            '100개 이상', '30개 이상 100개 미만', '2개 이상 30개 미만', '1개 이하', '판매중지'
        ]
        for i in range(len(data)):
            item = QListWidgetItem(self.listWidget)
            row = Item(data[i])
            rs = data[i].get('remain_stat')
            if rs == None:
                row.remain_stat.setStyleSheet('color:red')
            elif remainP.index(rs) <= 1:
                row.remain_stat.setStyleSheet('color:green')
            elif remainP.index(rs) == 2:
                row.remain_stat.setStyleSheet('color:orange')
            else:
                row.remain_stat.setStyleSheet('color:red')
            item.setWhatsThis(str(i))
            item.setSizeHint(row.sizeHint())
            self.listWidget.setItemWidget(item, row)
            self.listWidget.addItem(item)
            self.itemList.append(item)
            self.rowList.append(row)

    def remove_list(self):
        for i in range(len(self.itemList)):
            self.itemList[i].setHidden(True)
        self.itemList = []
        self.rowList = []

    def activateRow(self, row):
        self.runner.setMap(self.rowList[int(row.whatsThis())].lat,
                           self.rowList[int(row.whatsThis())].lng)
        self.runner.info_open(self.rowList[int(row.whatsThis())].code)

    def rowClicked(self, row):
        self.runner.info_close_all()
        self.runner.info_open(self.rowList[int(row.whatsThis())].code)
Esempio n. 17
0
    print('result is: ', result)


def t(a):
    print('status: ', a)

    # viewPage.runJavaScript('var img=document.querySelector(".captcha_render");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);var dataURL=canvas.toDataURL("image/png");dataURL;',p)
    # viewPage.runJavaScript('window.a1a = "omid";',p)
    # viewPage.runJavaScript('"hi "+a1a;',stat)
    # viewPage.printToPdf('nic.pdf')
    # viewPage.printToPdf('t11111111111.pdf')
    # size = viewPage.contentsSize().toSize()
    # image = QImage(size, QImage.Format_ARGB32)
    # region = QRegion(0,0,size.width(), size.height())
    # painter = QPainter(image)
    # viewPage.view().render(painter, QPoint(), region)
    # painter.end()
    # image.save("test.png", "PNG", 80)
    print('saved!')


Page.loadFinished.connect(t)

Page.load(QUrl('https://google.com/'))

# image = QImage(page.contentsSize(),QImage.Format_ARGB32)
# painter = QPainter(image)
# page.ren


app.exec()