diff --git a/.gitignore b/.gitignore index d922957..921d763 100755 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ __pycache__/ -.vscode/ +.vs*/ *.json *.spec *.ini build/ -dist/ \ No newline at end of file +dist/ diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite deleted file mode 100644 index ecf4ce4..0000000 Binary files a/.vs/slnx.sqlite and /dev/null differ diff --git a/.vs/yiban-api/v15/.suo b/.vs/yiban-api/v15/.suo deleted file mode 100644 index d5a4084..0000000 Binary files a/.vs/yiban-api/v15/.suo and /dev/null differ diff --git a/ui/login.ui b/ui/login.ui new file mode 100644 index 0000000..43c5a3e --- /dev/null +++ b/ui/login.ui @@ -0,0 +1,39 @@ + + + LoginWindow + + + + 0 + 0 + 501 + 425 + + + + 登录易班 + + + + + + + + https://www.yiban.cn/ + + + + + + + + + + QWebEngineView + QWidget +
QtWebEngineWidgets/QWebEngineView
+
+
+ + +
diff --git a/MainWindow - untitled.ui b/ui/main.ui old mode 100755 new mode 100644 similarity index 78% rename from MainWindow - untitled.ui rename to ui/main.ui index a0694e3..f405e4a --- a/MainWindow - untitled.ui +++ b/ui/main.ui @@ -7,7 +7,7 @@ 0 0 501 - 501 + 425 @@ -33,7 +33,10 @@ - <html><head/><body><p>程序输出日志,如出错请咨询开发者</p></body></html> + + + + 程序输出日志,如出错请咨询开发者 true @@ -46,13 +49,6 @@ - - - - 0 - - - @@ -60,7 +56,10 @@ - <html><head/><body><p>发起投票数量,如不需要请改为0关闭自动发起投票</p></body></html> + + + + 发起投票数量,如不需要请改为0关闭自动发起投票 发起投票数量 @@ -69,6 +68,9 @@ + + 发起投票数量,如不需要请改为0关闭自动发起投票 + 1 @@ -77,7 +79,10 @@ - <html><head/><body><p>操作控制投票帖子数量,如不需要请改为0关闭操作控制投票帖子</p></body></html> + + + + 操作控制投票帖子数量,如不需要请改为0关闭操作控制投票帖子 投票互动数量 @@ -86,6 +91,9 @@ + + 操作控制投票帖子数量,如不需要请改为0关闭操作控制投票帖子 + 2 @@ -94,7 +102,10 @@ - <html><head/><body><p>回复投票次数,如不需要请改为0关闭回复投票</p></body></html> + + + + 回复投票次数,如不需要请改为0关闭回复投票 回复投票次数 @@ -103,6 +114,9 @@ + + 回复投票次数,如不需要请改为0关闭回复投票 + 1 @@ -191,7 +205,10 @@ - <html><head/><body><p>发起话题数量,如不需要请改为0关闭自动发起话题</p></body></html> + + + + 发起话题数量,如不需要请改为0关闭自动发起话题 发起话题数量 @@ -200,6 +217,9 @@ + + 发起话题数量,如不需要请改为0关闭自动发起话题 + 1 @@ -208,7 +228,10 @@ - <html><head/><body><p>操作控制话题帖子数量,如不需要请改为0关闭操作控制话题帖子</p></body></html> + + + + 操作控制话题帖子数量,如不需要请改为0关闭操作控制话题帖子 话题互动数量 @@ -217,6 +240,9 @@ + + 操作控制话题帖子数量,如不需要请改为0关闭操作控制话题帖子 + 2 @@ -224,6 +250,9 @@ + + 回复话题次数,如不需要请改为0关闭回复话题 + 1 @@ -232,7 +261,10 @@ - <html><head/><body><p>回复话题次数,如不需要请改为0关闭回复话题</p></body></html> + + + + 回复话题次数,如不需要请改为0关闭回复话题 回复话题次数 @@ -243,53 +275,49 @@ + + + + 0 + + + - + - <html><head/><body><p>用户名</p></body></html> - - - - 账号/手机号 - - - - - - - - - - - - - - <html><head/><body><p>密码</p></body></html> + + Token是易班账号密码验证的优秀替代方式,可用于访问易班服务,重新登录将重置Token - 密码 + Token - - + + + + Token是易班账号密码验证的优秀替代方式,可用于访问易班服务,重新登录将重置Token + - + <html><head/><body><p>可以选择文本内容,使用了 https://hitokoto.cn/ 的服务</p><table border="0"style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;"cellspacing="0"cellpadding="0"><td rowspan="9"/><td colspan="4"><p>提交不同的参数代表不同的类别,具体:</p></td></tr><tr><td><p>a</p></td><td colspan="2"><p>Anime-动画</p></td><td/></tr><tr><td><p>b</p></td><td colspan="2"><p>Comic–漫画</p></td><td/></tr><tr><td><p>c</p></td><td colspan="2"><p>Game–游戏</p></td><td/></tr><tr><td><p>d</p></td><td colspan="2"><p>Novel–小说</p></td><td/></tr><tr><td><p>e</p></td><td colspan="2"><p>Myself–原创</p></td><td/></tr><tr><td><p>f</p></td><td colspan="2"><p>Internet–来自网络</p></td><td/></tr><tr><td><p>g</p></td><td colspan="2"><p>Other–其他</p></td><td/></tr><tr><td><p>其他不存在参数</p></td><td colspan="2"><p>任意类型随机取得</p></td><td/></tr></table></body></html> + + 可以选择文本内容,使用了 https://hitokoto.cn/ 的服务 + @@ -298,8 +326,11 @@ - + + + 可以选择文本内容,使用了 https://hitokoto.cn/ 的服务 + All - 随机 @@ -348,18 +379,24 @@ - + - <html><head/><body><p>每个操作之间的间隔,填入浮点数,开始运行后显示实时EGPA</p></body></html> + + + + 每个操作之间的间隔,填入浮点数 等待时间 - + + + 每个操作之间的间隔,填入浮点数 + 4 @@ -381,6 +418,13 @@ + + + + 账号/密码登录 + + + diff --git a/ybqt.py b/ybqt.py index 74bcf1e..43758cd 100755 --- a/ybqt.py +++ b/ybqt.py @@ -1,228 +1,26 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'MainWindow - untitled.ui' -# -# Created by: PyQt5 UI code generator 5.9.2 -# -# WARNING! All changes made in this file will be lost! - -from PyQt5 import QtCore, QtGui, QtWidgets - -class Ui_mainWindow(object): - def setupUi(self, mainWindow): - mainWindow.setObjectName("mainWindow") - mainWindow.resize(501, 501) - mainWindow.setMinimumSize(QtCore.QSize(451, 301)) - mainWindow.setTabletTracking(False) - self.centralwidget = QtWidgets.QWidget(mainWindow) - self.centralwidget.setObjectName("centralwidget") - self.gridLayout_3 = QtWidgets.QGridLayout(self.centralwidget) - self.gridLayout_3.setObjectName("gridLayout_3") - self.plainTextEdit = QtWidgets.QPlainTextEdit(self.centralwidget) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.MinimumExpanding) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.plainTextEdit.sizePolicy().hasHeightForWidth()) - self.plainTextEdit.setSizePolicy(sizePolicy) - self.plainTextEdit.setReadOnly(True) - self.plainTextEdit.setPlainText("") - self.plainTextEdit.setCenterOnScroll(False) - self.plainTextEdit.setObjectName("plainTextEdit") - self.gridLayout_3.addWidget(self.plainTextEdit, 0, 1, 1, 1) - self.progressBar = QtWidgets.QProgressBar(self.centralwidget) - self.progressBar.setProperty("value", 0) - self.progressBar.setObjectName("progressBar") - self.gridLayout_3.addWidget(self.progressBar, 2, 0, 1, 2) - self.gridLayout_2 = QtWidgets.QGridLayout() - self.gridLayout_2.setObjectName("gridLayout_2") - self.voteformLayout = QtWidgets.QFormLayout() - self.voteformLayout.setObjectName("voteformLayout") - self.add_vote_countLabel = QtWidgets.QLabel(self.centralwidget) - self.add_vote_countLabel.setObjectName("add_vote_countLabel") - self.voteformLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.add_vote_countLabel) - self.add_vote_countSpinbox = QtWidgets.QSpinBox(self.centralwidget) - self.add_vote_countSpinbox.setProperty("value", 1) - self.add_vote_countSpinbox.setObjectName("add_vote_countSpinbox") - self.voteformLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.add_vote_countSpinbox) - self.vote_control_countLabel = QtWidgets.QLabel(self.centralwidget) - self.vote_control_countLabel.setObjectName("vote_control_countLabel") - self.voteformLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.vote_control_countLabel) - self.vote_control_countSpinbox = QtWidgets.QSpinBox(self.centralwidget) - self.vote_control_countSpinbox.setProperty("value", 2) - self.vote_control_countSpinbox.setObjectName("vote_control_countSpinbox") - self.voteformLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.vote_control_countSpinbox) - self.vote_reply_countLabel = QtWidgets.QLabel(self.centralwidget) - self.vote_reply_countLabel.setObjectName("vote_reply_countLabel") - self.voteformLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.vote_reply_countLabel) - self.vote_reply_countSpinbox = QtWidgets.QSpinBox(self.centralwidget) - self.vote_reply_countSpinbox.setProperty("value", 1) - self.vote_reply_countSpinbox.setObjectName("vote_reply_countSpinbox") - self.voteformLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.vote_reply_countSpinbox) - self.gridLayout_2.addLayout(self.voteformLayout, 0, 0, 1, 1) - self.choiceverticalLayout = QtWidgets.QVBoxLayout() - self.choiceverticalLayout.setObjectName("choiceverticalLayout") - self.voteCheckbox = QtWidgets.QCheckBox(self.centralwidget) - self.voteCheckbox.setIconSize(QtCore.QSize(10, 10)) - self.voteCheckbox.setChecked(True) - self.voteCheckbox.setObjectName("voteCheckbox") - self.choiceverticalLayout.addWidget(self.voteCheckbox, 0, QtCore.Qt.AlignHCenter) - self.vote_upCheckbox = QtWidgets.QCheckBox(self.centralwidget) - self.vote_upCheckbox.setTabletTracking(False) - self.vote_upCheckbox.setChecked(True) - self.vote_upCheckbox.setObjectName("vote_upCheckbox") - self.choiceverticalLayout.addWidget(self.vote_upCheckbox, 0, QtCore.Qt.AlignHCenter) - self.vote_replyCheckbox = QtWidgets.QCheckBox(self.centralwidget) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.vote_replyCheckbox.sizePolicy().hasHeightForWidth()) - self.vote_replyCheckbox.setSizePolicy(sizePolicy) - self.vote_replyCheckbox.setChecked(True) - self.vote_replyCheckbox.setObjectName("vote_replyCheckbox") - self.choiceverticalLayout.addWidget(self.vote_replyCheckbox, 0, QtCore.Qt.AlignHCenter) - self.line = QtWidgets.QFrame(self.centralwidget) - self.line.setFrameShape(QtWidgets.QFrame.HLine) - self.line.setFrameShadow(QtWidgets.QFrame.Sunken) - self.line.setObjectName("line") - self.choiceverticalLayout.addWidget(self.line) - self.topic_upCheckbox = QtWidgets.QCheckBox(self.centralwidget) - self.topic_upCheckbox.setChecked(True) - self.topic_upCheckbox.setObjectName("topic_upCheckbox") - self.choiceverticalLayout.addWidget(self.topic_upCheckbox, 0, QtCore.Qt.AlignHCenter) - self.topic_replyCheckbox = QtWidgets.QCheckBox(self.centralwidget) - self.topic_replyCheckbox.setChecked(True) - self.topic_replyCheckbox.setObjectName("topic_replyCheckbox") - self.choiceverticalLayout.addWidget(self.topic_replyCheckbox, 0, QtCore.Qt.AlignHCenter) - self.gridLayout_2.addLayout(self.choiceverticalLayout, 0, 2, 1, 1) - self.topicformLayout = QtWidgets.QFormLayout() - self.topicformLayout.setObjectName("topicformLayout") - self.add_topic_countLabel = QtWidgets.QLabel(self.centralwidget) - self.add_topic_countLabel.setObjectName("add_topic_countLabel") - self.topicformLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.add_topic_countLabel) - self.add_topic_countSpinbox = QtWidgets.QSpinBox(self.centralwidget) - self.add_topic_countSpinbox.setProperty("value", 1) - self.add_topic_countSpinbox.setObjectName("add_topic_countSpinbox") - self.topicformLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.add_topic_countSpinbox) - self.topic_control_countLabel = QtWidgets.QLabel(self.centralwidget) - self.topic_control_countLabel.setObjectName("topic_control_countLabel") - self.topicformLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.topic_control_countLabel) - self.topic_control_countSpinbox = QtWidgets.QSpinBox(self.centralwidget) - self.topic_control_countSpinbox.setProperty("value", 2) - self.topic_control_countSpinbox.setObjectName("topic_control_countSpinbox") - self.topicformLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.topic_control_countSpinbox) - self.topic_reply_countSpinbox = QtWidgets.QSpinBox(self.centralwidget) - self.topic_reply_countSpinbox.setProperty("value", 1) - self.topic_reply_countSpinbox.setObjectName("topic_reply_countSpinbox") - self.topicformLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.topic_reply_countSpinbox) - self.topic_reply_countLabel = QtWidgets.QLabel(self.centralwidget) - self.topic_reply_countLabel.setObjectName("topic_reply_countLabel") - self.topicformLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.topic_reply_countLabel) - self.gridLayout_2.addLayout(self.topicformLayout, 0, 1, 1, 1) - self.gridLayout_3.addLayout(self.gridLayout_2, 1, 0, 1, 2) - self.formLayout_4 = QtWidgets.QFormLayout() - self.formLayout_4.setObjectName("formLayout_4") - self.usernameLabel = QtWidgets.QLabel(self.centralwidget) - self.usernameLabel.setWhatsThis("") - self.usernameLabel.setObjectName("usernameLabel") - self.formLayout_4.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.usernameLabel) - self.usernameLineedit = QtWidgets.QLineEdit(self.centralwidget) - self.usernameLineedit.setText("") - self.usernameLineedit.setObjectName("usernameLineedit") - self.formLayout_4.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.usernameLineedit) - self.passwordLabel = QtWidgets.QLabel(self.centralwidget) - self.passwordLabel.setWhatsThis("") - self.passwordLabel.setObjectName("passwordLabel") - self.formLayout_4.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.passwordLabel) - self.passwordLineedit = QtWidgets.QLineEdit(self.centralwidget) - self.passwordLineedit.setText("") - self.passwordLineedit.setObjectName("passwordLineedit") - self.formLayout_4.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.passwordLineedit) - self.catLabel = QtWidgets.QLabel(self.centralwidget) - self.catLabel.setWhatsThis("") - self.catLabel.setObjectName("catLabel") - self.formLayout_4.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.catLabel) - self.comboBox = QtWidgets.QComboBox(self.centralwidget) - self.comboBox.setObjectName("comboBox") - self.comboBox.addItem("") - self.comboBox.addItem("") - self.comboBox.addItem("") - self.comboBox.addItem("") - self.comboBox.addItem("") - self.comboBox.addItem("") - self.comboBox.addItem("") - self.comboBox.addItem("") - self.formLayout_4.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.comboBox) - self.waitLabel = QtWidgets.QLabel(self.centralwidget) - self.waitLabel.setObjectName("waitLabel") - self.formLayout_4.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.waitLabel) - self.doubleSpinBox = QtWidgets.QDoubleSpinBox(self.centralwidget) - self.doubleSpinBox.setDecimals(4) - self.doubleSpinBox.setMinimum(1.0) - self.doubleSpinBox.setSingleStep(0.2) - self.doubleSpinBox.setProperty("value", 3.6) - self.doubleSpinBox.setObjectName("doubleSpinBox") - self.formLayout_4.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.doubleSpinBox) - self.lauchButton = QtWidgets.QPushButton(self.centralwidget) - self.lauchButton.setObjectName("lauchButton") - self.formLayout_4.setWidget(4, QtWidgets.QFormLayout.SpanningRole, self.lauchButton) - self.gridLayout_3.addLayout(self.formLayout_4, 0, 0, 1, 1) - mainWindow.setCentralWidget(self.centralwidget) - self.statusbar = QtWidgets.QStatusBar(mainWindow) - self.statusbar.setObjectName("statusbar") - mainWindow.setStatusBar(self.statusbar) - - self.retranslateUi(mainWindow) - self.comboBox.setCurrentIndex(7) - QtCore.QMetaObject.connectSlotsByName(mainWindow) - - def retranslateUi(self, mainWindow): - _translate = QtCore.QCoreApplication.translate - mainWindow.setWindowTitle(_translate("mainWindow", "易班 EGPA")) - self.plainTextEdit.setToolTip(_translate("mainWindow", "

