def main(self): sleep(self.get_sleep(6, 10)) # 点击搜索按钮 self.find_element_by_id('com.tencent.mm:id/f8y').click() sleep(self.get_sleep(3, 5)) # full_dir = FilePathUtil.get_full_dir("wxfriend", "excel", "手机号列表.xls") full_dir = WxConfig.getPhoneExcel() if not full_dir: Logger.println(f"【main(请先配置手机号列表文件】") return array = excel_util.excel2array(full_dir) length = len(array) if not array: Logger.println(f"【main(请先配置手机号列表文件的sheet_name为手机号列表】") return # array = [{'手机': '18612205027'}] # array = [{'手机': '18612205027'}, {'手机': '15821902923'}] start_index = 0 for index, element in enumerate(array): if str(int(element["手机"])) == self.last_record_phone: start_index = index Logger.println( f"【main找到上次添加的手机位置={start_index + 1}={self.last_record_phone}】" ) break count = 0 if start_index + 1 > length: Logger.println(f"【已经是最后一条了】") return for index, item in enumerate(array[start_index + 1:length]): if wx_stop.stopFlag: break phone = str(int(item['手机'])) Logger.println(f"【main({index}).开始添加手机={phone}】") Logger.println(f"【main开始执行第{count}个任务】") if self.max_count > 1 and count > 1 and (count % self.max_count) == 0: start_time = int(time()) sleeptime = self.addfriend_inte_seconds Logger.println( f"【main(暂时停止任务开启休闲模式).{sleeptime}秒后执行第={count}个任务】") while True: rdsleep = self.get_sleep(5, 6) by_id = self.find_element_by_id('com.tencent.mm:id/bhn') if rdsleep == 5: if by_id: by_id.send_keys(f'已经休眠{int(time()) - start_time}s') else: if by_id: by_id.send_keys('') sleep(rdsleep) if int(time()) - start_time > sleeptime: break Logger.println(f"【main(退出休闲模式)继续执行第={count}个任务】") if wx_stop.stopFlag: break if self.add(phone): break count += 1 Logger.println(f"【main(花费时间).total_count={self.total_count}s】")
def init_ui(self): self.setMinimumSize(960, 760) self.main_widget = QtWidgets.QWidget() # 创建窗口主部件 self.main_layout = QtWidgets.QGridLayout() # 创建主部件的网格布局 self.main_widget.setLayout(self.main_layout) # 设置窗口主部件布局为网格布局 self.config = MonitorConfig() # 配置服务器地址 configAction = QAction(QIcon('exit.png'), '配置', self) configAction.setShortcut('Ctrl+Alt+S') configAction.setStatusTip('配置') configAction.triggered.connect(self.editConfigDialog) # 配置服务器地址 picAction = QAction(QIcon('exit.png'), '打开图片文件夹', self) picAction.setShortcut('Ctrl+O') picAction.setStatusTip('图片文件夹') picAction.triggered.connect(self.openPicDir) downloadAction = QAction(QIcon('exit.png'), '下载最新版本', self) downloadAction.setStatusTip('下载最新版本') downloadAction.triggered.connect(self.download) # exportAction = QAction(QIcon('exit.png'), '从"描述"字段中提取手机号', self) # exportAction.setStatusTip('从"描述"字段中提取手机号') # exportAction.triggered.connect(self.exportPhone) # 底部状态栏 self.statusBar().showMessage('状态栏') # 顶部菜单栏 menubar = self.menuBar() menubar.setNativeMenuBar(False) fileMenu = menubar.addMenu('配置') fileMenu.addAction(configAction) # exMenu = menubar.addMenu('提取手机号') # exMenu.addAction(exportAction) picMenu = menubar.addMenu('打开图片文件夹') picMenu.addAction(picAction) downloadMenu = menubar.addMenu('版本更新') downloadMenu.addAction(downloadAction) openAction = QAction(QIcon(IconConfig.SETTING_DIR), '打开手机号配置目录', self) openAction.setShortcut('Ctrl+O') openAction.triggered.connect(self.openPhoneDir) self.toolbar = self.addToolBar('打开手机号配置目录') self.toolbar.addAction(openAction) self.left_widget = QtWidgets.QWidget() # 创建左侧部件 self.left_widget.setObjectName('left_widget') self.left_layout = QtWidgets.QGridLayout() # 创建左侧部件的网格布局层 self.left_widget.setLayout(self.left_layout) # 设置左侧部件布局为网格 self.right_widget = QtWidgets.QWidget() # 创建右侧部件 self.right_widget.setObjectName('right_widget') self.right_layout = QtWidgets.QGridLayout() self.right_widget.setLayout(self.right_layout) # 设置右侧部件布局为网格 self.main_layout.addWidget(self.left_widget, 0, 0, 3, 2) # 左侧部件在第0行第0列,占8行3列 self.main_layout.addWidget(self.right_widget, 0, 2, 12, 10) # 右侧部件在第0行第3列,占8行9列 self.setCentralWidget(self.main_widget) # 设置窗口主部件 models = [ { 'label': '导出微信通讯录', 'objName': 'left_label' }, { 'label': '批量添加好友', 'objName': 'left_label' }, { 'label': '批量修改备注为手机号', 'objName': 'left_label' }, { 'label': '导出朋友圈信息', 'objName': 'left_label' }, { 'label': '导出含文本朋友圈信息', 'objName': 'left_label' }, { 'label': '导出图片到电脑', 'objName': 'left_label' }, { 'label': '按文本内容对图片分组', 'objName': 'left_label' }, { 'label': '上传文本到后台', 'objName': 'left_label' }, { 'label': '上传图片到后台', 'objName': 'left_label' }, { 'label': '开启导出图片并上传任务', 'objName': 'left_label' }, { 'label': '恢复输入法', 'objName': 'left_label' }, { 'label': '删除手机图片缓存', 'objName': 'left_label' }, { 'label': '抓取当天遗漏数据', 'objName': 'left_label' }, { 'label': '停止任务', 'objName': 'left_label' }, ] self.buttons = [] for index, model in enumerate(models): btn = QtWidgets.QPushButton(model['label']) btn.setObjectName(model['objName']) self.buttons.append(btn) for index, btn in enumerate(self.buttons): self.left_layout.addWidget(btn, index, 0, 1, 3) if index == 0: btn.clicked.connect(self.clickGetContacts) elif index == 1: btn.clicked.connect(self.clickAddFriend) elif index == 2: btn.clicked.connect(self.clickModifyName) elif index == 3: btn.clicked.connect(self.clickTextWithPicMoment) elif index == 4: btn.clicked.connect(self.clickTextMoment) elif index == 5: btn.clicked.connect(self.clickExportPic) elif index == 6: btn.clicked.connect(self.clickPicClassfy) elif index == 7: btn.clicked.connect(self.clickUploadText) elif index == 8: btn.clicked.connect(self.clickUploadPic) elif index == 9: btn.clicked.connect(self.clickBatchUploadLabel) elif index == 10: btn.clicked.connect(self.clickKeyboardLabel) elif index == 11: btn.clicked.connect(self.clickClearPics) elif index == 12: btn.clicked.connect(self.clickGetLostLabel) elif index == 13: btn.clicked.connect(self.clickStopLabel) self.left_widget.setStyleSheet(''' QPushButton#left_label{ padding:10px; font-family: "Arial","Microsoft YaHei","黑体","宋体",sans-serif; } ''') self.right_widget.setStyleSheet(''' QTextEdit#right_label{ font-family: "Arial","Microsoft YaHei","黑体","宋体",sans-serif; } ''') self.runthread = Runthread(EventConst.WX_CONTACT) self.runthread0 = Runthread(EventConst.MAIN_BULK_ADDFRIEND) self.runthread01 = Runthread(EventConst.MAIN_BULK_M_NAME) self.runthread1 = Runthread(EventConst.WX_MAIN_PIC) self.runthread2 = Runthread(EventConst.WX_MAIN) self.runthread3 = Runthread(EventConst.WX_EXPORT) self.runthread31 = Runthread(EventConst.WX_PICCLASSFY) self.runthread4 = Runthread(EventConst.WX_UPLOADER) self.runthread5 = Runthread(EventConst.WX_PICUPLOADER) self.runthread6 = Runthread(EventConst.WX_EXPORT_PHONE) self.runthread7 = Runthread(EventConst.WX_BATCH_UPLOAD) self.runthread8 = Runthread(EventConst.WX_CLEAR_PIC) self.runthread9 = Runthread(EventConst.WX_GET_LOST_PIC) self.stopRunner = StopRunthread() self.boardRunthread = KeyBoardRunthread() self.runthread.signals.connect(self.call_backlog) self.runthread0.signals.connect(self.call_backlog) self.runthread01.signals.connect(self.call_backlog) self.runthread1.signals.connect(self.call_backlog) self.runthread2.signals.connect(self.call_backlog) self.runthread3.signals.connect(self.call_backlog) self.runthread31.signals.connect(self.call_backlog) self.runthread4.signals.connect(self.call_backlog) self.runthread5.signals.connect(self.call_backlog) self.runthread6.signals.connect(self.call_backlog) self.runthread7.signals.connect(self.call_backlog) self.runthread8.signals.connect(self.call_backlog) self.runthread9.signals.connect(self.call_backlog) self.stopRunner.signals.connect(self.call_backlog) self.boardRunthread.signals.connect(self.call_backlog) self.right_label = QtWidgets.QTextEdit("") self.right_label.setPlaceholderText("日志输出区") self.right_label.setObjectName('right_label') self.right_layout.addWidget(self.right_label, 0, 0, 1, 3) # self.setWindowOpacity(0.9) # 设置窗口透明度 self.setWindowTitle('屋聚科技自动化运营工具V2.1') self.setWindowIcon(QIcon(IconConfig.LOGO_DIR)) # self.setAttribute(QtCore.Qt.WA_TranslucentBackground) # 设置窗口背景透明 # self.setWindowFlag(QtCore.Qt.FramelessWindowHint) # 隐藏边框 self.main_layout.setSpacing(0) excel = WxConfig.getPhoneExcel() if excel: self.statusBar().showMessage(f'手机号文件地址:{excel}') else: self.statusBar().showMessage(f'请先点击配置菜单配置数据') value = self.config.get_value("wx_content", "select") if value == 'True': self.buttons[7].setEnabled(False) else: self.buttons[7].setEnabled(True)
def __init__(self, parent=None): super(ConfigDialog, self).__init__(parent) layout = QFormLayout() self.config = MonitorConfig() self.label = QLabel("已连接设备名称:") self.le0 = QLineEdit() deviceId = WxConfig.getAppiumConfig()["deviceName"] self.le0.setPlaceholderText("未检测到设备") self.le0.setText(deviceId) layout.addRow(self.label, self.le0) self.label = QLabel("已连接安卓版本:") self.le1 = QLineEdit() platformVersion = WxConfig.getAppiumConfig()["platformVersion"] self.le1.setPlaceholderText("未检测到版本") self.le1.setText(platformVersion) layout.addRow(self.label, self.le1) self.label = QLabel("服务器地址:") self.le2 = QLineEdit() url = WxConfig.getServerUrl() self.le2.setText(url) layout.addRow(self.label, self.le2) self.label = QLabel("最大添加好友上限(人数):") self.le3 = QLineEdit() add_friend_max_count = WxConfig.get_add_friend_max_count() self.le3.setText(add_friend_max_count) layout.addRow(self.label, self.le3) self.label = QLabel("任务暂停后继续执行的时间间隔(秒):") self.le31 = QLineEdit() max_count = WxConfig.get_addfriend_inte_seconds() self.le31.setText(max_count) layout.addRow(self.label, self.le31) self.label = QLabel("每次抓取任务上线数量(条):") self.le32 = QLineEdit() crawl_max_count = WxConfig.get_crawl_max_count() self.le32.setText(crawl_max_count) layout.addRow(self.label, self.le32) self.label = QLabel("批量导出图片上传脚本时间间隔(秒):") self.le41 = QLineEdit() batch_pic_seconds = self.config.get_value('appiumConfig', 'batch_pic_seconds') self.le41.setText(batch_pic_seconds) layout.addRow(self.label, self.le41) self.addbtn = QPushButton("设置手机号文件地址") self.addbtn.clicked.connect( self.add_phone_excel) # 当点击save按钮时,对话框将会消失,点击Cacel按钮时,则不会消失。 self.le4 = QLineEdit() phone_excel = WxConfig.getPhoneExcel() self.le4.setText(phone_excel) layout.addRow(self.addbtn, self.le4) self.label5 = QLabel("最新朋友圈图片md5值") self.le5 = QLineEdit() self.config = MonitorConfig() md5_pic = self.config.get_value("wx_content", "md5_pic") self.le5.setText(md5_pic) layout.addRow(self.label5, self.le5) self.label6 = QLabel("最新朋友圈文本md5值") self.le6 = QLineEdit() self.config = MonitorConfig() md5 = self.config.get_value("wx_content", "md5") self.le6.setText(md5) layout.addRow(self.label6, self.le6) self.label7 = QLabel("抓取文本时同时同步到云端") self.select_checkbox = QCheckBox("") value = self.config.get_value("wx_content", "select") if value == 'True': self.select_checkbox.setChecked(True) else: self.select_checkbox.setChecked(False) layout.addRow(self.label7, self.select_checkbox) self.label8 = QLabel("是否输出日志") self.log_checkbox = QCheckBox("") if Logger.debug: self.log_checkbox.setChecked(True) else: self.log_checkbox.setChecked(False) layout.addRow(self.label8, self.log_checkbox) self.cacelButton = QPushButton("重新检测") self.saveButton = QPushButton("保存") self.cacelButton.clicked.connect( self.reconnect) # 当点击save按钮时,对话框将会消失,点击Cacel按钮时,则不会消失。 self.saveButton.clicked.connect( self.save) # 当点击save按钮时,对话框将会消失,点击Cacel按钮时,则不会消失。 self.buttonBox = QDialogButtonBox(QtCore.Qt.Horizontal) self.buttonBox.addButton(self.saveButton, QDialogButtonBox.RejectRole) self.buttonBox.addButton(self.cacelButton, QDialogButtonBox.YesRole) layout.addRow(self.buttonBox) self.setLayout(layout) self.setWindowTitle("配置服务器地址") self.setWindowIcon(QIcon(IconConfig.LOGO_DIR))