def _request(self, url, method='get', **kwargs): req = QWebEngineHttpRequest(QUrl(url)) req.setMethod(QWebEngineHttpRequest.Post if method == 'post' else QWebEngineHttpRequest.Get) if 'headers' in kwargs: req.setHeader(self._set_headers(kwargs.get('headers'))) if 'body' in kwargs: req.setPostData(self._set_postdata(kwargs.get('body'))) return req
def requests(self, payloads: str): for payload in payloads.splitlines(): url = self.request.url.replace("[X]", payload) url = QUrl.fromUserInput(url) req = QWebEngineHttpRequest(url) req.setMethod(QWebEngineHttpRequest.Get if self.request.method == "GET" else QWebEngineHttpRequest.Post) for header in self.request.headers: req.setHeader(header[0].encode(), header[1].encode()) if self.request.method == "POST" and self.request.post_data: req.setPostData(self.request.post_data.encode()) yield req
def ActMethon(self): if (self.plusInFunction != None): try: _url = '' # 主路径 mainUrl = '{0}://{1}'.format(self.plusIn.protocol, self.plusIn.url) _temp = re.search('(\{account\})+', mainUrl) if (_temp != None and len(_temp.groups()) > 0): mainUrl = re.sub('(\{account\})+', self.plusIn.account, mainUrl) _temp = re.search('(\{password\})+', mainUrl) if (_temp != None and len(_temp.groups()) > 0): mainUrl = re.sub('(\{password\})+', self.plusIn.password, mainUrl) # 子路径 if (self.plusInFunction.is_path == 1): # 局部子路径 subUrl = '{0}/{1}'.format(mainUrl, self.plusInFunction.url) else: # 完整子路径 subUrl = '{0}://{1}'.format( self.plusIn.protocol, self.plusInFunction.url) # 替换子路径中的账号及密码 _temp = re.search('(\{account\})+', subUrl) if (_temp != None and len(_temp.groups()) > 0): subUrl = re.sub('(\{account\})+', self.plusIn.account, subUrl) _temp = re.search('(\{password\})+', subUrl) if (_temp != None and len(_temp.groups()) > 0): subUrl = re.sub('(\{password\})+', self.plusIn.password, subUrl) # 如果是搜索类型路径 if (self.plusInFunction.field_type == 2): _temp = re.search('(\{.*?\})+', subUrl) if (_temp != None and len(_temp.groups()) > 0): # 需要正则匹配的路径 _url = QUrl( re.sub( '(\{' + self.plusInFunction.field + '\})+', self.objValue.text(), subUrl)) else: _url = QUrl('{0}?{1}={2}'.format( subUrl, self.plusInFunction.field, self.objValue.text())) if (_url == ''): _url = QUrl(subUrl) if (_url == ''): _url = QUrl(mainUrl) req = QWebEngineHttpRequest() req.setUrl(_url) if (self.plusInFunction.method == 'get'): req.setMethod(QWebEngineHttpRequest.Get) else: req.setMethod(QWebEngineHttpRequest.Post) self.webview.load(req) # self.app.log.info(_url) pass except Exception as e: self.app.log.info(e) QMessageBox.information(None, self._("sscode", "Run Error"), e, QMessageBox.Yes) else: QMessageBox.information(self, '操作提示', ' 动作配置有误', QMessageBox.Yes)
def initFields(self): # 动态动作类 BEGIN ======================== class ActBtDynamic: def __init__(self, mainWin, webview): self.plusIn = DbPlusIn() self.plusInFunction = DbPlusInFunction() self.objValue = object self.app = mainWin self.webview = webview pass def ActMethon(self): if (self.plusInFunction != None): try: _url = '' # 主路径 mainUrl = '{0}://{1}'.format(self.plusIn.protocol, self.plusIn.url) _temp = re.search('(\{account\})+', mainUrl) if (_temp != None and len(_temp.groups()) > 0): mainUrl = re.sub('(\{account\})+', self.plusIn.account, mainUrl) _temp = re.search('(\{password\})+', mainUrl) if (_temp != None and len(_temp.groups()) > 0): mainUrl = re.sub('(\{password\})+', self.plusIn.password, mainUrl) # 子路径 if (self.plusInFunction.is_path == 1): # 局部子路径 subUrl = '{0}/{1}'.format(mainUrl, self.plusInFunction.url) else: # 完整子路径 subUrl = '{0}://{1}'.format( self.plusIn.protocol, self.plusInFunction.url) # 替换子路径中的账号及密码 _temp = re.search('(\{account\})+', subUrl) if (_temp != None and len(_temp.groups()) > 0): subUrl = re.sub('(\{account\})+', self.plusIn.account, subUrl) _temp = re.search('(\{password\})+', subUrl) if (_temp != None and len(_temp.groups()) > 0): subUrl = re.sub('(\{password\})+', self.plusIn.password, subUrl) # 如果是搜索类型路径 if (self.plusInFunction.field_type == 2): _temp = re.search('(\{.*?\})+', subUrl) if (_temp != None and len(_temp.groups()) > 0): # 需要正则匹配的路径 _url = QUrl( re.sub( '(\{' + self.plusInFunction.field + '\})+', self.objValue.text(), subUrl)) else: _url = QUrl('{0}?{1}={2}'.format( subUrl, self.plusInFunction.field, self.objValue.text())) if (_url == ''): _url = QUrl(subUrl) if (_url == ''): _url = QUrl(mainUrl) req = QWebEngineHttpRequest() req.setUrl(_url) if (self.plusInFunction.method == 'get'): req.setMethod(QWebEngineHttpRequest.Get) else: req.setMethod(QWebEngineHttpRequest.Post) self.webview.load(req) # self.app.log.info(_url) pass except Exception as e: self.app.log.info(e) QMessageBox.information(None, self._("sscode", "Run Error"), e, QMessageBox.Yes) else: QMessageBox.information(self, '操作提示', ' 动作配置有误', QMessageBox.Yes) # 动态动作类 END ======================== try: # 首页 mainUrl = '{0}://{1}'.format(self.plusin.protocol, self.plusin.url) _temp = re.search('(\{account\})+', mainUrl) if (_temp != None and len(_temp.groups()) > 0): mainUrl = re.sub('(\{account\})+', self.plusin.account, mainUrl) _temp = re.search('(\{password\})+', mainUrl) if (_temp != None and len(_temp.groups()) > 0): mainUrl = re.sub('(\{password\})+', self.plusin.password, mainUrl) req = QWebEngineHttpRequest() req.setUrl(QUrl(mainUrl)) if (self.plusin.method == 'get'): req.setMethod(QWebEngineHttpRequest.Get) else: req.setMethod(QWebEngineHttpRequest.Post) self.webview.load(req) # cookie token self.webview.page().profile().defaultProfile().cookieStore( ).setCookie( QNetworkCookie(QByteArray("token".encode()), QByteArray(self.mainWin.app.token.encode())), QUrl(mainUrl)) # auto login self.webview.page().loadFinished.connect(self.sendLoginInfo) icon = QtGui.QIcon() icon.addPixmap( QtGui.QPixmap(":/button/images/svg/angle-right-solid.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off) if (self.plusinFunction and len(self.plusinFunction) > 0): lineRows = 5 for index in range(len(self.plusinFunction)): # 动态方法 Begin =============== def setActMethon(self, plusin, plusinFunction, objValue): self.plusIn = plusin self.plusInFunction = plusinFunction self.objValue = objValue _act = ActBtDynamic(self, self.webview) _act.setActMethon = types.MethodType(setActMethon, _act) # 动态方法 End =============== if (self.plusinFunction[index].field_type == 2): self.labelFields.append( QtWidgets.QLabel(self.widgetNav)) self.labelFields[index].setFrameShape( QtWidgets.QFrame.NoFrame) self.labelFields[index].setFrameShadow( QtWidgets.QFrame.Sunken) self.labelFields[index].setObjectName( "labelField_{0}".format(index)) if (self.mainWin.app.configs.language.value == '简体中文'): self.labelFields[index].setText("{0}".format( self.plusinFunction[index].title_cn)) else: self.labelFields[index].setText("{0}".format( self.plusinFunction[index].title_en)) self.formLayout.setWidget( lineRows, QtWidgets.QFormLayout.SpanningRole, self.labelFields[index]) lineRows += 1 self.leFields.append( QtWidgets.QLineEdit(self.widgetNav)) self.leFields[index].setObjectName( "leField_{0}".format(index)) self.leFields[index].setFrame(True) self.leFields[index].setClearButtonEnabled(True) # 动作信号绑定 _act.setActMethon(self.plusin, self.plusinFunction[index], self.leFields[index]) self.actBtDynamicClicked.append(_act) self.leFields[index].returnPressed.connect( self.actBtDynamicClicked[index].ActMethon) self.formLayout.setWidget( lineRows, QtWidgets.QFormLayout.LabelRole, self.leFields[index]) self.tbGos.append(QtWidgets.QToolButton( self.widgetNav)) self.tbGos[index].setCursor( QtGui.QCursor(QtCore.Qt.PointingHandCursor)) self.tbGos[index].setText("") self.tbGos[index].setIcon(icon) self.tbGos[index].setPopupMode( QtWidgets.QToolButton.InstantPopup) self.tbGos[index].setAutoRaise(True) self.tbGos[index].setObjectName( "tbGo_{0}".format(index)) self.tbGos[index].setToolTip(self._("WebForm", "Go")) self.formLayout.setWidget( lineRows, QtWidgets.QFormLayout.FieldRole, self.tbGos[index]) # 动作信号绑定 self.tbGos[index].clicked.connect( self.actBtDynamicClicked[index].ActMethon) lineRows += 1 self.pbGos.append('') else: self.pbGos.append(QtWidgets.QPushButton( self.widgetNav)) sizePolicy = QtWidgets.QSizePolicy( QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.pbGos[index].sizePolicy().hasHeightForWidth()) self.pbGos[index].setSizePolicy(sizePolicy) self.pbGos[index].setCursor( QtGui.QCursor(QtCore.Qt.PointingHandCursor)) self.pbGos[index].setIcon(icon) self.pbGos[index].setAutoDefault(False) self.pbGos[index].setDefault(True) self.pbGos[index].setFlat(True) self.pbGos[index].setObjectName( "pbGo_{0}".format(index)) if (self.mainWin.app.configs.language.value == '简体中文'): self.pbGos[index].setText("{0}".format( self.plusinFunction[index].title_cn)) else: self.pbGos[index].setText("{0}".format( self.plusinFunction[index].title_en)) self.formLayout.setWidget( lineRows, QtWidgets.QFormLayout.SpanningRole, self.pbGos[index]) # 菜单动作信号绑定 _act.setActMethon(self.plusin, self.plusinFunction[index], None) self.actBtDynamicClicked.append(_act) self.pbGos[index].clicked.connect( self.actBtDynamicClicked[index].ActMethon) lineRows += 1 self.labelFields.append('') self.leFields.append('') self.tbGos.append('') else: self.widgetNav.close() except Exception as e: print(e) self.widgetNav.update() pass