class App(QWidget): def __init__(self): super().__init__() self.title = 'Nike bot' self.left = 600 self.top = 300 self.width = 670 self.height = 480 self.all_extensions = ["xlsx", "xlsm", "xlsb", "xls", "xlam"] self.browser = "firefox" self.my_threads = [] self.current_date = '' self.data = [] self.initUI() # req_proxy = RequestProxy() # self.proxies = req_proxy.get_proxy_list() # # self.rus_proxies = [] # for proxy in self.proxies: # if proxy.country == 'Russian Federation': # print(proxy.country) # self.rus_proxies.append(proxy) def initUI(self): self.setWindowTitle(self.title) self.setGeometry(self.left, self.top, self.width, self.height) self.setFixedSize(self.width, self.height) # Create widget label = QLabel(self) self.lable_file = QLabel(self) self.lable_file.setStyleSheet("background-color:red;") self.lable_file.setText("File is not uploaded") self.lable_file.setGeometry(470, 30, 135, 30) self.button_file = QPushButton(self) self.button_file.setStyleSheet( "background-color:#301b28;color:#ddc5a2;") self.button_file.setGeometry(470, 60, 135, 40) self.button_file.setText("Brows file") self.button_file.clicked.connect(lambda: self.openFileNameDialog()) self.button_start = QPushButton(self) self.button_start.setGeometry(470, 250, 135, 40) self.button_start.setText("Start") self.button_start.setStyleSheet( "background-color:#301b28;color:#ddc5a2;") self.button_start.clicked.connect( lambda: self.create_threads(self.browser, self.data)) self.button_start.setDisabled(True) self.button_close = QPushButton(self) self.button_close.setStyleSheet( "background-color:#301b28;color:#ddc5a2;") self.button_close.setGeometry(470, 290, 135, 40) self.button_close.setText("Close") self.button_close.clicked.connect(lambda: self.close_browsers()) self.label_brows = QLabel(self) self.label_brows.setGeometry(470, 120, 135, 30) self.label_brows.setStyleSheet("color:#301b28;") self.label_brows.setText("Choose browser:") self.combo = QComboBox(self) self.combo.addItems(["firefox", "chrome", "opera"]) self.combo.setGeometry(470, 150, 135, 40) self.combo.setStyleSheet("background-color:#301b28;color:#ddc5a2;") self.combo.activated[str].connect(self.setBrowser) self.table = QTableWidget(self) self.table.setGeometry(0, 0, 450, 400) self.table.setStyleSheet("background-color:#301b28;color:#ddc5a2;") self.table.setColumnCount(7) self.table.setRowCount(1) self.table.setItem(0, 0, QTableWidgetItem("Login")) self.table.setItem(0, 1, QTableWidgetItem("Password")) self.table.setItem(0, 2, QTableWidgetItem("Middle name")) self.table.setItem(0, 3, QTableWidgetItem("Card number")) self.table.setItem(0, 4, QTableWidgetItem("Date")) self.table.setItem(0, 5, QTableWidgetItem("Cvv")) self.table.setItem(0, 6, QTableWidgetItem("Url")) self.date_field = QDateTimeEdit(self) self.date_field.setGeometry(470, 350, 165, 40) self.date_field.setStyleSheet( "background-color:#301b28;color:#ddc5a2;") self.date_field.setDisplayFormat("yyyy-MM-dd HH:mm:ss") self.date_field.setMinimumDateTime(QDateTime.currentDateTime()) self.url = QTextEdit(self) self.url.setGeometry(10, 430, 400, 30) self.url.setStyleSheet("background-color:#301b28;color:#ddc5a2;") self.url_text = QLabel(self) self.url_text.setGeometry(10, 400, 400, 30) self.url_text.setStyleSheet("color:#301b28;") self.url_text.setText("Url:") self.button_url = QPushButton(self) self.button_url.setStyleSheet( "background-color:#301b28;color:#ddc5a2;") self.button_url.setGeometry(410, 430, 100, 30) self.button_url.setText("ADD") self.button_url.clicked.connect(lambda: self.add_url()) self.usr_text = QLabel(self) self.usr_text.setGeometry(520, 430, 80, 30) self.usr_text.setStyleSheet("color:#301b28;") self.usr_text.setText("User count:") self.users = QTextEdit(self) self.users.setGeometry(600, 430, 40, 30) self.users.setStyleSheet("background-color:#301b28;color:#ddc5a2;") pixmap = QPixmap('static/back.jpeg').scaled(self.width, self.height) label.setPixmap(pixmap) self.show() def openFileNameDialog(self): options = QFileDialog.Options() options |= QFileDialog.DontUseNativeDialog fileName, _ = QFileDialog.getOpenFileName( self, "QFileDialog.getOpenFileName()", "", "", options=options) extension = fileName.split(".")[-1] if fileName and extension in self.all_extensions: self.start(fileName) else: msg = QMessageBox() msg.setIcon(QMessageBox.Critical) msg.setStyleSheet("background-color:#301b28;color:#ddc5a2;") msg.setText("Wrong file format!") msg.setInformativeText('Only excel file format') msg.setWindowTitle("Error") msg.exec_() def setBrowser(self, browser): self.browser = browser def start(self, name): self.lable_file.setStyleSheet("background-color:green;") self.lable_file.setText(" File is uploaded") self.data = pars_xls(name) if self.data != "Wrong header params, should be: Login, Password, Middle_name, Card_number, Date, Cvv": self.table.setRowCount(len(self.data)) self.user_count = len(self.data) - 1 self.users.setText(str(self.user_count)) self.fill_table() else: msg = QMessageBox() msg.setIcon(QMessageBox.Critical) msg.setStyleSheet("background-color:#301b28;color:#ddc5a2;") msg.setText("Wrong file format!") msg.setInformativeText( "Wrong header params, should be: Login, Password, Middle_name, Card_number, Date, Cvv" ) msg.setWindowTitle("Error") msg.exec_() def fill_table(self): self.table.setItem(0, 0, QTableWidgetItem("Login")) self.table.setItem(0, 1, QTableWidgetItem("Password")) self.table.setItem(0, 2, QTableWidgetItem("Middle name")) self.table.setItem(0, 3, QTableWidgetItem("Card number")) self.table.setItem(0, 4, QTableWidgetItem("Date")) self.table.setItem(0, 5, QTableWidgetItem("Cvv")) self.table.setItem(0, 6, QTableWidgetItem("Url")) for i in range(len(self.data) - 1): for j in range(len(self.data[i])): self.table.setItem(i + 1, j, QTableWidgetItem(self.data[i][j])) def create_threads(self, browser, data): self.button_start.setDisabled(True) k = len(self.my_threads) self.user_count = int(self.users.toPlainText()) drop_time = int( datetime.fromisoformat(self.date_field.dateTime().toString( "yyyy-MM-dd HH:mm:ss")).timestamp()) for i in data: # proxy = self.rus_proxies[k].get_address() self.my_threads.append( bot_on_thread(url=i[6], browser=browser, login=i[0], password=i[1], middle_name=i[2], cardNumber=i[3], cardExpiry=i[4], cardCvc=i[5], drop_time=drop_time)) self.my_threads[k].start() k += 1 if k == self.user_count: break def close_browsers(self): for i in self.my_threads: try: i.close_browser() except: del i continue del i self.my_threads = [] self.button_start.setDisabled(False) def add_url(self): if len(self.data) != 0: for i in range(len(self.data)): self.data[i].append(self.url.toPlainText()) self.table.setItem(i + 1, 6, QTableWidgetItem(self.url.toPlainText())) self.button_start.setDisabled(False) print(self.data)
class OWO(QWidget): def __init__(self): super(QWidget, self).__init__() tempTime = datetime.datetime.now() tempTime = tempTime.strftime(r'%Y-%m-%d %H %M %S') self.logFile = codecs.open('./log/' + str(tempTime) + '日志' + '.html', 'w', 'utf-8') self.htmlPart1 = """ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Log</title> </head> <body> <table> """ self.htmlPart2 = """ </table> </body> </html> """ self.logFile.write(self.htmlPart1) vBox = QVBoxLayout() logG = QGroupBox() logG.setTitle('信息') hBox = QHBoxLayout() self.logList = QListWidget() hBox.addWidget(self.logList) logG.setLayout(hBox) iniG = QGroupBox() iniG.setTitle('设置') vBox2 = QVBoxLayout() hBox1 = QHBoxLayout() mylable1 = QLabel('交易对1:') self.input1 = QLineEdit() self.input1.setText('usdt') hBox1.addWidget(mylable1) hBox1.addWidget(self.input1) vBox2.addLayout(hBox1) hBox2 = QHBoxLayout() mylable2 = QLabel('交易对2:') self.input2 = QLineEdit() self.input2.setText('ft') hBox2.addWidget(mylable2) hBox2.addWidget(self.input2) vBox2.addLayout(hBox2) hBox3 = QHBoxLayout() mylable3 = QLabel('交易数量:') self.input3 = QLineEdit() self.input3.setText('10') hBox3.addWidget(mylable3) hBox3.addWidget(self.input3) vBox2.addLayout(hBox3) hBox4 = QHBoxLayout() mylable4 = QLabel('交易对:') self.input4 = QLineEdit() self.input4.setText('ftusdt') hBox4.addWidget(mylable4) hBox4.addWidget(self.input4) vBox2.addLayout(hBox4) hBox6 = QHBoxLayout() mylable6 = QLabel('交易时间:') self.input6 = QLineEdit() self.input6.setText('10') hBox6.addWidget(mylable6) hBox6.addWidget(self.input6) vBox2.addLayout(hBox6) hBox7 = QHBoxLayout() mylable6 = QLabel('价格小数:') self.input7 = QLineEdit() self.input7.setText('6') hBox7.addWidget(mylable6) hBox7.addWidget(self.input7) vBox2.addLayout(hBox7) hBox11 = QHBoxLayout() mylable11 = QLabel('输入数值!:') self.input11 = QLineEdit() self.input11.setText('0') hBox11.addWidget(mylable11) hBox11.addWidget(self.input11) vBox2.addLayout(hBox11) hBox5 = QHBoxLayout() self.input8 = QCheckBox() self.input8.setText('当余额不足是否市价增补仓') mylable7 = QLabel('输入手机号:') self.input8.setChecked(True) self.input9 = QLineEdit() mylable9 = QLabel('请输入多久取消订单(秒):') self.input10 = QLineEdit() self.input10.setText('5') submitBtn = QPushButton(' 提交 ') submitBtn.clicked.connect(self.submitFn) hBox5.addWidget(self.input8) hBox5.addSpacing(8) hBox5.addWidget(mylable7) hBox5.addWidget(self.input9) hBox5.addSpacing(8) hBox5.addWidget(mylable9) hBox5.addWidget(self.input10) hBox5.addStretch() hBox5.addWidget(submitBtn) # hBox5.addStretch() vBox2.addLayout(hBox5) iniG.setLayout(vBox2) vBox.addWidget(logG) vBox.addWidget(iniG) hBox7 = QHBoxLayout() self.startBtn = QPushButton(' 运行 ') self.startBtn.clicked.connect(self.startBtnClick) self.stopBtn = QPushButton(' 停止 ') self.stopBtn.clicked.connect(self.stopBtnClick) mylable8 = QLabel('JC软件工作室 微信:jcccccccc1991') font = QFont('微软雅黑') font.setPixelSize(18) mylable8.setFont(font) mylable8.setStyleSheet(""" QLabel{color:#FF0000} """) hBox7.addWidget(self.startBtn) hBox7.addStretch() hBox7.addWidget(mylable8) hBox7.addStretch() hBox7.addWidget(self.stopBtn) hBox8 = QHBoxLayout() tempNowTime = QtCore.QDateTime.currentDateTime() self.timerC = QCheckBox() self.timerC.setText('启用定时运行 ') self.timerC.stateChanged.connect(self.timerClicked) startLab = QLabel('开始时间:') self.startTimeEdit = QDateTimeEdit() self.startTimeEdit.setDateTime(tempNowTime) self.startTimeEdit.setStyleSheet(""" QDateTimeEdit{width:110px} """) endLab = QLabel('<--> 结束时间:') self.endTimeEdit = QDateTimeEdit() self.endTimeEdit.setDateTime(tempNowTime) self.endTimeEdit.setStyleSheet(""" QDateTimeEdit{width:110px} """) hBox8.addWidget(self.timerC) hBox8.addWidget(startLab) hBox8.addWidget(self.startTimeEdit) hBox8.addWidget(endLab) hBox8.addWidget(self.endTimeEdit) hBox8.addStretch() vBox.addLayout(hBox8) vBox.addLayout(hBox7) self.stopBtn.setEnabled(False) icon = QIcon() icon.addPixmap(QPixmap('./JC.ico'), QIcon.Normal) self.setWindowIcon(icon) self.setLayout(vBox) self.setWindowTitle('JC全自动挖矿交易软件') self.resize(700, 500) self.show() def submitFn(self, click): self.sendIni() def sendIni(self): global gIniQueue myList = [ str(self.input1.text()), str(self.input2.text()), float(self.input3.text()), str(self.input4.text()), int(self.input6.text()), int(self.input7.text()), bool(self.input8.isChecked()), str(self.input9.text()), int(self.input10.text()), int(self.input11.text()) ] gIniQueue.put(myList) def printLog(self, dic): item = QListWidgetItem(dic['msg']) self.logList.addItem(item) self.logList.setCurrentRow(self.logList.count() - 1) self.logFile.write(r'<tr><td>' + dic['msg'] + r'</td></tr>') if self.logList.count() > 1000: item = self.logList.takeItem(0) del item def startBtnClick(self, click): self.startBtn.setEnabled(False) self.stopBtn.setEnabled(True) if not gTimeFlag: self.runWorkTh() elif gTimeFlag: self.runTimerTh() def runTimerTh(self): global gStartTime global gEndTime gStartTime = self.startTimeEdit.dateTime().toPyDateTime() gEndTime = self.endTimeEdit.dateTime().toPyDateTime() self.timerTh = timerThread() self.timerTh.startSignal.connect(self.runWorkTh) self.timerTh.endSignal.connect(self.stopBtnClick) self.timerTh.start() self.printLog({'msg': '启动定时器'}) def runWorkTh(self): global gFlag gFlag = True self.sendIni() self.myTh = workThread() self.myTh.logSignal.connect(self.printLog) self.myTh.start() self.printLog({'msg': '正在启动软件'}) def stopBtnClick(self, click=None): global gFlag self.startBtn.setEnabled(True) self.stopBtn.setEnabled(False) gFlag = False self.printLog({'msg': '正在关闭软件'}) def closeEvent(self, QCloseEvent): global gFlag self.logFile.write(self.htmlPart2) self.logFile.close() gFlag = False QCloseEvent.accept() def timerClicked(self, status): global gTimeFlag gTimeFlag = status