程序输出日志,如出错请咨询开发者

")) - self.add_vote_countLabel.setToolTip(_translate("mainWindow", "

发起投票数量,如不需要请改为0关闭自动发起投票

")) - self.add_vote_countLabel.setText(_translate("mainWindow", "发起投票数量")) - self.vote_control_countLabel.setToolTip(_translate("mainWindow", "

操作控制投票帖子数量,如不需要请改为0关闭操作控制投票帖子

")) - self.vote_control_countLabel.setText(_translate("mainWindow", "投票互动数量")) - self.vote_reply_countLabel.setToolTip(_translate("mainWindow", "

回复投票次数,如不需要请改为0关闭回复投票

")) - self.vote_reply_countLabel.setText(_translate("mainWindow", "回复投票次数")) - self.voteCheckbox.setText(_translate("mainWindow", "开启参与投票")) - self.vote_upCheckbox.setText(_translate("mainWindow", "开启投票点赞")) - self.vote_replyCheckbox.setText(_translate("mainWindow", "开启回复投票")) - self.topic_upCheckbox.setText(_translate("mainWindow", "开启话题点赞")) - self.topic_replyCheckbox.setText(_translate("mainWindow", "开启回复话题")) - self.add_topic_countLabel.setToolTip(_translate("mainWindow", "

