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)
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)
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
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
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()