Beispiel #1
0
 def __init__(self):
     super().__init__()
     script = qtwe.QWebEngineScript()
     script.setSourceCode('function object(){ return {a: 1, b: 2}; }\n'
                          'function string(){ return "Test String";}\n'
                          'function array() { return ["a", 7, {a: 2}];}\n')
     script.setWorldId(qtwe.QWebEngineScript.MainWorld)
     self.page().scripts().insert(script)
     self.loadFinished.connect(self.on_load)
Beispiel #2
0
def loadJS(view, SCRIPT, name):
    script = QtWebEngineWidgets.QWebEngineScript()
    view.page().runJavaScript(
        SCRIPT, QtWebEngineWidgets.QWebEngineScript.ApplicationWorld)
    script.setName(name)
    script.setSourceCode(SCRIPT)
    script.setInjectionPoint(QtWebEngineWidgets.QWebEngineScript.DocumentReady)
    script.setRunsOnSubFrames(True)
    script.setWorldId(QtWebEngineWidgets.QWebEngineScript.MainWorld)
    view.page().scripts().insert(script)
Beispiel #3
0
 def _qwc_script(self):
     script = QtWebEngineWidgets.QWebEngineScript()
     script.setSourceCode(f"""
         {self._qwc_js()}
         {BRIDGE}
     """)
     script.setName('xxx')
     script.setWorldId(QtWebEngineWidgets.QWebEngineScript.MainWorld)
     script.setInjectionPoint(
         QtWebEngineWidgets.QWebEngineScript.DocumentReady)
     script.setRunsOnSubFrames(True)
     return script
Beispiel #4
0
    def createPage(cls, navmapUrl: str) -> QtWebEngineWidgets.QWebEnginePage:
        """Create the main page for the application, displaying a suitably modified Online Navmap."""
        page = QtWebEngineWidgets.QWebEnginePage()
        page.profile().setCachePath(NAVMAP_DIR)  # link cache directory
        page.setUrl(QtCore.QUrl(navmapUrl))

        hookSource = cls.getHookSource()
        # create and inject script
        script = QtWebEngineWidgets.QWebEngineScript()
        script.setSourceCode(hookSource)
        script.setName('navmap.js')
        script.setWorldId(QtWebEngineWidgets.QWebEngineScript.MainWorld)
        script.setInjectionPoint(
            QtWebEngineWidgets.QWebEngineScript.DocumentReady)
        page.scripts().insert(script)

        return page