发起话题数量,如不需要请改为0关闭自动发起话题

")) - self.add_topic_countLabel.setText(_translate("mainWindow", "发起话题数量")) - self.topic_control_countLabel.setToolTip(_translate("mainWindow", "

操作控制话题帖子数量,如不需要请改为0关闭操作控制话题帖子

")) - self.topic_control_countLabel.setText(_translate("mainWindow", "话题互动数量")) - self.topic_reply_countLabel.setToolTip(_translate("mainWindow", "

回复话题次数,如不需要请改为0关闭回复话题

")) - self.topic_reply_countLabel.setText(_translate("mainWindow", "回复话题次数")) - self.usernameLabel.setToolTip(_translate("mainWindow", "

用户名

")) - self.usernameLabel.setText(_translate("mainWindow", "账号/手机号")) - self.passwordLabel.setToolTip(_translate("mainWindow", "

密码

")) - self.passwordLabel.setText(_translate("mainWindow", "密码")) - self.catLabel.setToolTip(_translate("mainWindow", "

可以选择文本内容,使用了 https://hitokoto.cn/ 的服务

提交不同的参数代表不同的类别,具体:

a

Anime-动画

b

Comic–漫画

c

Game–游戏

d

Novel–小说

e

Myself–原创

f

Internet–来自网络

