Exemple #1
0
 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】")
Exemple #2
0
    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)
Exemple #3
0
    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))