Beispiel #5
0
 def __init__(self, window):
     super().__init__()
     
     # Automatically click HCaptcha checkbox
     # TODO: Add automatic hcaptcha solver userscript
     jsStr = """
     function isHidden(el) {
         return (el.offsetParent === null);
     };
     if (window.location.href.includes("checkbox")) {
     var checkboxInterval = setInterval(function() {
         if (!document.querySelector("#checkbox")) {
             // Wait until the checkbox element is visible
         } else if (document.querySelector("#checkbox").getAttribute("aria-checked") == "true") {
             clearInterval(checkboxInterval);
         } else if (!isHidden(document.querySelector("#checkbox")) && document.querySelector("#checkbox").getAttribute("aria-checked") == "false") {
             document.querySelector("#checkbox").click();
         } else {
             return;
         }
     }, 500);}"""
     hcaptchaClicker = QtWebEngineWidgets.QWebEngineScript()
     hcaptchaClicker.setName("qwebchannel.js"); 
     hcaptchaClicker.setInjectionPoint(QtWebEngineWidgets.QWebEngineScript.DocumentCreation) # important
     hcaptchaClicker.setRunsOnSubFrames(True)
     hcaptchaClicker.setWorldId(QtWebEngineWidgets.QWebEngineScript.MainWorld)
     hcaptchaClicker.setSourceCode(jsStr)
     
     self.profile = QtWebEngineWidgets.QWebEngineProfile()
     self.profile.setUrlRequestInterceptor(WebInterceptor(self, window))
     self.page = InstrumentedPage(self.profile, self)
     
     # inject js
     self.profile.scripts().insert(hcaptchaClicker)
     
     self.page.setUrl(QtCore.QUrl("https://shortlyai.com"))
     self.setPage(self.page)
    def __init__(self):
        """MainWindow constructor."""
        super().__init__()
        # Main UI code goes here
        # navigation toolbar
        navigation = self.addToolBar('Navigation')
        style = self.style()
        self.back = navigation.addAction('Back')
        self.back.setIcon(style.standardIcon(style.SP_ArrowBack))
        self.forward = navigation.addAction('Forward')
        self.forward.setIcon(style.standardIcon(style.SP_ArrowForward))
        self.reload = navigation.addAction('Reload')
        self.reload.setIcon(style.standardIcon(style.SP_BrowserReload))
        self.stop = navigation.addAction('Stop')
        self.stop.setIcon(style.standardIcon(style.SP_BrowserStop))
        self.urlbar = qtw.QLineEdit()
        navigation.addWidget(self.urlbar)
        self.go = navigation.addAction('Go')
        self.go.setIcon(style.standardIcon(style.SP_DialogOkButton))

        # single browser view
        #webview = qtwe.QWebEngineView()
        #self.setCentralWidget(webview)
        #webview.load(qtc.QUrl('http://www.alandmoore.com'))
        #self.go.triggered.connect(lambda: webview.load(
        #    qtc.QUrl(self.urlbar.text())))
        #self.back.triggered.connect(webview.back)
        #self.forward.triggered.connect(webview.forward)
        #self.reload.triggered.connect(webview.reload)
        #self.stop.triggered.connect(webview.stop)

        # browser tabs
        self.tabs = qtw.QTabWidget(
            tabsClosable=True, movable=True)
        self.tabs.tabCloseRequested.connect(self.tabs.removeTab)
        self.new = qtw.QPushButton('New')
        self.tabs.setCornerWidget(self.new)
        self.setCentralWidget(self.tabs)

        self.back.triggered.connect(self.on_back)
        self.forward.triggered.connect(self.on_forward)
        self.reload.triggered.connect(self.on_reload)
        self.stop.triggered.connect(self.on_stop)
        self.go.triggered.connect(self.on_go)
        self.urlbar.returnPressed.connect(self.on_go)
        self.new.clicked.connect(self.add_tab)

        # Profile sharing
        self.profile = qtwe.QWebEngineProfile()

        # History
        history_dock = qtw.QDockWidget('History')
        self.addDockWidget(qtc.Qt.RightDockWidgetArea, history_dock)
        self.history_list = qtw.QListWidget()
        history_dock.setWidget(self.history_list)
        self.tabs.currentChanged.connect(self.update_history)
        self.history_list.itemDoubleClicked.connect(self.navigate_history)

        # Altering Settings
        settings = qtwe.QWebEngineSettings.defaultSettings()
        settings.setFontFamily(
            qtwe.QWebEngineSettings.SansSerifFont, 'Impact')
        settings.setAttribute(
            qtwe.QWebEngineSettings.PluginsEnabled, True)


        # Text search feature
        find_dock = qtw.QDockWidget('Search')
        self.addDockWidget(qtc.Qt.BottomDockWidgetArea, find_dock)
        self.find_text = qtw.QLineEdit()
        find_dock.setWidget(self.find_text)
        self.find_text.textChanged.connect(self.text_search)
        # init javascript
        with open('finder.js', 'r') as fh:
            self.finder_js = fh.read()
        # using QWebEngineScript
        self.finder_script = qtwe.QWebEngineScript()
        self.finder_script.setSourceCode(self.finder_js)
        # Ensure that our created functions exist within the main JS environment
        self.finder_script.setWorldId(qtwe.QWebEngineScript.MainWorld)

        self.add_tab()
        # End main UI code
        self.show()