g

Other–其他

其他不存在参数

任意类型随机取得

")) - self.catLabel.setText(_translate("mainWindow", "使用的文本内容")) - self.comboBox.setCurrentText(_translate("mainWindow", "All - 随机")) - self.comboBox.setItemText(0, _translate("mainWindow", "Anime - 动画")) - self.comboBox.setItemText(1, _translate("mainWindow", "Comic – 漫画")) - self.comboBox.setItemText(2, _translate("mainWindow", "Game – 游戏")) - self.comboBox.setItemText(3, _translate("mainWindow", "Novel – 小说")) - self.comboBox.setItemText(4, _translate("mainWindow", "Myself – 原创")) - self.comboBox.setItemText(5, _translate("mainWindow", "Internet – 来自网络")) - self.comboBox.setItemText(6, _translate("mainWindow", "Other – 其他")) - self.comboBox.setItemText(7, _translate("mainWindow", "All - 随机")) - self.waitLabel.setToolTip(_translate("mainWindow", "

每个操作之间的间隔,填入浮点数,开始运行后显示实时EGPA

")) - self.waitLabel.setText(_translate("mainWindow", "等待时间")) - self.lauchButton.setText(_translate("mainWindow", "启动")) - +import os +import sys +import re +import json +import time +import getopt +import random +import requests +import traceback +import ybvote +import ybtopic +from yblogin import BASEURL, getInfo +from PyQt5 import QtCore, QtGui, QtWidgets, QtWebEngineWidgets, QtNetwork +from ybqtmainui import Ui_mainWindow +from ybqtloginui import Ui_LoginWindow class MyThread(QtCore.QThread): - def __init__(self, username, password, captcha, add_vote_count, vote_control_count, vote_reply_count, add_topic_count, topic_control_count, topic_reply_count, vote, vote_up, vote_reply, topic_up, topic_reply, cat, waitime): + def __init__(self, token, captcha, add_vote_count, vote_control_count, vote_reply_count, add_topic_count, topic_control_count, topic_reply_count, vote, vote_up, vote_reply, topic_up, topic_reply, cat, waitime): super(MyThread, self).__init__() - self.username = username - self.password = password + self.token = dict(yiban_user_token=token) self.add_vote_count = add_vote_count self.vote_control_count = vote_control_count self.vote_reply_count = vote_reply_count @@ -275,58 +73,19 @@ def fprint(self, string, dlevel=0, num=0): number = "" return dbglevel.get(dlevel) + string + number - def getUserToken(self, user, passwd, captcha=None): - LOGIN_PAGE = BASEURL+'login' - LOGIN_URL = BASEURL+'login/doLoginAjax' - LoginPage = r.get(LOGIN_PAGE, timeout=10) - RsaKey = re.search(r'data-keys=\'([\s\S]*?)\'',LoginPage.text).group(1) - KeysTime = re.search(r'data-keys-time=\'(.*?)\'',LoginPage.text).group(1) - Password = rsaEncrypt(passwd, RsaKey) - Captcha = r.get(BASEURL+'captcha/index?'+KeysTime[:-3]) #<-- Captch Image - - ##Design a img place - ##And send emit to show it - - - ##Or get it once App open - - data = { - 'account': user, - 'password': Password, - 'captcha': captcha, - 'keysTime': KeysTime, - 'is_rember': 1 - } - - header = { - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.18 Safari/537.36', - 'X-Requested-With': 'XMLHttpRequest' - } - - LoginURL = r.post(LOGIN_URL, headers=header, data=data, timeout=10) - try: - token = LoginURL.cookies['yiban_user_token'] # -> KeyError Exception - except: - self.getUserToken(self.username, self.password) - return token - def login(self): try: - self.sig.emit("账号: " + self.username) - self.sig.emit("密码: " + self.password) - yiban_user_token = self.getUserToken(self.username, self.password) - self.sig.emit("易班 Token: " + yiban_user_token) - self.token = dict(yiban_user_token=yiban_user_token) + self.sig.emit(self.fprint("易班 Token: " + self.token['yiban_user_token'], dlevel=1)) self.info = getInfo(self.token) self.group_id = self.info["group_id"] self.puid = self.info["puid"] self.channel_id = self.info["channel_id"] self.actor_id = self.info["actor_id"] self.nick = self.info["nick"] - self.sig.emit(self.fprint("登陆成功", dlevel=1)) + self.sig.emit(self.fprint(self.nick + ": 登陆成功", dlevel=1)) return 0 except: - self.sig.emit(self.fprint("无法连接服务器或密码错误,先试试在 www.yiban.cn 登录一下吧!" + traceback.format_exc(), dlevel=3)) + self.sig.emit(self.fprint("无法连接服务器或 Token 错误,请重新使用账号/密码登录。" + traceback.format_exc(), dlevel=3)) return 2 finally: self.wait() @@ -508,25 +267,24 @@ def run(self): r.close() -class MyWindow(QtWidgets.QMainWindow, Ui_mainWindow): +class MainWindow(QtWidgets.QMainWindow, Ui_mainWindow): def __init__(self): - super(MyWindow, self).__init__() + super(MainWindow, self).__init__() self.setupUi(self) self.lauchButton.released.connect(self.DisableButton) + self.loginButton.released.connect(self.showLogin) QtCore.QCoreApplication.setOrganizationName("simonsmh") QtCore.QCoreApplication.setOrganizationDomain("simonsmh.cc") QtCore.QCoreApplication.setApplicationName("ybqt") self.settings = QtCore.QSettings(os.getcwd() + "/ybqt.ini", QtCore.QSettings.IniFormat) self.settings.setFallbacksEnabled(False) self.plainTextEdit.appendPlainText("Made by Simon Shi") - self.plainTextEdit.appendPlainText("在左侧填账号密码,点击启动即可刷EGPA。") - self.plainTextEdit.appendPlainText("如提示登陆失败,请先在 www.yiban.cn 登陆一次后重试。") + self.plainTextEdit.appendPlainText("在左侧使用账号/密码登录,填入 Token 后,点击启动即可刷EGPA。") if os.path.exists(os.getcwd() + "/ybqt.ini"): self.resize(self.settings.value('size', QtCore.QSize(501, 501))) self.move(self.settings.value('pos', QtCore.QPoint(0, 0))) - self.usernameLineedit.setText(self.settings.value("username", type=str)) - self.passwordLineedit.setText(self.settings.value("password", type=str)) + self.tokenLineedit.setText(self.settings.value("token", type=str)) self.add_vote_countSpinbox.setValue(self.settings.value("add_vote_count", 0, type=int)) self.vote_control_countSpinbox.setValue(self.settings.value("vote_control_count", 0, type=int)) self.vote_reply_countSpinbox.setValue(self.settings.value("vote_reply_count", 0, type=int)) @@ -553,8 +311,7 @@ def DisableButton(self): self.plainTextEdit.appendPlainText("---运行开始---") self.lauchButton.setText("停止") self.lauchButton.setDisabled(True) - self.usernameLineedit.setDisabled(True) - self.passwordLineedit.setDisabled(True) + self.tokenLineedit.setDisabled(True) self.add_vote_countSpinbox.setDisabled(True) self.vote_control_countSpinbox.setDisabled(True) self.vote_reply_countSpinbox.setDisabled(True) @@ -571,8 +328,7 @@ def DisableButton(self): self.progressBar.setValue(0) self.QsettingHook() self.mythread = MyThread( - self.settings.value("username", type=str), - self.settings.value("password", type=str), + self.settings.value("token", type=str), self.settings.value("captcha", type=str), self.settings.value("add_vote_count", 0, type=int), self.settings.value("vote_control_count", 0, type=int), @@ -602,8 +358,7 @@ def EnableButton(self): self.plainTextEdit.appendPlainText("---运行终止---") self.lauchButton.setText("启动") self.lauchButton.setDisabled(True) - self.usernameLineedit.setEnabled(True) - self.passwordLineedit.setEnabled(True) + self.tokenLineedit.setEnabled(True) self.add_vote_countSpinbox.setEnabled(True) self.vote_control_countSpinbox.setEnabled(True) self.vote_reply_countSpinbox.setEnabled(True) @@ -625,8 +380,7 @@ def QsettingHook(self): self.settings.setValue("WARNNING", "DO NOT EDIT THIS FILE.") self.settings.setValue("pos", self.pos()) self.settings.setValue("size", self.size()) - self.settings.setValue("username", self.usernameLineedit.text()) - self.settings.setValue("password", self.passwordLineedit.text()) + self.settings.setValue("token", self.tokenLineedit.text()) self.settings.setValue("add_vote_count", self.add_vote_countSpinbox.text()) self.settings.setValue("vote_control_count", self.vote_control_countSpinbox.text()) self.settings.setValue("vote_reply_count", self.vote_reply_countSpinbox.text()) @@ -647,7 +401,7 @@ def StopThread(self): self.mythread.terminate() def EpgaShowup(self, string): - self.waitLabel.setText(string) + self.setWindowTitle("易班"+string) def Progress(self, integer): self.progressBar.setValue(integer) @@ -659,21 +413,42 @@ def closeEvent(self, ev): self.QsettingHook() ev.accept() + def showLogin(self): + loginw.show() + +class LoginWindow(QtWidgets.QMainWindow, Ui_LoginWindow): + + def __init__(self): + super(LoginWindow, self).__init__() + self.setupUi(self) + self.resetWebview() + + def onCookieAdded(self, cookie): + data = {bytearray(QtNetwork.QNetworkCookie(cookie).name()).decode(): bytearray(QtNetwork.QNetworkCookie(cookie).value()).decode()} + self.cookies.update(data) + if 'yiban_user_token' in self.cookies: + mainw.tokenLineedit.setText(loginw.cookies['yiban_user_token']) + self.resetWebview() + loginw.hide() + + def resetWebview(self): + profile = QtWebEngineWidgets.QWebEngineProfile("storage", self.webEngineView) + cookie_store = profile.cookieStore() + cookie_store.cookieAdded.connect(self.onCookieAdded) + self.cookies = {} + webpage = QtWebEngineWidgets.QWebEnginePage(profile, self.webEngineView) + self.webEngineView.setPage(webpage) + self.webEngineView.load(QtCore.QUrl("https://www.yiban.cn/login")) + + def closeEvent(self, ev): + self.resetWebview() + ev.accept() + if __name__ == "__main__": - import os - import sys - import re - import json - import time - import getopt - import random - import requests - import traceback - import ybvote - import ybtopic - from yblogin import BASEURL, rsaEncrypt, getInfo + r = requests.Session() app = QtWidgets.QApplication(sys.argv) - widget = MyWindow() - widget.show() + mainw = MainWindow() + loginw = LoginWindow() + mainw.show() sys.exit(app.exec_()) diff --git a/ybqtloginui.py b/ybqtloginui.py new file mode 100644 index 0000000..f95cf91 --- /dev/null +++ b/ybqtloginui.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'ui/login.ui' +# +# Created by: PyQt5 UI code generator 5.10 +# +# WARNING! All changes made in this file will be lost! + +from PyQt5 import QtCore, QtGui, QtWidgets + +class Ui_LoginWindow(object): + def setupUi(self, LoginWindow): + LoginWindow.setObjectName("LoginWindow") + LoginWindow.resize(501, 425) + self.centralwidget = QtWidgets.QWidget(LoginWindow) + self.centralwidget.setObjectName("centralwidget") + self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) + self.gridLayout.setObjectName("gridLayout") + self.webEngineView = QtWebEngineWidgets.QWebEngineView(self.centralwidget) + self.webEngineView.setUrl(QtCore.QUrl("https://www.yiban.cn/")) + self.webEngineView.setObjectName("webEngineView") + self.gridLayout.addWidget(self.webEngineView, 0, 0, 1, 1) + LoginWindow.setCentralWidget(self.centralwidget) + + self.retranslateUi(LoginWindow) + QtCore.QMetaObject.connectSlotsByName(LoginWindow) + + def retranslateUi(self, LoginWindow): + _translate = QtCore.QCoreApplication.translate + LoginWindow.setWindowTitle(_translate("LoginWindow", "登录易班")) + +from PyQt5 import QtWebEngineWidgets diff --git a/ybqtmainui.py b/ybqtmainui.py new file mode 100644 index 0000000..d908330 --- /dev/null +++ b/ybqtmainui.py @@ -0,0 +1,230 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'ui/main.ui' +# +# Created by: PyQt5 UI code generator 5.10 +# +# WARNING! All changes made in this file will be lost! + +from PyQt5 import QtCore, QtGui, QtWidgets + +class Ui_mainWindow(object): + def setupUi(self, mainWindow): + mainWindow.setObjectName("mainWindow") + mainWindow.resize(501, 425) + mainWindow.setMinimumSize(QtCore.QSize(451, 301)) + mainWindow.setTabletTracking(False) + self.centralwidget = QtWidgets.QWidget(mainWindow) + self.centralwidget.setObjectName("centralwidget") + self.gridLayout_3 = QtWidgets.QGridLayout(self.centralwidget) + self.gridLayout_3.setObjectName("gridLayout_3") + self.plainTextEdit = QtWidgets.QPlainTextEdit(self.centralwidget) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.MinimumExpanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.plainTextEdit.sizePolicy().hasHeightForWidth()) + self.plainTextEdit.setSizePolicy(sizePolicy) + self.plainTextEdit.setToolTip("") + self.plainTextEdit.setReadOnly(True) + self.plainTextEdit.setPlainText("") + self.plainTextEdit.setCenterOnScroll(False) + self.plainTextEdit.setObjectName("plainTextEdit") + self.gridLayout_3.addWidget(self.plainTextEdit, 0, 1, 1, 1) + self.gridLayout_2 = QtWidgets.QGridLayout() + self.gridLayout_2.setObjectName("gridLayout_2") + self.voteformLayout = QtWidgets.QFormLayout() + self.voteformLayout.setObjectName("voteformLayout") + self.add_vote_countLabel = QtWidgets.QLabel(self.centralwidget) + self.add_vote_countLabel.setToolTip("") + self.add_vote_countLabel.setObjectName("add_vote_countLabel") + self.voteformLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.add_vote_countLabel) + self.add_vote_countSpinbox = QtWidgets.QSpinBox(self.centralwidget) + self.add_vote_countSpinbox.setProperty("value", 1) + self.add_vote_countSpinbox.setObjectName("add_vote_countSpinbox") + self.voteformLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.add_vote_countSpinbox) + self.vote_control_countLabel = QtWidgets.QLabel(self.centralwidget) + self.vote_control_countLabel.setToolTip("") + self.vote_control_countLabel.setObjectName("vote_control_countLabel") + self.voteformLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.vote_control_countLabel) + self.vote_control_countSpinbox = QtWidgets.QSpinBox(self.centralwidget) + self.vote_control_countSpinbox.setProperty("value", 2) + self.vote_control_countSpinbox.setObjectName("vote_control_countSpinbox") + self.voteformLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.vote_control_countSpinbox) + self.vote_reply_countLabel = QtWidgets.QLabel(self.centralwidget) + self.vote_reply_countLabel.setToolTip("") + self.vote_reply_countLabel.setObjectName("vote_reply_countLabel") + self.voteformLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.vote_reply_countLabel) + self.vote_reply_countSpinbox = QtWidgets.QSpinBox(self.centralwidget) + self.vote_reply_countSpinbox.setProperty("value", 1) + self.vote_reply_countSpinbox.setObjectName("vote_reply_countSpinbox") + self.voteformLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.vote_reply_countSpinbox) + self.gridLayout_2.addLayout(self.voteformLayout, 0, 0, 1, 1) + self.choiceverticalLayout = QtWidgets.QVBoxLayout() + self.choiceverticalLayout.setObjectName("choiceverticalLayout") + self.voteCheckbox = QtWidgets.QCheckBox(self.centralwidget) + self.voteCheckbox.setIconSize(QtCore.QSize(10, 10)) + self.voteCheckbox.setChecked(True) + self.voteCheckbox.setObjectName("voteCheckbox") + self.choiceverticalLayout.addWidget(self.voteCheckbox, 0, QtCore.Qt.AlignHCenter) + self.vote_upCheckbox = QtWidgets.QCheckBox(self.centralwidget) + self.vote_upCheckbox.setTabletTracking(False) + self.vote_upCheckbox.setChecked(True) + self.vote_upCheckbox.setObjectName("vote_upCheckbox") + self.choiceverticalLayout.addWidget(self.vote_upCheckbox, 0, QtCore.Qt.AlignHCenter) + self.vote_replyCheckbox = QtWidgets.QCheckBox(self.centralwidget) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.vote_replyCheckbox.sizePolicy().hasHeightForWidth()) + self.vote_replyCheckbox.setSizePolicy(sizePolicy) + self.vote_replyCheckbox.setChecked(True) + self.vote_replyCheckbox.setObjectName("vote_replyCheckbox") + self.choiceverticalLayout.addWidget(self.vote_replyCheckbox, 0, QtCore.Qt.AlignHCenter) + self.line = QtWidgets.QFrame(self.centralwidget) + self.line.setFrameShape(QtWidgets.QFrame.HLine) + self.line.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line.setObjectName("line") + self.choiceverticalLayout.addWidget(self.line) + self.topic_upCheckbox = QtWidgets.QCheckBox(self.centralwidget) + self.topic_upCheckbox.setChecked(True) + self.topic_upCheckbox.setObjectName("topic_upCheckbox") + self.choiceverticalLayout.addWidget(self.topic_upCheckbox, 0, QtCore.Qt.AlignHCenter) + self.topic_replyCheckbox = QtWidgets.QCheckBox(self.centralwidget) + self.topic_replyCheckbox.setChecked(True) + self.topic_replyCheckbox.setObjectName("topic_replyCheckbox") + self.choiceverticalLayout.addWidget(self.topic_replyCheckbox, 0, QtCore.Qt.AlignHCenter) + self.gridLayout_2.addLayout(self.choiceverticalLayout, 0, 2, 1, 1) + self.topicformLayout = QtWidgets.QFormLayout() + self.topicformLayout.setObjectName("topicformLayout") + self.add_topic_countLabel = QtWidgets.QLabel(self.centralwidget) + self.add_topic_countLabel.setToolTip("") + self.add_topic_countLabel.setObjectName("add_topic_countLabel") + self.topicformLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.add_topic_countLabel) + self.add_topic_countSpinbox = QtWidgets.QSpinBox(self.centralwidget) + self.add_topic_countSpinbox.setProperty("value", 1) + self.add_topic_countSpinbox.setObjectName("add_topic_countSpinbox") + self.topicformLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.add_topic_countSpinbox) + self.topic_control_countLabel = QtWidgets.QLabel(self.centralwidget) + self.topic_control_countLabel.setToolTip("") + self.topic_control_countLabel.setObjectName("topic_control_countLabel") + self.topicformLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.topic_control_countLabel) + self.topic_control_countSpinbox = QtWidgets.QSpinBox(self.centralwidget) + self.topic_control_countSpinbox.setProperty("value", 2) + self.topic_control_countSpinbox.setObjectName("topic_control_countSpinbox") + self.topicformLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.topic_control_countSpinbox) + self.topic_reply_countSpinbox = QtWidgets.QSpinBox(self.centralwidget) + self.topic_reply_countSpinbox.setProperty("value", 1) + self.topic_reply_countSpinbox.setObjectName("topic_reply_countSpinbox") + self.topicformLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.topic_reply_countSpinbox) + self.topic_reply_countLabel = QtWidgets.QLabel(self.centralwidget) + self.topic_reply_countLabel.setToolTip("") + self.topic_reply_countLabel.setObjectName("topic_reply_countLabel") + self.topicformLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.topic_reply_countLabel) + self.gridLayout_2.addLayout(self.topicformLayout, 0, 1, 1, 1) + self.gridLayout_3.addLayout(self.gridLayout_2, 1, 0, 1, 2) + self.progressBar = QtWidgets.QProgressBar(self.centralwidget) + self.progressBar.setProperty("value", 0) + self.progressBar.setObjectName("progressBar") + self.gridLayout_3.addWidget(self.progressBar, 2, 0, 1, 2) + self.formLayout_4 = QtWidgets.QFormLayout() + self.formLayout_4.setObjectName("formLayout_4") + self.tokenLabel = QtWidgets.QLabel(self.centralwidget) + self.tokenLabel.setToolTip("") + self.tokenLabel.setWhatsThis("") + self.tokenLabel.setObjectName("tokenLabel") + self.formLayout_4.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.tokenLabel) + self.tokenLineedit = QtWidgets.QLineEdit(self.centralwidget) + self.tokenLineedit.setText("") + self.tokenLineedit.setObjectName("tokenLineedit") + self.formLayout_4.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.tokenLineedit) + self.catLabel = QtWidgets.QLabel(self.centralwidget) + self.catLabel.setWhatsThis("") + self.catLabel.setObjectName("catLabel") + self.formLayout_4.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.catLabel) + self.comboBox = QtWidgets.QComboBox(self.centralwidget) + self.comboBox.setObjectName("comboBox") + self.comboBox.addItem("") + self.comboBox.addItem("") + self.comboBox.addItem("") + self.comboBox.addItem("") + self.comboBox.addItem("") + self.comboBox.addItem("") + self.comboBox.addItem("") + self.comboBox.addItem("") + self.formLayout_4.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.comboBox) + self.waitLabel = QtWidgets.QLabel(self.centralwidget) + self.waitLabel.setToolTip("") + self.waitLabel.setObjectName("waitLabel") + self.formLayout_4.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.waitLabel) + self.doubleSpinBox = QtWidgets.QDoubleSpinBox(self.centralwidget) + self.doubleSpinBox.setDecimals(4) + self.doubleSpinBox.setMinimum(1.0) + self.doubleSpinBox.setSingleStep(0.2) + self.doubleSpinBox.setProperty("value", 3.6) + self.doubleSpinBox.setObjectName("doubleSpinBox") + self.formLayout_4.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.doubleSpinBox) + self.lauchButton = QtWidgets.QPushButton(self.centralwidget) + self.lauchButton.setObjectName("lauchButton") + self.formLayout_4.setWidget(4, QtWidgets.QFormLayout.SpanningRole, self.lauchButton) + self.loginButton = QtWidgets.QPushButton(self.centralwidget) + self.loginButton.setObjectName("loginButton") + self.formLayout_4.setWidget(3, QtWidgets.QFormLayout.SpanningRole, self.loginButton) + self.gridLayout_3.addLayout(self.formLayout_4, 0, 0, 1, 1) + mainWindow.setCentralWidget(self.centralwidget) + self.statusbar = QtWidgets.QStatusBar(mainWindow) + self.statusbar.setObjectName("statusbar") + mainWindow.setStatusBar(self.statusbar) + + self.retranslateUi(mainWindow) + self.comboBox.setCurrentIndex(7) + QtCore.QMetaObject.connectSlotsByName(mainWindow) + + def retranslateUi(self, mainWindow): + _translate = QtCore.QCoreApplication.translate + mainWindow.setWindowTitle(_translate("mainWindow", "易班 EGPA")) + self.plainTextEdit.setStatusTip(_translate("mainWindow", "程序输出日志,如出错请咨询开发者")) + self.add_vote_countLabel.setStatusTip(_translate("mainWindow", "发起投票数量,如不需要请改为0关闭自动发起投票")) + self.add_vote_countLabel.setText(_translate("mainWindow", "发起投票数量")) + self.add_vote_countSpinbox.setStatusTip(_translate("mainWindow", "发起投票数量,如不需要请改为0关闭自动发起投票")) + self.vote_control_countLabel.setStatusTip(_translate("mainWindow", "操作控制投票帖子数量,如不需要请改为0关闭操作控制投票帖子")) + self.vote_control_countLabel.setText(_translate("mainWindow", "投票互动数量")) + self.vote_control_countSpinbox.setStatusTip(_translate("mainWindow", "操作控制投票帖子数量,如不需要请改为0关闭操作控制投票帖子")) + self.vote_reply_countLabel.setStatusTip(_translate("mainWindow", "回复投票次数,如不需要请改为0关闭回复投票")) + self.vote_reply_countLabel.setText(_translate("mainWindow", "回复投票次数")) + self.vote_reply_countSpinbox.setStatusTip(_translate("mainWindow", "回复投票次数,如不需要请改为0关闭回复投票")) + self.voteCheckbox.setText(_translate("mainWindow", "开启参与投票")) + self.vote_upCheckbox.setText(_translate("mainWindow", "开启投票点赞")) + self.vote_replyCheckbox.setText(_translate("mainWindow", "开启回复投票")) + self.topic_upCheckbox.setText(_translate("mainWindow", "开启话题点赞")) + self.topic_replyCheckbox.setText(_translate("mainWindow", "开启回复话题")) + self.add_topic_countLabel.setStatusTip(_translate("mainWindow", "发起话题数量,如不需要请改为0关闭自动发起话题")) + self.add_topic_countLabel.setText(_translate("mainWindow", "发起话题数量")) + self.add_topic_countSpinbox.setStatusTip(_translate("mainWindow", "发起话题数量,如不需要请改为0关闭自动发起话题")) + self.topic_control_countLabel.setStatusTip(_translate("mainWindow", "操作控制话题帖子数量,如不需要请改为0关闭操作控制话题帖子")) + self.topic_control_countLabel.setText(_translate("mainWindow", "话题互动数量")) + self.topic_control_countSpinbox.setStatusTip(_translate("mainWindow", "操作控制话题帖子数量,如不需要请改为0关闭操作控制话题帖子")) + self.topic_reply_countSpinbox.setStatusTip(_translate("mainWindow", "回复话题次数,如不需要请改为0关闭回复话题")) + self.topic_reply_countLabel.setStatusTip(_translate("mainWindow", "回复话题次数,如不需要请改为0关闭回复话题")) + self.topic_reply_countLabel.setText(_translate("mainWindow", "回复话题次数")) + self.tokenLabel.setStatusTip(_translate("mainWindow", "Token是易班账号密码验证的优秀替代方式,可用于访问易班服务,重新登录将重置Token")) + self.tokenLabel.setText(_translate("mainWindow", "Token")) + self.tokenLineedit.setStatusTip(_translate("mainWindow", "Token是易班账号密码验证的优秀替代方式,可用于访问易班服务,重新登录将重置Token")) + self.catLabel.setToolTip(_translate("mainWindow", "

