Esempio n. 1
0
def get_crawl_max_count():
    config = MonitorConfig()
    crawl_max_count = config.get_value('appiumConfig', 'crawl_max_count')
    Logger.println(f"【crawl_max_count={crawl_max_count}】")
    if not crawl_max_count:
        return '100'
    return crawl_max_count
Esempio n. 2
0
def getAppiumConfig():
    deviceId = ''
    deviceVersion = ''
    try:
        # 读取设备 id
        # 正则表达式匹配出 id 信息
        deviceId = getDeviceid()[0]
        # readDeviceId = list(os.popen('adb devices').readlines())
        # deviceId = re.findall(r'^\w*\b', readDeviceId[1])[0]
        # 读取设备系统版本号
        deviceAndroidVersion = list(
            os.popen(f'adb -s {deviceId} shell getprop ro.build.version.release').readlines())
        deviceVersion = re.findall(r'^\w*\b', deviceAndroidVersion[0])[0]
    except Exception as e:
        Logger.println(f"get deviceAndroidVersion Exception【e={e}】")

    appiumConfig = {
        "platformName": "Android",
        "deviceName": deviceId,
        "udid": deviceId,
        "platformVersion": deviceVersion,
        "appPackage": "com.tencent.mm",
        "appActivity": "com.tencent.mm.ui.LauncherUI",
        "noReset": "True",
        "unicodeKeyboard": "True",
        "resetKeyboard": "True"
    }
    Logger.println(f"【appium_config={appiumConfig}】")
    return appiumConfig
Esempio n. 3
0
def get_addfriend_inte_seconds():
    config = MonitorConfig()
    addfriend_inte_seconds = config.get_value('appiumConfig', 'addfriend_inte_seconds')
    Logger.println(f"【get_addfriend_inte_seconds={addfriend_inte_seconds}】")
    if not addfriend_inte_seconds:
        return '3600'
    return addfriend_inte_seconds
Esempio n. 4
0
def deletePictures():
    Logger.println(
        f"【deletePictures===========开始删除手机图片缓存========================】")
    deviceId = WxConfig.getAppiumConfig()["deviceName"]
    if deviceId:
        execute_adb_shell('shell rm -r /sdcard/Pictures/WeiXin',
                          deviceId=deviceId)
    Logger.println(f"【deletePictures===========删除图片缓存执行完成=================】")
Esempio n. 5
0
def files_token(type='file', count=1):
    res = requests.get(f"http://internal.zuker.im/files/token?type={type}&count={count}")
    res_json = res.json()
    jsonstr = json.dumps(res_json, indent=4, ensure_ascii=False)
    Logger.println(f"【files_token().jsonstr={jsonstr}】")
    if res_json['code'] == 0:
        return res_json['result']
    else:
        return None
Esempio n. 6
0
 def getNickName(self, driver=None):
     driver = driver or self.driver
     try:
         nickname = driver.find_element_by_id(
             'com.tencent.mm:id/e3x').get_attribute("text")
         Logger.println(f"【getNickName().nickname={nickname}】")
         return nickname
     except:
         pass
Esempio n. 7
0
def putItems(array):
    try:
        for index, item in enumerate(array):
            if wx_stop.stopFlag:
                break
            put_item(index, item)
    except Exception as e:
        Logger.println(f"【e={e}】")
        pass
Esempio n. 8
0
def get_region_by_page(page):
    item = {"page": page, "page_size": pageSize}
    res = requests.get("http://internal.zuker.im/department", params=item)
    res_json = res.json()
    if res_json['code'] == 0:
        total_page = res_json['result']['total_page']
        items = res_json['result']['items']
        return total_page, items
    else:
        Logger.println(f"【接口异常】{res_json}")
        return None
Esempio n. 9
0
def main():
    Exceptionhandler.main()
    linesStr = list(os.popen('adb  version').readlines())
    for line in linesStr:
        Logger.println(f"{line}")

    app = QtWidgets.QApplication(sys.argv)
    gui = MainUi()
    gui.editConfigDialog()
    gui.show()
    sys.exit(app.exec_())