可以选择文本内容,使用了 https://hitokoto.cn/ 的服务

提交不同的参数代表不同的类别,具体:

a

Anime-动画

b

Comic–漫画

c

Game–游戏

d

Novel–小说

e

Myself–原创

f

Internet–来自网络

g

Other–其他

其他不存在参数

任意类型随机取得

")) + self.catLabel.setStatusTip(_translate("mainWindow", "可以选择文本内容,使用了 https://hitokoto.cn/ 的服务")) + self.catLabel.setText(_translate("mainWindow", "使用的文本内容")) + self.comboBox.setStatusTip(_translate("mainWindow", "可以选择文本内容,使用了 https://hitokoto.cn/ 的服务")) + self.comboBox.setCurrentText(_translate("mainWindow", "All - 随机")) + self.comboBox.setItemText(0, _translate("mainWindow", "Anime - 动画")) + self.comboBox.setItemText(1, _translate("mainWindow", "Comic – 漫画")) + self.comboBox.setItemText(2, _translate("mainWindow", "Game – 游戏")) + self.comboBox.setItemText(3, _translate("mainWindow", "Novel – 小说")) + self.comboBox.setItemText(4, _translate("mainWindow", "Myself – 原创")) + self.comboBox.setItemText(5, _translate("mainWindow", "Internet – 来自网络")) + self.comboBox.setItemText(6, _translate("mainWindow", "Other – 其他")) + self.comboBox.setItemText(7, _translate("mainWindow", "All - 随机")) + self.waitLabel.setStatusTip(_translate("mainWindow", "每个操作之间的间隔,填入浮点数")) + self.waitLabel.setText(_translate("mainWindow", "等待时间")) + self.doubleSpinBox.setStatusTip(_translate("mainWindow", "每个操作之间的间隔,填入浮点数")) + self.lauchButton.setText(_translate("mainWindow", "启动")) + self.loginButton.setText(_translate("mainWindow", "账号/密码登录")) +