Esempio n. 10
0
def excel2array(xlsPath, sheet_name=None):
    arrays = []
    params_keys = get_xls_heads(xlsPath, sheet_name)
    Logger.println(f"【excel2array().params_keys={params_keys}】")
    params_values = get_xls(xlsPath, sheet_name)
    for values in params_values:
        param = {}
        for index in range(len(params_keys)):
            param[params_keys[index]] = values[index]
        arrays.append(param)
    return arrays
Esempio n. 11
0
 def getPhone(self, driver=None):
     driver = driver or self.driver
     try:
         xpath = driver.find_element_by_id('com.tencent.mm:id/ec9')
         if xpath:
             phone = xpath.find_element_by_xpath(
                 '//android.widget.TextView').get_attribute("text")
             return phone
     except  Exception  as e:
         Logger.println(f"【getPhone().e={e}】")
         pass
Esempio n. 12
0
def uploadItem(item):
    try:
        Logger.println(f"uploadItem【item={item}】")
        res = requests.post("http://internal.zuker.im/moment", json=item)
        res_json = res.json()
        # jsonstr = json.dumps(res_json, indent=4, ensure_ascii=False)
        # Logger.println(f"【uploadItems().res={jsonstr}】")
        if res_json['code'] == 20003:
            return '20003'
    except Exception as e:
        Logger.println(f"【e={e}】")
        pass
Esempio n. 13
0
 def scrollElement(self, origin_el: WebElement, destination_el: WebElement):
     try:
         size = self.screen_size
         x1 = int(size[0] * 0.5)  # 起始x坐标
         location_start = origin_el.location
         location_end = destination_el.size
         y_ = location_start['y']
         height_ = location_end['height'] + 40
         if y_ >= height_:
             self.driver.flick(x1, y_, x1, height_)
     except Exception as e:
         Logger.println(f"【scrollElement().e={e}】")
Esempio n. 14
0
def rows_write(ws, row_x, rows):
    Logger.println(f"【rows_write().rows={rows}】")
    style.alignment.wrap = 1  # 自动换行
    for num, value in enumerate(rows):
        value = value if value != None else ''
        pattern = re.compile(
            r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+')
        url = re.findall(pattern, value)
        if len(url) > 0:
            s = str(url[0])
            if (len(s) <= 255):
                value = xlwt.Formula('HYPERLINK("%s","链接详情")' % s)
        ws.write(row_x, num, value, style)
Esempio n. 15
0
 def waitContentTextById(self, id, driver=None):
     driver = driver or self.driver
     try:
         by_id = self.wait_find_element(By.ID, id, driver)
         if by_id:
             content = by_id.get_attribute("text")
             if content is None:
                 pass
             Logger.println(content)
             return content
     except:
         return None
         pass
Esempio n. 16
0
def need_upload_photo_item(item):
    try:
        Logger.println(f"【item={item}】")
        res = requests.get("http://internal.zuker.im/moment", params=item)
        res_json = res.json()
        # jsonstr = json.dumps(res_json, indent=4, ensure_ascii=False)
        # Logger.println(f"【need_upload_photo_item().res={jsonstr}】")
        if res_json['code'] == 0:
            return not res_json['result']['file_ids']
        else:
            return False
    except Exception as e:
        Logger.println(f"【e={e}】")
        return False
Esempio n. 17
0
def export():
    full_dir = FilePathUtil.get_full_dir('wxfriend', 'pic')
    weixinPath = FilePathUtil.get_full_dir('wxfriend', 'pic', 'WeiXin')
    if os.path.exists(weixinPath):
        try:
            shutil.rmtree(weixinPath)
        except:
            pass
    deviceId = WxConfig.getAppiumConfig()["deviceName"]
    if deviceId:
        execute_adb_shell(f'pull /sdcard/Pictures/WeiXin/ {full_dir}',
                          deviceId=deviceId)
    else:
        Logger.println(f"【().未找到设备】")
Esempio n. 18
0
def appendData(full_dir, items):
    # !/usr/bin/env python
    # -*- coding:utf-8 -*-
    from xlrd import open_workbook
    from xlutils.copy import copy
    r_xls = open_workbook(full_dir, encoding_override=ENCODING)  # 读取excel文件
    row = r_xls.sheets()[0].nrows  # 获取已有的行数
    excel = copy(r_xls)  # 将xlrd的对象转化为xlwt的对象
    table = excel.get_sheet(0)  # 获取要操作的sheet
    for index, item in enumerate(items):
        Logger.println(f"【write_excel().index={row + index}】")
        values = list(item.values())
        for sub_index, sub_item in enumerate(values):
            table.write(row + index, sub_index, sub_item)  # 括号内分别为行数、列数、内容
    excel.save(full_dir)  # 保存并覆盖文件
Esempio n. 19
0
 def save_screenshot(self, content_element, dir, file_name):
     """
     :param content_element:
     :param dir:
     :param file_name:
     :return:
     """
     try:
         full_dir = FilePathUtil.get_full_dir("wxfriend", "pic", dir)
         if not os.path.exists(full_dir):
             os.mkdir(full_dir)
         content_element.screenshot(FilePathUtil.get_full_dir(full_dir, file_name))
         return True
     except Exception as e:
         Logger.println(f"【save_screenshot().e={e}】")
         return False
Esempio n. 20
0
 def get_text_elment(self, txitem, text_type='text'):
     attribute = txitem.get_attribute(text_type)
     if attribute and str.strip(attribute):
         Logger.println(f"【找到{text_type}={attribute}")
         content = {}
         content[text_type] = attribute
         try:
             resourceId = txitem.get_attribute("resource-id")
             content['resourceId'] = resourceId
             class_name = txitem.get_attribute('className')
             content['className'] = class_name
         except:
             pass
         return content
     else:
         return None
Esempio n. 21
0
def write_excel(filename, worksheet_name, items):
    '''
    :return:
    '''
    workbook = xlwt.Workbook(encoding='utf-8')
    worksheet = workbook.add_sheet(worksheet_name)
    if len(items) > 0:
        keys = list(items[0].keys())
        Logger.println(f"【write_excel().keys={keys}】")
        title_write(worksheet, keys)
    excel_items = []
    for item in items:
        values = list(item.values())
        excel_items.append(values)
    data_write(worksheet, excel_items)
    workbook.save(filename)
Esempio n. 22
0
def uploadItems(array):
    try:
        for index, item in enumerate(array):
            if wx_stop.stopFlag:
                break
            Logger.println(f"【({index}).item={item}】")
            res = requests.post("http://internal.zuker.im/moment", json=item)
            res_json = res.json()
            # jsonstr = json.dumps(res_json, indent=4, ensure_ascii=False)
            # Logger.println(f"【uploadItems({index}).res={jsonstr}】")
            if res_json['code'] == 20003:
                put_item(index, item)
                return '20003'
    except Exception as e:
        Logger.println(f"【e={e}】")
        pass
Esempio n. 23
0
def classify(full_dir):
    # 2.excel获取朋友圈所有说说的md5以及图片的保存起始时间值
    Logger.println(f"【().full_dir={full_dir}】")
    array = excel_util.excel2array(full_dir)
    count = 0
    for index, item in enumerate(array):
        content_md5 = item['content_md5']
        start = int(item['start'])
        end = int(item['end'])
        count = int(item['count'])
        if count > 0:
            # Logger.println(f"【classify().item={item}】")
            # 3.根据起始时间值以及md5值分类好图片
            full_dir = FilePathUtil.get_full_dir('wxfriend', 'pic', 'WeiXin')
            des_dir = FilePathUtil.get_full_dir('wxfriend', 'pic',
                                                'WeiXinCopy', content_md5)
            files = FilePathUtil.move_files_by_time(full_dir, des_dir, start,
                                                    end)
Esempio n. 24
0
 def swipe_to_top(self):
     while True:
         source = self.driver.page_source
         """
         向上滑动
         :param driver:
         :param _time:
         :return:
         """
         size = self.screen_size
         x1 = int(size[0] * 0.5)  # 起始x坐标
         y1 = int(size[1] * 0.8)  # 起始y坐标
         y2 = int(size[1] * 0.5)  # 终点y坐标
         self.driver.swipe(x1, y2, x1, y1, 300)
         sleep(1.5)
         current_source = self.driver.page_source
         if source == current_source:
             Logger.println(f"【swipe_to_top().已经滑动到顶部了】")
             break
Esempio n. 25
0
def batch_export_upload(full_dir):
    global upload_md5_pic_position
    upload_md5_pic_position = 0
    global index
    start_time = int(time.time())
    config = MonitorConfig()
    sleeptime = 3 * 60
    value = config.get_value('appiumConfig', 'batch_pic_seconds')
    if value:
        sleeptime = int(value)
    Logger.println(
        f"【====================开始批量导出并上传图片batch_pic_seconds={sleeptime}=======================】")
    while True:
        time.sleep(5)
        time_start_time = int(time.time()) - start_time
        if sleeptime - time_start_time > 0:
            Logger.println(
                f"=================【{sleeptime - time_start_time}秒后执行第={index}个批量导出并上传图片任务===================】")
        if time_start_time >= sleeptime:
            index = index + 1
            break
        time.sleep(5)
    PicClassfyUtil.classify_from(full_dir)
    excel_full_dir = FilePathUtil.get_lastmodify_file(
        FilePathUtil.get_full_dir("wxfriend", "excel", "pic"))
    main(excel_full_dir)
    if wx_stop.stopFlag:
        Logger.println(f"【===================批量导出并上传图片任务停止=================】")
        return
    batch_export_upload(full_dir)
Esempio n. 26
0
def downloadFile(name, url, signals: pyqtSignal = None):
    headers = {'Proxy-Connection': 'keep-alive'}
    r = requests.get(url, stream=True, headers=headers)
    length = float(r.headers['content-length'])
    f = open(name, 'wb')
    count = 0
    count_tmp = 0
    time1 = time.time()
    for chunk in r.iter_content(chunk_size=512):
        if chunk:
            f.write(chunk)
            count += len(chunk)
            if time.time() - time1 > 1:
                p = count / length * 100
                speed = (count - count_tmp) / 1024 / 1024 / 2
                count_tmp = count
                Logger.println(f'已下载 {formatFloat(p)}% (下载速度:{formatFloat(speed)}M/s)')
                time1 = time.time()
                if signals:
                    signals.emit(f'已下载 {formatFloat(p)}% (下载速度:{formatFloat(speed)}M/s)')
    signals.emit(f'已下载 {formatFloat(100)}%')
    f.close()
Esempio n. 27
0
def exportPhone(full_dir):
    array = excel2array(full_dir)
    datas = []
    phones = []
    for item in array:
        new_item = {}
        txt = get_phone_from_txt(item['描述'])
        if txt in phones:
            continue
        else:
            if txt:
                new_item['描述'] = item['描述']
                new_item['手机'] = txt
                datas.append(new_item)
                phones.append(txt)
    date = time_util.now_to_date('%Y%m%d_%H')
    des_dir = FilePathUtil.get_full_dir("wxfriend", "excel", f"手机号列表{date}.xlsx")
    write_excel(des_dir, '手机号列表', datas)
    Logger.println(f"【main().检测到重复电话号码={len(array) - len((datas))}条】")
    Logger.println(f"【main().获取到电话号码={len((datas))}条】")
    FilePathUtil.startfile(des_dir)
    return des_dir
Esempio n. 28
0
def put_img(md5, file_ids):
    '''
    上传图片ids
    :param md5:
    :param file_ids:
    :return:
    '''
    item = {'content_md5': md5, 'file_ids': file_ids}
    Logger.println(f"【put_img().item={item}】")
    try:
        res = requests.put("http://internal.zuker.im/moment",
                           json=item)
        res_json = res.json()
        # jsonstr = json.dumps(res_json, indent=4, ensure_ascii=False)
        # Logger.println(f"put_img【res={jsonstr}】")
        if res_json['code'] == 0:
            return True
        else:
            return False
    except Exception as e:
        Logger.println(f"Exception is【{e}】")
        return False
 def run(self):
     Logger.init(self.signals)
     try:
         Logger.println(f"【run()开始停止】")
         wx_stop.stopFlag = True
         Logger.println(f"【run()任务已经停止】")
     except Exception as e:
         Logger.println(f"【run().e={e}】")
 def run(self):
     Logger.init(self.signals)
     try:
         Logger.println(f"【run()开始恢复输入法】")
         PicClassfyUtil.setImiDefault()
         Logger.println(f"【run()已经恢复输入法】")
     except Exception as e:
         Logger.println(f"【run().e={e}】")