Ejemplo n.º 1
0
    def GetToken(self, useCache=True):
        key = 'HelloTrue_Token_%s' % (hash(self.serial) % 10)  # 根据手机串码的hash值尾号共用token, 每10个手机共用一个token
        if useCache:
            tokenCache = cache.get(key)
            if tokenCache:
                return tokenCache

        user = self.username.encode("utf-8")
        pwd = self.password.encode("utf-8")

        path = "/api/do.php?action=loginIn&name=" + user + "&password="******"&Developer=apFsnhXLxQG5W0AWiDhr%2fg%3d%3d"
        conn = httplib.HTTPConnection(self.domain, self.port, timeout=30)
        conn.request("GET", path)
        time.sleep(1)
        response = conn.getresponse()
        if response.status == 200:
            data = response.read()
            if data.startswith("1|"):
                token = data.split('|')[1];
                cache.set(key, token, None)
                return token
            elif u"密码" in data:
                if not cache.get("HELLOTRUE_ERROR_PASS"):
                    cache.set("HELLOTRUE_ERROR_PASS", True)
                    dbapi.log_error("", u"开放云登录失败了", u"开放云用户密码错误,请修改")

        return self.GetToken()
Ejemplo n.º 2
0
 def GetCode(self, number, itemId, length=6):
     key = 'hellotrue_verify_code_%s_%s' % (itemId, number)
     code = cache.get(key)
     if code:
         return code
     token = self.GetToken()
     try:
         itemcode = self.im_type_list[itemId]
         path = "/api/do.php?action=getMessage&token=%s&sid=%s&phone=%s&author=%s" % (token, itemcode, number, self.author)
         conn = httplib.HTTPConnection(self.domain, self.port, timeout=30)
         conn.request("GET", path)
         response = conn.getresponse()
         if response.status == 200:
             data = response.read()#.decode('GBK')
             if data.startswith("0|"):
                 return None
             res = re.findall("\d{%s}" % length, data)
             code = res[0]
             sms_number_key = 'hellotrue_verify_code_%s_%s' % (itemId, number)
             cache.set(sms_number_key, code)
         else:
             data = response.read()#.decode('GBK')
             util.logger.error(data)
     except Exception:
         return None
Ejemplo n.º 3
0
    def GetCode(self, number, itemId, length=6):
        itemcode = self.im_type_list[itemId]
        key = 'verify_code_%s_%s' % (itemcode, number)
        code = cache.get(key)
        if code:
            return code
        token = self.GetToken()
        try:
            path = "/getMessage?token=%s&itemId=%s&phone=%s" % (
                token, itemcode, number)
            conn = httplib.HTTPConnection(self.domain, self.port, timeout=30)
            conn.request("GET", path)
            response = conn.getresponse()
            if response.status == 200:
                data = response.read().decode('GBK')
                print(data)
                if u'Session 过期' in data or u'Session过期' in data:
                    self.GetToken(False)
                    return None
        except Exception:
            self.logger.error(traceback.format_exc())
            return None

        smsList = self.ExtractSMS(data, length)
        for sms in smsList:
            if 'phone' in sms and 'code' in sms:
                sms_number_key = 'verify_code_%s_%s' % (sms['itemid'],
                                                        sms['phone'])
                self.logger.info("KEY: %s, Code: %s" %
                                 (sms_number_key, sms['code']))
                cache.set(sms_number_key, sms['code'])
                #cache.set(sms['phone'], sms['code'])
                '''
Ejemplo n.º 4
0
    def getCode(self, im, im_type, timeout=60):
        """
        im: 图片字节
        im_type: 题目类型
        """
        params = {
            'typeid': self.im_type_list[im_type],
            'timeout': timeout,
        }
        params.update(self.base_params)
        files = {'image': ('a.jpg', im.read())}
        requests.adapters.DEFAULT_RETRIES = 10
        r = requests.post('http://api.ruokuai.com/create.json',
                          data=params,
                          files=files,
                          headers=self.headers)

        #{"Result":"答题结果","Id":"题目Id(报错使用)"}
        result = r.json()
        if "Error_Code" in result:
            if result["Error_Code"] == "10202":
                if not cache.get("RK_ERROR_PASS"):
                    cache.set("RK_ERROR_PASS", True)
                    dbapi.log_error("", "若快用户密码错误", "若快打码用户密码错误,请修改")
                return None
        return {"Result": result["Result"], "Id": result["Id"]}
Ejemplo n.º 5
0
    def GetToken(self, useCache=True):
        key = 'XunMa_Token_%s' % (hash(self.serial) % 10
                                  )  # 根据手机串码的hash值尾号共用token, 每10个手机共用一个token
        if useCache:
            tokenCache = cache.get(key)
            if tokenCache:
                return tokenCache

        user = self.username.encode("utf-8")
        pwd = self.password.encode("utf-8")

        path = "/Login?uName=" + user + "&pWord=" + pwd + "&Developer=apFsnhXLxQG5W0AWiDhr%2fg%3d%3d"
        conn = httplib.HTTPConnection(self.domain, self.port, timeout=30)
        conn.request("GET", path)
        time.sleep(1)
        response = conn.getresponse()

        if response.status == 200:
            data = response.read()
            if data.startswith("False"):  # Token以False开头,嵌套调用
                return self.GetToken()
            token = data.split('&')[0]
            cache.set(key, token, None)
            return token
        else:
            return self.GetToken()
Ejemplo n.º 6
0
 def run(self):
     while True:
         cache.set("ztask_virtual_active_time", datetime.datetime.now())
         try:
             devicelist = self.finddevices()
             for device in devicelist:
                 deviceid = device["serial"]
                 taskid = device["task_id"]
                 if taskid:
                     task = dbapi.GetTask(taskid)
                     if task and task.get("status") and task["status"] == "running":
                         if deviceid not in self.processDict:  # 进程从未启动
                             self.startProcess(deviceid)
                         else:
                             p = self.processDict[deviceid]
                             if not p.is_alive():  # 进程已退出,从新启动进程
                                 self.startProcess(deviceid)
                             else:  # 检查进程心跳是否超过3分钟
                                 key = 'timeout_%s' % deviceid
                                 activeTime = cache.get(key)
                                 if activeTime:
                                     checkTime = (datetime.datetime.now() - datetime.datetime(2017, 1, 1)).seconds
                                     if (checkTime - int(activeTime)) > 180:  # 进程心跳时间超过3分种,重启进程
                                         self.processDict[deviceid].terminate()
                                         self.startProcess(deviceid)
                     else:
                         if self.processDict.has_key(deviceid) and self.processDict.get(deviceid).is_alive():
                             self.processDict[deviceid].terminate()
                             del self.processDict[deviceid]
                 elif deviceid in self.processDict:
                     self.processDict[device].terminate()
                     del self.processDict[deviceid]
         except Exception:
             logger.error(traceback.format_exc())
         time.sleep(10)
Ejemplo n.º 7
0
    def timeinterval(self, z, args):
        now = datetime.datetime.now()
        nowtime = now.strftime(
            '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
        logging.info('现在的时间%s' % nowtime)
        gettime = cache.get('WeiXinMoments_time')
        logging.info('以前的时间%s' % gettime)
        d1 = datetime.datetime.strptime(nowtime, '%Y-%m-%d %H:%M:%S')
        if gettime != None:
            d2 = datetime.datetime.strptime(gettime, '%Y-%m-%d %H:%M:%S')
            delta1 = (d1 - d2)
            # print( delta1 )
            delta = re.findall(r"\d+\.?\d*", str(delta1))  # 将天小时等数字拆开
            day1 = int(delta[0])
            hours1 = int(delta[1])
            minutes1 = 0
            if 'days' in str(delta1):
                minutes1 = int(delta[2])
                allminutes = day1 * 24 * 60 + hours1 * 60 + minutes1
            else:
                allminutes = day1 * 60 + hours1  # 当时间不超过天时此时天数变量成为小时变量
            logging.info("day=%s,hours=%s,minutes=%s" %
                         (day1, hours1, minutes1))

            logging.info('两个时间的时间差%s' % allminutes)
            set_time = int(args['set_time'])  # 得到设定的时间
            if allminutes < set_time:  # 由外界设定
                z.toast('该模块未满足指定时间间隔,程序结束')
                return 'end'
            else:
                cache.set('WeiXinMoments_time', nowtime)

        else:
            cache.set('WeiXinMoments_time', nowtime)
Ejemplo n.º 8
0
    def action(self,d,z,args):
        z.toast("开始执行:检测手机IP模块")
        while True:
            # 开关飞行模式
            d.server.adb.cmd( "shell", "settings put global airplane_mode_on 1" ).communicate( )
            d.server.adb.cmd( "shell",
                              "am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true" ).communicate( )
            z.sleep( 6 )
            d.server.adb.cmd( "shell", "settings put global airplane_mode_on 0" ).communicate( )
            d.server.adb.cmd( "shell",
                              "am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false" ).communicate( )
            while True:
                ping = d.server.adb.cmd("shell", "ping -c 3 baidu.com").communicate()
                print(ping)
                if 'icmp_seq'and 'bytes from'and'time' in ping[0]:
                    break
                z.sleep(2)

            # 获取手机IP
            IPList = d.server.adb.cmd( "shell", "curl http://ipecho.net/plain" ).communicate( )
            IP = IPList[0]
            print( IP )

            # IP添加到缓存
            ip = cache.get( IP )
            print(ip)
            if ip is None:
                timeoutStr = args['time_out']
                timeout = int( timeoutStr ) * 60
                cache.set( IP, IP, timeout )
                break
            else:
                continue
Ejemplo n.º 9
0
    def GetToken(self, useCache=True):
        key = 'jyzszp_Token_%s' % (hash(self.serial) % 10)  # 根据手机串码的hash值尾号共用token, 每10个手机共用一个token
        if useCache:
            tokenCache = cache.get(key)
            if tokenCache:
                return tokenCache

        user = self.username.encode("utf-8")
        pwd = self.password.encode("utf-8")

        path = "/Api/index/loginIn?uid=%s&pwd=%s"%(user, pwd )
        conn = httplib.HTTPConnection(self.domain, self.port, timeout=30)
        conn.request("GET", path)
        time.sleep(1)
        response = conn.getresponse()
        if response.status == 200:
            data = response.read()
            token = data.split('|');
            if len(token) == 3:
                token = token[2]
                cache.set(key, token, None)
                return token
            elif len(token) == 1:
                if not cache.get("HELLOTRUE_ERROR_PASS"):
                    cache.set("HELLOTRUE_ERROR_PASS", True)
                    dbapi.log_error("", "菜众享登录失败了", "菜众享登录失败,错误码:%s"%data)
                time.sleep(3)
        return self.GetToken()
Ejemplo n.º 10
0
 def GetCode(self, number, itemId, length=6):
     key = 'verify_code_%s_%s' % (itemId, number)
     code = cache.get(key)
     if code:
         return code
     token = self.GetToken()
     try:
         itemcode = self.im_type_list[itemId]
         path = "/Api/index/getVcodeAndReleaseMobile?uid=%s&token=%s&mobile=%s&pid=%s&author_uid=%s" % (self.username,token, number,itemcode, self.author)
         conn = httplib.HTTPConnection(self.domain, self.port, timeout=30)
         conn.request("GET", path)
         response = conn.getresponse()
         if response.status == 200:
             data = response.read()#.decode('GBK')
             dataObj = data.split('|');
             if len(dataObj) >=3 :
                 targetNumber = re.findall(r'1\d{10}', data)
                 targetNumber = targetNumber[0]
                 if len(dataObj[1]) == int(length):
                     code = dataObj[1]
                     sms_number_key = 'verify_code_%s_%s' % (itemId, targetNumber)
                     cache.set(sms_number_key, code)
         else:
             data = response.read()#.decode('GBK')
             util.logger.error(data)
     except Exception:
         return None
Ejemplo n.º 11
0
    def IPCheckRepitition(self, z, d, args):
        z.toast("正在检测IP...")
        while True:
            # 开关飞行模式
            d.server.adb.cmd(
                "shell",
                "settings put global airplane_mode_on 1").communicate()
            d.server.adb.cmd(
                "shell",
                "am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true"
            ).communicate()
            z.sleep(3)
            d.server.adb.cmd(
                "shell",
                "settings put global airplane_mode_on 0").communicate()
            d.server.adb.cmd(
                "shell",
                "am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false"
            ).communicate()

            t = 0
            while t < 6:
                ping = d.server.adb.cmd("shell",
                                        "ping -c 3 baidu.com").communicate()
                print(ping)
                if 'icmp_seq' and 'bytes from' and 'time' in ping[0]:
                    break
                z.sleep(10)
                z.heartbeat()
                z.sleep(10)
                t = t + 1
            if t >= 6:
                z.toast("网络无法ping通,重新开关飞行模式")
                continue

            # 获取手机IP
            IPList = d.server.adb.cmd(
                "shell", "curl http://ipecho.net/plain").communicate()
            IP = IPList[0]
            print(IP)

            # IP添加到缓存
            ip = cache.get(IP)
            print(ip)
            if ip is None:
                timeoutStr = args['time_out']
                timeout = int(timeoutStr) * 60
                cache.set(IP, IP, timeout)
                z.toast("IP检测完成")
                break
            else:
                continue
Ejemplo n.º 12
0
    def __init__(self, serial):
        self.platform = dbapi.GetSetting("sms_platform")
        # self.platform = "xunma"
        if self.platform == 'xunma':
            self.platform = "xunma";
        elif self.platform == 'hellotrue':  #爱乐赞
            self.platform = "hellotrue";
        else:
            self.platform = "jyzszp"; #玉米

        self.username = dbapi.GetSetting("%s_user"%self.platform);
        self.password = dbapi.GetSetting("%s_password" % self.platform);

        if self.username is None or self.password is None:
            if not cache.get("EMPTY_SMS_CODE_USER_PASS"):
                cache.set("EMPTY_SMS_CODE_USER_PASS", True)
                dbapi.log_error("", "没有设置接码帐号密码","没有设置接码帐号密码")
                return

        self.WECHAT_REGISTER = "wechat_register";
        self.QQ_CONTACT_BIND = "qq_contact_bind";
        self.QQ_REGISTER = "qq_register";
        self.QQ_TOKEN_BIND = "qq_token_bind";
        self.ALIPAY_REGISTER = "alipay_register";

        self.WECHAT_MAIL_BIND = "wechat_mail_bind";

        self.im_type_list={}
        self.im_type_list[self.WECHAT_REGISTER] = dbapi.GetSetting("%s_%s" % (self.platform,self.WECHAT_REGISTER));
        self.im_type_list[self.QQ_CONTACT_BIND] = dbapi.GetSetting("%s_%s" % (self.platform,self.QQ_CONTACT_BIND));
        self.im_type_list[self.QQ_REGISTER] = dbapi.GetSetting("%s_%s" % (self.platform,self.QQ_REGISTER));
        self.im_type_list[self.QQ_TOKEN_BIND] = dbapi.GetSetting("%s_%s" % (self.platform,self.QQ_TOKEN_BIND));
        self.im_type_list[self.ALIPAY_REGISTER] = dbapi.GetSetting("%s_%s" % (self.platform,self.ALIPAY_REGISTER));

        self.im_type_list[self.WECHAT_MAIL_BIND] = dbapi.GetSetting( "%s_%s" % (self.platform, self.WECHAT_MAIL_BIND) );


        if self.platform == 'xunma':
            self.client = client_xunma(serial, self.username, self.password,self.im_type_list)
        elif self.platform == 'hellotrue':  #爱乐赞
            self.client = client_hellotrue(serial , self.username, self.password,self.im_type_list)
        else:
            self.client = client_jyzszp(serial, self.username, self.password,self.im_type_list) #玉米
Ejemplo n.º 13
0
 def GetWebItemId(self, opener, itemname):
     key = 'itemname_' + itemname
     val = cache.get(key)
     if val:
         return val
     url = 'http://www.xunma.net/userManage/Category.aspx?selectItem=' + itemname
     response = opener.open(url)
     data = response.read()
     soup = BeautifulSoup(data)
     tables = soup.findAll('table')
     for tab in tables:
         if u'项目名' not in tab.text or u'单价' not in tab.text:
             continue
         for tr in tab.findAll('tr'):
             tds = tr.findAll('td')
             if len(tds) > 3:
                 if tds[1].getText() == itemname:
                     cache.set(key, tds[0].getText(), 60 * 60 * 24)
                     return tds[0].getText()
Ejemplo n.º 14
0
    def GetAllWebSms(self):
        filename = '/tmp/cookie_xunma.txt'
        # 声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件
        cookie = cookielib.MozillaCookieJar(filename)
        # 利用urllib2库的HTTPCookieProcessor对象来创建cookie处理器
        handler = urllib2.HTTPCookieProcessor(cookie)
        # 通过handler来构建opener
        opener = urllib2.build_opener(handler)
        if os.path.exists(filename):
            cookie.load(filename, ignore_discard=True, ignore_expires=True)
        loginurl = "http://www.xunma.net/userManage/Message.aspx"
        opener.addheaders = [(
            "User-Agent",
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36"
        )]
        # 登陆前准备:获取lt和exection
        response = opener.open(loginurl)
        data = response.read()
        if '<div class="title">用户登录<span>' in data:
            self.LoginWeb(opener)
            cookie.save(ignore_discard=True, ignore_expires=True)
            return self.GetAllWebSms()
        soup = BeautifulSoup(data)
        tables = soup.findAll('table')
        for tab in tables:
            if '短信内容' not in tab.text or '手机号码' not in tab.text:
                continue
            for tr in tab.findAll('tr'):
                tds = tr.findAll('td')
                if len(tds) > 7:
                    number = tds[1].getText()
                    if len(number) != 11:
                        continue
                    itemcode = self.GetWebItemId(opener, tds[4].getText())

                    key = 'verify_code_%s_%s' % (itemcode, number)
                    if not cache.get(key):
                        res = re.findall("\d+", tds[2].getText())
                        for code in res:
                            if len(code) >= 4:
                                cache.set(key, code)
                                break
Ejemplo n.º 15
0
    def __init__(self):
        self.platform = dbapi.GetSetting("image_platform")
        if self.platform == 'lianzong':
            self.platform = "lianzong"
        else:
            self.platform = "ruokuai"

        self.username = dbapi.GetSetting("%s_user" % self.platform)
        self.password = dbapi.GetSetting("%s_password" % self.platform)

        if self.username is None or self.password is None:
            if not cache.get("EMPTY_IMAGE_CODE_USER_PASS"):
                cache.set("EMPTY_IMAGE_CODE_USER_PASS", True)
                dbapi.log_error("", "没有设置打码帐号密码", "没有设置打码帐号密码")
                return
        if self.platform == 'lianzong':
            self.client = client_lianzong(self.username, self.password)
        else:
            self.client = client_ruokuai(self.username, self.password)
        self.CODE_TYPE_4_NUMBER_CHAR = "4_number_char"
Ejemplo n.º 16
0
    def action(self, d, z, args):
        startTime = args["startTime"]
        endTime = args["endTime"]
        try:
            if self.repo.timeCompare(startTime, endTime):
                z.toast("该时间段不允许运行")
                return
        except:
            z.toast("输入的时间格式错误,请检查后再试")
            return

        set_timeStart = int(args['set_timeStart'])  # 得到设定的时间
        set_timeEnd = int(args["set_timeEnd"])
        run_time = float(random.randint(set_timeStart, set_timeEnd))
        run_interval = z.getModuleRunInterval(self.mid)
        if run_interval is not None and run_interval < run_time:
            z.toast(u'锁定时间还差:%d分钟' % int(run_time - run_interval))
            z.sleep(2)
            return
        z.toast("准备执行MMS版QQ搜索加好友模块")
        z.sleep(1)
        z.toast("正在ping网络是否通畅")
        z.heartbeat()
        i = 0
        while i < 200:
            i += 1
            ping = d.server.adb.cmd("shell",
                                    "ping -c 3 baidu.com").communicate()
            print(ping)
            if 'icmp_seq' and 'bytes from' and 'time' in ping[0]:
                z.toast("网络通畅。开始执行:QQ加好友(搜索查找)")
                break
            z.sleep(2)
        if i > 200:
            z.toast("网络不通,请检查网络状态")
            if (args["time_delay"]):
                z.sleep(int(args["time_delay"]))
            return
        # self.scode = smsCode( d.server.adb.device_serial( ) )
        z.heartbeat()
        d.server.adb.cmd(
            "shell",
            "am force-stop com.tencent.mobileqq").communicate()  # 强制停止
        d.server.adb.cmd(
            "shell",
            "am start -n com.tencent.mobileqq/com.tencent.mobileqq.activity.SplashActivity"
        ).communicate()  # 拉起来
        z.sleep(10)
        z.heartbeat()
        # loginStatusList = z.qq_getLoginStatus( d )
        # if loginStatusList is None:
        #     z.toast( "登陆新场景,现无法判断登陆状态" )
        #     now = datetime.datetime.now( )
        #     nowtime = now.strftime( '%Y-%m-%d %H:%M:%S' )  # 将日期转化为字符串 datetime => string
        #     cache.set( '%s_MMCQQAddfriendsByNumber_time' % d.server.adb.device_serial( ), nowtime,
        #                None )
        #     z.toast( '模块结束,保存的时间是%s' % nowtime )
        #     return
        # loginStatus = loginStatusList['success']
        # if loginStatus:
        #     z.toast( "卡槽QQ状态正常,继续执行" )
        # else:
        #     z.toast( "卡槽QQ状态异常,跳过此模块" )
        #     now = datetime.datetime.now( )
        #     nowtime = now.strftime( '%Y-%m-%d %H:%M:%S' )  # 将日期转化为字符串 datetime => string
        #     cache.set( '%s_MMCQQAddfriendsByNumber_time' % d.server.adb.device_serial( ), nowtime,
        #                None )
        #     z.toast( '模块结束,保存的时间是%s' % nowtime )
        #     return
        if d(text="消息",
             resourceId="com.tencent.mobileqq:id/ivTitleName",
             className="android.widget.TextView").exists:
            z.toast("登录状态正常")
        elif d(text='绑定手机号码').exists:
            while d(text='关闭').exists:
                d(text='关闭').click()
                z.sleep(0.5)
            z.sleep(1)
        elif d(text='主题装扮').exists:
            while d(text='关闭').exists:
                d(text='关闭').click()
                z.sleep(0.5)
        elif d(text='马上绑定').exists:
            while d(text='关闭').exists:
                d(text='关闭').click()
                z.sleep(0.5)
        else:
            z.toast("登录状态异常,停止模块")
            now = datetime.datetime.now()
            nowtime = now.strftime(
                '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
            z.setModuleLastRun(self.mid)
            z.toast('模块结束,保存的时间是%s' % nowtime)
            return

        d(description='快捷入口').click()
        z.sleep(2)
        if not d(text='扫一扫').exists:
            d(description='快捷入口').click()
            z.sleep(1)
        z.heartbeat()
        if d(textContains='加好友').exists:
            d(textContains='加好友').click()
        else:
            d(resourceId='com.tencent.mobileqq:id/name',
              description='快捷入口').click()
            d(textContains='加好友').click()
        z.sleep(1)
        d(className='android.widget.EditText',
          index=0).click()  # 刚进来时点击 QQ号/手机号/群/公众号
        z.sleep(1)
        # d(className='android.widget.EditText',index=0).click()   #QQ号/手机号/群/公众号
        # d(className='android.widget.EditText').set_text(list[0]['number'])  # 第一次添加的帐号 list[0]
        cate_id = int(args["repo_number_cate_id"])  # 得到取号码的仓库号
        numbers = self.repo.GetNumber(cate_id, 120,
                                      1)  # 取出add_count条两小时内没有用过的号码
        if len(numbers) == 0:
            d.server.adb.cmd(
                "shell",
                "am broadcast -a com.zunyun.zime.toast --es msg \"QQ号码库%s号仓库为空,等待中\""
                % cate_id).communicate()
            z.sleep(10)
            if (args["time_delay"]):
                z.sleep(int(args["time_delay"]))
            now = datetime.datetime.now()
            nowtime = now.strftime(
                '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
            z.setModuleLastRun(self.mid)
            z.toast('模块结束,保存的时间是%s' % nowtime)
            return
        z.heartbeat()
        numbers = numbers[0]['number']
        z.input(numbers)
        time.sleep(0.5)
        d(text='找人:', resourceId='com.tencent.mobileqq:id/name').click()
        z.sleep(3)
        add_count = int(args["add_count"])
        cate_id1 = args["repo_material_cate_id"]
        z.heartbeat()
        for i in range(1, add_count + 1, +1):  # 给多少人发消息
            Material = self.repo.GetMaterial(cate_id1, 0, 1)
            if len(Material) == 0:
                d.server.adb.cmd(
                    "shell",
                    "am broadcast -a com.zunyun.zime.toast --es msg \"消息素材%s号仓库为空,没有取到消息\""
                    % cate_id1).communicate()
                z.sleep(10)
                if (args["time_delay"]):
                    z.sleep(int(args["time_delay"]))
                now = datetime.datetime.now()
                nowtime = now.strftime(
                    '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
                z.setModuleLastRun(self.mid)
                z.toast('模块结束,保存的时间是%s' % nowtime)
                return
            message = Material[0]['content']  # 取出验证消息的内容

            cate_id = int(args["repo_number_cate_id"])  # 得到取号码的仓库号
            numbers = self.repo.GetNumber(cate_id, 120,
                                          1)  # 取出add_count条两小时内没有用过的号码
            if len(numbers) == 0:
                d.server.adb.cmd(
                    "shell",
                    "am broadcast -a com.zunyun.zime.toast --es msg \"QQ号码库%s号仓库为空,等待中\""
                    % cate_id).communicate()
                z.sleep(10)
                if (args["time_delay"]):
                    z.sleep(int(args["time_delay"]))
                now = datetime.datetime.now()
                nowtime = now.strftime(
                    '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
                z.setModuleLastRun(self.mid)
                z.toast('模块结束,保存的时间是%s' % nowtime)
                return
            z.heartbeat()
            numbers = numbers[0]['number']
            print(numbers)
            z.sleep(1)
            if d(text='没有找到相关结果',
                 className='android.widget.TextView').exists:  # 没有这个人的情况
                time.sleep(0.5)
                d(resourceId='com.tencent.mobileqq:id/ib_clear_text',
                  description='清空').click()
                obj = d(className='android.widget.EditText',
                        index=0)  # QQ号/手机号/群/公众号
                if obj.exists:
                    obj.set_text(numbers)  # 下次要添加的号码
                obj = d(text='网络查找人',
                        resourceId='com.tencent.mobileqq:id/et_search_keyword')
                if obj.exists:
                    obj.set_text(numbers)  # 下次要添加的号码
                d(textContains='找人').click()
                while d(text='正在搜索…', index=1).exists:  # 网速不行的情况,让它不停等待
                    z.sleep(1)
                continue
            z.sleep(1)
            z.heartbeat()
            # d.swipe(width / 2, height * 4 / 6, width / 2, height / 6);
            d(text='加好友').click()
            z.sleep(3)
            if d(text="风险提示").exists:  # 风险提示
                d(text="取消").click()
                z.sleep(1)
                d(text='返回',
                  resourceId='com.tencent.mobileqq:id/ivTitleBtnLeft').click()
                d(resourceId='com.tencent.mobileqq:id/ib_clear_text',
                  description='清空').click()
                obj = d(className='android.widget.EditText', index=0)
                if obj.exists:
                    obj.set_text(
                        numbers)  # 要改为从库里取------------------------------
                obj = d(text='网络查找人',
                        resourceId='com.tencent.mobileqq:id/et_search_keyword')
                if obj.exists:
                    obj.set_text(numbers)
                z.sleep(1)
                d(textContains='找人').click()
                while d(text='正在搜索…', index=1).exists:
                    z.sleep(1)
                continue

            if d(text='加好友').exists:  # 拒绝被添加为好友的情况
                z.sleep(1)
                d(text='返回',
                  resourceId='com.tencent.mobileqq:id/ivTitleBtnLeft').click()
                d(resourceId='com.tencent.mobileqq:id/ib_clear_text',
                  description='清空').click()
                obj = d(className='android.widget.EditText', index=0)
                if obj.exists:
                    obj.set_text(
                        numbers)  # 要改为从库里取------------------------------
                obj = d(text='网络查找人',
                        resourceId='com.tencent.mobileqq:id/et_search_keyword')
                if obj.exists:
                    obj.set_text(numbers)
                z.sleep(1)
                d(textContains='找人').click()
                while d(text='正在搜索…', index=1).exists:
                    z.sleep(1)
                continue
            time.sleep(0.5)

            z.heartbeat()
            if d(text='必填',
                 resourceId='com.tencent.mobileqq:id/name').exists:  # 要回答问题的情况
                d(text='返回',
                  resourceId='com.tencent.mobileqq:id/ivTitleBtnLeft').click()
                z.sleep(1)
                d(text='返回',
                  resourceId='com.tencent.mobileqq:id/ivTitleBtnLeft').click()
                d(resourceId='com.tencent.mobileqq:id/ib_clear_text',
                  description='清空').click()
                obj = d(className='android.widget.EditText', index=0)
                if obj.exists:
                    obj.set_text(numbers)  # 下次要添加的号码-
                obj = d(text='网络查找人',
                        resourceId='com.tencent.mobileqq:id/et_search_keyword')
                if obj.exists:
                    obj.set_text(numbers)
                z.sleep(1)
                d(textContains='找人').click()
                while d(text='正在搜索…', index=1).exists:
                    z.sleep(1)
                continue

            z.heartbeat()
            if d(textContains='问题').exists:  # 要回答问题的情况
                d(text='取消').click()
                z.sleep(0.5)
                d(text='返回').click()
                d(resourceId='com.tencent.mobileqq:id/ib_clear_text',
                  description='清空').click()
                obj = d(className='android.widget.EditText', index=0)
                if obj.exists:
                    obj.set_text(numbers)  # 下次要添加的号码-
                obj = d(text='网络查找人',
                        resourceId='com.tencent.mobileqq:id/et_search_keyword')
                if obj.exists:
                    obj.click()
                    z.input(numbers)
                z.sleep(1)
                d(textContains='找人').click()
                while d(text='正在搜索…', index=1).exists:
                    z.sleep(1)
                continue

            z.heartbeat()
            z.sleep(0.5)
            obj = d(
                className='android.widget.EditText',
                resourceId='com.tencent.mobileqq:id/name').info  # 将之前消息框的内容删除
            obj = obj['text']
            lenth = len(obj)
            t = 0
            while t < lenth:
                d.press.delete()
                t = t + 1
            if d(className='android.widget.EditText', index=4).exists:
                z.input(message)
            obj = d(text='发送')  # 不需要验证可直接添加为好友的情况
            if obj.exists:
                z.heartbeat()
                obj.click()
                if d(text='添加失败,请勿频繁操作',
                     resourceId='com.tencent.mobileqq:id/name').exists:
                    if (args["time_delay"]):
                        z.sleep(int(args["time_delay"]))
                    now = datetime.datetime.now()
                    nowtime = now.strftime(
                        '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
                    cache.set(
                        '%s_MMCQQAddfriendsByNumber_time' %
                        d.server.adb.device_serial(), nowtime, None)
                    z.toast('模块结束,保存的时间是%s' % nowtime)
                    return
                d(text='返回').click()
                if add_count == i + 1:
                    if (args["time_delay"]):
                        z.sleep(int(args["time_delay"]))
                    now = datetime.datetime.now()
                    nowtime = now.strftime(
                        '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
                    z.setModuleLastRun(self.mid)
                    z.toast('模块结束,保存的时间是%s' % nowtime)
                    return
                d(description='清空').click()
                obj = d(className='android.widget.EditText', index=0)
                if obj.exists:
                    obj.set_text(
                        numbers)  # 要改为从库里取-------------------------------
                obj = d(text='网络查找人',
                        resourceId='com.tencent.mobileqq:id/et_search_keyword')
                if obj.exists:
                    obj.set_text(numbers)
                d(textContains='找人').click()
                while d(text='正在搜索…', index=1).exists:
                    z.sleep(1)
                continue
        now = datetime.datetime.now()
        nowtime = now.strftime(
            '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
        z.setModuleLastRun(self.mid)
        z.toast('模块结束,保存的时间是%s' % nowtime)
        return
        if (args["time_delay"]):
            time.sleep(int(args["time_delay"]))
Ejemplo n.º 17
0
    def action(self, d, z, args):
        condition = self.timeinterval(d, z, args)
        if condition == 'end':
            z.sleep(2)
            return
        z.heartbeat()
        add_count = int(args['add_count'])

        cate_id = args["repo_material_id"]
        Material = self.repo.GetMaterial(cate_id, 0, 1)
        if len(Material) == 0:
            d.server.adb.cmd(
                "shell",
                "am broadcast -a com.zunyun.zime.toast --es msg \"消息素材%s号仓库为空,等待中……\""
                % cate_id).communicate()
            z.sleep(10)
            return
        message = Material[0]['content']  # 取出验证消息的内容

        d.press.home()
        if d(text='微信').exists:
            d(text='微信').click()
        else:
            # d.swipe( width - 20, height / 2, 0, height / 2, 5 )
            z.toast('该页面没有微信')
            z.sleep(2)
            return
        z.sleep(5)
        while True:
            if d(text='发现') and d(text='我') and d(text='通讯录').exists:
                break
            else:
                d(descriptionContains='返回',
                  className='android.widget.ImageView').click()

        d(description='更多功能按钮',
          className='android.widget.RelativeLayout').click()
        z.sleep(1)
        if d(text='添加朋友').exists:
            d(text='添加朋友').click()
        else:
            d(description='更多功能按钮',
              className='android.widget.RelativeLayout').click()
            z.sleep(1)
            d(text='添加朋友').click()
        z.heartbeat()
        d(index='1', className='android.widget.TextView').click()  #点击搜索好友的输入框
        account = 0
        while True:
            if account < add_count:
                cate_id = int(args["repo_number_id"])  # 得到取号码的仓库号
                number_count = 1  #每次取一个号码
                while True:
                    exist_numbers = self.repo.GetNumber(
                        cate_id, 0, number_count, 'exist')
                    print(exist_numbers)
                    remain = number_count - len(exist_numbers)
                    normal_numbers = self.repo.GetNumber(
                        cate_id, 0, remain, 'normal')
                    numbers = exist_numbers + normal_numbers
                    if len(numbers) > 0:
                        break
                    d.server.adb.cmd(
                        "shell",
                        "am broadcast -a com.zunyun.zime.toast --es msg \"电话号码%s号仓库为空,等待中\""
                        % cate_id).communicate()
                    z.sleep(30)
                WXnumber = numbers[0]['number']
                z.input(WXnumber)
                z.heartbeat()
                d(textContains='搜索:').click()
                while d(textContains='正在查找').exists:
                    z.sleep(2)
                if d(textContains='操作过于频繁').exists:
                    now = datetime.datetime.now()
                    nowtime = now.strftime(
                        '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => stringk
                    cache.set(
                        '%s_WXSearchAddDepostII_time' %
                        d.server.adb.device_serial(), nowtime, None)
                    z.toast('模块结束,保存的时间是%s' % nowtime)
                    return
                z.sleep(2)
                if d(textContains='用户不存在').exists:
                    d(descriptionContains='清除', index=2).click()
                    z.sleep(1)
                    continue
                if d(textContains='状态异常').exists:
                    d(descriptionContains='清除', index=2).click()
                    continue
                z.heartbeat()

                Gender = d(className='android.widget.LinearLayout',
                           index=1).child(
                               className='android.widget.LinearLayout').child(
                                   className='android.widget.ImageView',
                                   index=1)  # 看性别是否有显示
                if Gender.exists:
                    Gender = Gender.info
                    Gender = Gender['contentDescription']
                else:
                    Gender = '空'
                z.heartbeat()
                nickname = d( className='android.widget.ListView' ).child( className='android.widget.LinearLayout',
                                                                           index=1 ) \
                    .child( className='android.widget.LinearLayout', index=1 ).child(
                    className='android.widget.TextView' )
                if nickname.exists:
                    nickname = nickname.info['text']
                else:
                    nickname = '空'
                z.heartbeat()
                if d(text='地区').exists:
                    for k in range(3, 10):
                        if d(className='android.widget.ListView').child(
                                className='android.widget.LinearLayout',
                                index=k).child(
                                    className='android.widget.LinearLayout',
                                    index=0).child(text='地区').exists:
                            break
                    area = d( className='android.widget.ListView' ).child( className='android.widget.LinearLayout',
                                                                           index=k ).child(
                        className='android.widget.LinearLayout', index=0 ). \
                        child( className='android.widget.LinearLayout', index=1 ).child(
                        className='android.widget.TextView' ).info['text']
                else:
                    area = '空'
                z.heartbeat()
                if d(text='个性签名').exists:
                    for k in range(3, 10):
                        if d(className='android.widget.ListView').child(
                                className='android.widget.LinearLayout',
                                index=k).child(
                                    className='android.widget.LinearLayout',
                                    index=0).child(text='个性签名').exists:
                            break
                    sign = d( className='android.widget.ListView' ).child( className='android.widget.LinearLayout',
                                                                           index=k ).child(
                        className='android.widget.LinearLayout', index=0 ). \
                        child( className='android.widget.LinearLayout', index=1 ).child(
                        className='android.widget.TextView' ).info['text']
                else:
                    sign = '空'
                z.heartbeat()
                '''
                得到搜索人的v1值
                '''
                serial = z.wx_userList()
                ids = list(json.loads(serial))[0]  # 将字符串改为list样式
                print(ids)
                onlyInfo = args['onlyInfo']
                if onlyInfo == '是':
                    para = {"phoneNumber": WXnumber, 'x_20': ids}
                    self.repo.PostInformation(args["repo_cate_id"], para)
                    z.toast("%s入库完成" % WXnumber)
                    d(descriptionContains='返回').click()
                    d(descriptionContains='清除').click()
                    continue

                z.heartbeat()
                z.sleep(1)
                if d(text='添加到通讯录').exists:  #存在联系人的情况
                    d(text='添加到通讯录').click()
                    if d(textContains='正在添加').exists:
                        z.sleep(1)
                    if d(text='发消息').exists:
                        seltype = '单向'
                    else:
                        seltype = '混合'
                    para = {
                        "phoneNumber": WXnumber,
                        'x_01': nickname,
                        'x_02': Gender,
                        "x_03": area,
                        "x_04": sign,
                        'x_05': seltype,
                        'x_20': ids
                    }
                    print('--%s--%s--%s--%s--%s' %
                          (WXnumber, nickname, Gender, area, sign))
                    self.repo.PostInformation(args["repo_cate_id"], para)
                    z.toast("%s入库完成" % WXnumber)

                    gender = args['gender']
                    if gender != '不限':
                        if Gender != gender:  # 看性别是否满足条件
                            d(description='返回').click()
                            d(description='返回').click()
                            d(descriptionContains='清除').click()
                            para = {
                                "phoneNumber": WXnumber,
                                'x_01': nickname,
                                'x_02': Gender,
                                "x_03": area,
                                "x_04": sign,
                                'x_05': seltype,
                                'x_20': ids
                            }
                            print('--%s--%s--%s--%s--%s' %
                                  (WXnumber, nickname, Gender, area, sign))
                            self.repo.PostInformation(args["repo_cate_id"],
                                                      para)
                            z.toast("%s入库完成" % WXnumber)
                            continue

                    if d(text='发消息').exists:
                        d(descriptionContains='返回').click()
                        d(descriptionContains='清除').click()
                        continue

                else:
                    continue
                z.sleep(2)

                obj = d(
                    className='android.widget.EditText').info  # 将之前消息框的内容删除
                obj = obj['text']
                lenth = len(obj)
                t = 0
                while t < lenth:
                    d.press.delete()
                    t = t + 1
                d(className='android.widget.EditText').click()
                z.input(message)
                d(text='发送').click()
                z.heartbeat()
                d(descriptionContains='返回').click()
                d(descriptionContains='清除').click()
                z.sleep(1)
                account = account + 1
                continue
            else:
                break

        now = datetime.datetime.now()
        nowtime = now.strftime(
            '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => stringk
        cache.set('%s_WXSearchAddDepostII_time' % d.server.adb.device_serial(),
                  nowtime, None)
        #z.toast('模块结束,保存的时间是%s'%nowtime)
        if (args["time_delay"]):
            z.sleep(int(args["time_delay"]))
Ejemplo n.º 18
0
    def action(self, d,z, args):
        condition = self.timeinterval( d, z, args )
        if condition == 'end':
            z.sleep( 2 )
            return
        z.heartbeat()
        base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__),os.path.pardir, "tmp"))
        if not os.path.isdir(base_dir):
            os.mkdir(base_dir)
        filename = os.path.join(base_dir, "%s.txt"%(self.GetUnique()) )

        number_count = int(args['number_count'])
        cate_id = args["repo_cate_id"]
        while True:
            exist_numbers = self.repo.GetNumber(cate_id, 0, number_count, 'exist')
            print(exist_numbers)
            remain = number_count - len(exist_numbers)
            normal_numbers = self.repo.GetNumber(cate_id, 0, remain, 'normal')
            numbers = exist_numbers + normal_numbers
            if len(numbers)> 0:
                break

            d.server.adb.cmd("shell", "am broadcast -a com.zunyun.zime.toast --es msg \"电话号码%s号仓库为空,等待中\""%cate_id).communicate()
            z.sleep(30)

        if numbers:
            file_object = open(filename, 'w')
            lines = ""
            pname = ""
            for number in numbers:
                if number["name"] is None:
                    pname = number["number"]
                else:
                    pname = number["name"]
                lines = "%s%s----%s\r" %(lines, pname, number["number"])

            file_object.writelines(lines)
            file_object.close()
            isclear = args['clear']
            if isclear=='是':
                d.server.adb.cmd("shell", "pm clear com.android.providers.contacts").communicate()

            #d.server.adb.cmd("shell", "am", "start", "-a", "zime.clear.contacts").communicate()
            d.server.adb.cmd("push", filename, "/data/local/tmp/contacts.txt").communicate()
            d.server.adb.cmd("shell", "am", "start", "-n", "com.zunyun.zime/.ImportActivity", "-t", "text/plain", "-d",
                             "file:////data/local/tmp/contacts.txt").communicate()


            #d.server.adb.cmd("shell", "am broadcast -a com.zunyun.import.contact --es file \"file:///data/local/tmp/contacts.txt\"").communicate()
            os.remove(filename)

            out = d.server.adb.cmd("shell",
                               "dumpsys activity top  | grep ACTIVITY").communicate()[0].decode('utf-8')
            while out.find("com.zunyun.zime/.ImportActivity") > -1:
                z.heartbeat()
                out = d.server.adb.cmd("shell",
                                   "dumpsys activity top  | grep ACTIVITY").communicate()[0].decode('utf-8')
                z.sleep(5)

        now = datetime.datetime.now( )
        nowtime = now.strftime( '%Y-%m-%d %H:%M:%S' )  # 将日期转化为字符串 datetime => string
        cache.set( '%s_WXImpContact_time' % d.server.adb.device_serial( ), nowtime,None )
        z.toast('模块结束,保存的时间是%s'%nowtime)

        if (args["time_delay"]):
            z.sleep(int(args["time_delay"]))
Ejemplo n.º 19
0
    def getCode(self, im, im_type, timeout=60):
        import base64
        #f = open(r'c:\jb51.gif', 'rb')  # 二进制方式打开图文件
        if isinstance(im, str):
            ls_f = base64.b64encode(im)
        else:
            ls_f = base64.b64encode(im.read())  # 读取文件内容,转换为base64编码
            im.close()
        #f.close()
        params = {
            "ts": int(time.time()),
            "softwareId": self.soft_id,
            "software": self.soft_name,
            "sdk": "PYTHON/1.0",
            "username": self.username,
            "userPassword": self.password,
            "captchaData": ls_f,
            "captchaType": 1,
            "captchaMinLength": 4,
            "captchaMaxLength": 8
        }
        params = json.dumps(params)
        sign = params + "|" + self.soft_secret
        import hashlib
        m2 = hashlib.md5()
        m2.update(sign)
        sign = m2.hexdigest()

        headers = {'L-Request-Signature': sign}
        headers.update(self.headers)
        requests.adapters.DEFAULT_RETRIES = 5
        request = urllib2.Request(url='https://api.jsdama.com/upload',
                                  headers=headers,
                                  data=params)
        response = urllib2.urlopen(request)

        r = response.read()
        #r = requests.post('https://api.jsdama.com/upload', data=params, headers=self.headers)
        result = json.loads(r)
        if result["errorCode"] == 0:
            params = {
                "ts": int(time.time()),
                "softwareId": self.soft_id,
                "software": self.soft_name,
                "sdk": "PYTHON/1.0",
                "username": self.username,
                "userPassword": self.password,
                "captchaId": result["data"]["captchaId"]
            }
            params = json.dumps(params)
            sign = params + "|" + self.soft_secret
            import hashlib
            m2 = hashlib.md5()
            m2.update(sign)
            sign = m2.hexdigest()

            headers = {'L-Request-Signature': sign}
            headers.update(self.headers)
            requests.adapters.DEFAULT_RETRIES = 5
            request = urllib2.Request(url='https://api.jsdama.com/recognition',
                                      headers=headers,
                                      data=params)
            response = urllib2.urlopen(request)

            r = response.read()
            result = json.loads(r)
            if result["errorCode"] == 0:
                return {
                    "Result": result["data"]["recognition"],
                    "Id": result["data"]["captchaId"]
                }
        else:
            if not cache.get("LIANZONG_CODE_ERROR"):
                cache.set("LIANZONG_CODE_ERROR", True)
                dbapi.log_error("", "联众打码异常", result["errorMessage"])
                return
Ejemplo n.º 20
0
    def action(self, d, z, args):
        condition = self.timeinterval(d, z, args)
        if condition == 'end':
            z.toast('时间间隔不满足')
            z.sleep(2)
            return
        z.heartbeat()
        d.server.adb.cmd(
            "shell", "am force-stop com.tencent.mm").communicate()  # 将微信强制停止
        d.server.adb.cmd(
            "shell", "am start -n com.tencent.mm/com.tencent.mm.ui.LauncherUI"
        ).communicate()  # 将微信拉起来
        z.sleep(7)
        cate_id = args['repo_wxcade_id']
        d(text='发现').click()
        d(textContains='附近的人').click()
        z.sleep(1)
        if d(text='开始查看').exists:
            d(text='开始查看').click()
            d(text='下次不提示').click()
            d(text='确定').click()
        z.sleep(2)

        if d(text='查看附近的人').exists:
            d(text='查看附近的人').click()
        while True:
            if d(description='更多').exists:
                break
            else:
                z.sleep(2)
        d(description='更多').click()
        gender = args['gender']
        if gender == '男':
            d(text='只看男生').click()
            z.sleep(5)
        elif gender == "女":
            d(text='只看女生').click()
            z.sleep(5)
        else:
            d(text='查看全部').click()
            z.sleep(5)

        serial = z.wx_action("opennearui")  # 得到微信id,unicode样式
        serial1 = z.wx_userList()

        #print(serial)
        ids = json.loads(serial)  # 将unicode转换为idct
        allwxid = (list(ids))  #将所有的微信id由dict转换为list
        #print(allwxid)
        lenth = len(allwxid)
        z.heartbeat()

        for i in range(lenth):
            z.heartbeat()
            wxid = allwxid[i]  #得到key值,也就是微信v1值
            logging.info(wxid)
            if 'v1_' not in wxid:
                continue
            self.repo.uploadPhoneNumber(wxid, cate_id)

        now = datetime.datetime.now()
        nowtime = now.strftime(
            '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
        cache.set('%s_WXSaveId_time' % d.server.adb.device_serial(), nowtime,
                  None)
        z.toast('模块结束,保存的时间是%s' % nowtime)

        if (args["time_delay"]):
            z.sleep(int(args["time_delay"]))
Ejemplo n.º 21
0
    def action(self, d, z, args):
        condition = self.timeinterval(d, z, args)
        if condition == 'end':
            z.sleep(2)
            return
        z.heartbeat()
        str = d.info  # 获取屏幕大小等信息
        height = str["displayHeight"]
        width = str["displayWidth"]

        d.press.home()
        if d(text='微信').exists:
            d(text='微信').click()

        else:
            #d.swipe( width - 20, height / 2, 0, height / 2, 5 )
            z.toast('该页面没有微信')
            z.sleep(2)
            return
        z.sleep(5)
        while True:
            if d(text='发现') and d(text='我') and d(text='通讯录').exists:
                break
            else:
                d(descriptionContains='返回',
                  className='android.widget.ImageView').click()

        d(description='更多功能按钮').click()
        d(textContains='添加朋友').click()
        d(textContains='手机联系人').click()
        d(text='添加手机联系人').click()
        while d(textContains='正在获取').exists:
            z.sleep(3)
        z.heartbeat()
        set1 = set()
        change = 0
        i = 0
        t = 0
        endcon = 0
        EndIndex = int(args['EndIndex'])  #------------------
        while True:
            cate_id = args["repo_material_id"]  #------------------
            Material = self.repo.GetMaterial(cate_id, 0, 1)
            if len(Material) == 0:
                d.server.adb.cmd(
                    "shell",
                    "am broadcast -a com.zunyun.zime.toast --es msg \"消息素材%s号仓库为空,没有取到消息\""
                    % cate_id).communicate()
                z.sleep(10)
                return
            message = Material[0]['content']  # 从素材库取出的要发的材料
            z.sleep(1)
            wxname = d(className='android.widget.ListView').child(className='android.widget.LinearLayout', index=i)\
                .child(className='android.widget.LinearLayout').child(className='android.widget.LinearLayout',index=1).child(textContains='微信:')     #得到微信名
            if wxname.exists:
                '''
                得到电话号
                '''
                phone = d(className='android.widget.ListView').child(
                    className='android.widget.LinearLayout', index=i).child(
                        className='android.widget.LinearLayout').child(
                            className='android.widget.LinearLayout',
                            index=1).child(className='android.widget.TextView',
                                           index=0)
                phonenumber = phone.info['text']

                z.heartbeat()
                alreadyAdd = d(className='android.widget.ListView').child(
                    className='android.widget.LinearLayout',
                    index=i).child(className='android.widget.LinearLayout',
                                   index=0).child(
                                       className='android.widget.FrameLayout',
                                       index=2).child(
                                           text='已添加')  # 该编号好友已经被添加的情况
                if alreadyAdd.exists:
                    i = i + 1
                    continue

                change = 1  #好友存在且未被添加的情况出现,change值改变
                '''
                微信名
                '''
                wxname = wxname.info
                name = wxname['text']
                z.heartbeat()
                if name in set1:  #判断是否已经给该人发过消息
                    i = i + 1
                    continue
                else:
                    set1.add(name)
                print(name)
                endcon = 1
                d(className='android.widget.ListView',index=0).child(className='android.widget.LinearLayout',index=i).\
                    child(className='android.widget.LinearLayout').child(className='android.widget.LinearLayout',index=1).click()      #点击第i个人
                '''
                得到性别
                '''
                Gender = d(className='android.widget.LinearLayout',
                           index=1).child(
                               className='android.widget.LinearLayout').child(
                                   className='android.widget.ImageView',
                                   index=1)  # 看性别是否有显示
                if Gender.exists:
                    z.heartbeat()
                    Gender = Gender.info
                    Gender = Gender['contentDescription']
                else:
                    Gender = '空'

                z.heartbeat()
                if d(text='地区').exists:
                    for k in range(3, 10):
                        if d(className='android.widget.ListView').child(
                                className='android.widget.LinearLayout',
                                index=k).child(
                                    className='android.widget.LinearLayout',
                                    index=0).child(text='地区').exists:
                            break
                    area = d( className='android.widget.ListView' ).child( className='android.widget.LinearLayout',
                                                                           index=k ).child(
                        className='android.widget.LinearLayout', index=0 ). \
                        child( className='android.widget.LinearLayout', index=1 ).child(
                        className='android.widget.TextView' ).info['text']
                else:
                    area = '空'
                z.heartbeat()
                if d(text='个性签名').exists:
                    for k in range(3, 10):
                        if d(className='android.widget.ListView').child(
                                className='android.widget.LinearLayout',
                                index=k).child(
                                    className='android.widget.LinearLayout',
                                    index=0).child(text='个性签名').exists:
                            break
                    sign = d( className='android.widget.ListView' ).child( className='android.widget.LinearLayout',
                                                                           index=k ).child(
                        className='android.widget.LinearLayout', index=0 ). \
                        child( className='android.widget.LinearLayout', index=1 ).child(
                        className='android.widget.TextView' ).info['text']
                else:
                    sign = '空'

                print('%s--%s--%s--%s--%s' %
                      (phonenumber, name, Gender, sign, area))

                z.heartbeat()
                if d(text='添加到通讯录').exists:
                    d(text='添加到通讯录').click()
                    if d(textContains='正在添加').exists:
                        z.sleep(1)
                    time.sleep(1)
                    if d(text='发消息').exists:
                        danxiang = '单向'
                        para = {
                            "phoneNumber": phonenumber,
                            'x_01': name,
                            'x_02': Gender,
                            "x_03": area,
                            "x_04": sign,
                            "x_05": danxiang
                        }
                        self.repo.PostInformation(args["repo_cate_id"], para)
                        z.toast("%s入库完成" % phonenumber)
                        d(description='返回').click()
                        i = i + 1
                        continue

                elif d(text='通过验证').exists:
                    d(text='通过验证').click()
                    d(description='返回').click()
                    danxiang = '未知'
                    para = {
                        "phoneNumber": phonenumber,
                        'x_01': name,
                        'x_02': Gender,
                        "x_03": area,
                        "x_04": sign,
                        "x_05": danxiang
                    }
                    self.repo.PostInformation(args["repo_cate_id"], para)
                    z.toast("%s入库完成" % phonenumber)
                    d(description='返回').click()
                    i = i + 1
                    continue

                else:
                    danxiang = '未知'
                    para = {
                        "phoneNumber": phonenumber,
                        'x_01': name,
                        'x_02': Gender,
                        "x_03": area,
                        "x_04": sign,
                        "x_05": danxiang
                    }
                    self.repo.PostInformation(args["repo_cate_id"], para)
                    z.toast("%s入库完成" % phonenumber)
                    d(description='返回').click()
                    i = i + 1
                    continue

                danxiang = '非单项'  #有添加到通讯录且非单项的情况
                GenderFrom = args[
                    'gender']  # -------------------------------外界设定的性别
                if GenderFrom != '不限':
                    if Gender != GenderFrom:  #如果性别不符号的情况
                        para = {
                            "phoneNumber": phonenumber,
                            'x_01': name,
                            'x_02': Gender,
                            "x_03": area,
                            "x_04": sign,
                            "x_05": danxiang
                        }
                        self.repo.PostInformation(args["repo_cate_id"], para)
                        z.toast("%s入库完成" % phonenumber)
                        d(description='返回').click()
                        d(description='返回').click()
                        i = i + 1
                        continue

                para = {
                    "phoneNumber": phonenumber,
                    'x_01': name,
                    'x_02': Gender,
                    "x_03": area,
                    "x_04": sign,
                    "x_05": danxiang
                }
                self.repo.PostInformation(args["repo_cate_id"], para)
                z.toast("%s入库完成" % phonenumber)
                z.sleep(1)
                if t < EndIndex:
                    deltext = d(className='android.widget.EditText',
                                index=1).info  # 将之前消息框的内容删除
                    deltext = deltext['text']
                    lenth = len(deltext)
                    m = 0
                    while m < lenth:
                        d.press.delete()
                        m = m + 1
                    z.heartbeat()
                    d(className='android.widget.EditText', index=1).click()
                    z.input(message)  #----------------------------------------
                    d(text='发送').click()
                    z.sleep(1)
                    d(description='返回').click()
                    i = i + 1
                    t = t + 1
                    continue
                else:
                    d(description='返回').click()
                    d(description='返回').click()
                    i = i + 1
                    continue

            else:
                if change == 0:  #一次还没有点击到人
                    if i == 1:  #通讯录没有人的情况
                        now = datetime.datetime.now()
                        nowtime = now.strftime(
                            '%Y-%m-%d %H:%M:%S'
                        )  # 将日期转化为字符串 datetime => string
                        cache.set(
                            '%s_WXAddAddressList_time' %
                            d.server.adb.device_serial(), nowtime, None)
                        z.toast('模块结束,保存的时间是%s' % nowtime)

                        return
                    d.swipe(width / 2, height * 6 / 7, width / 2, height / 7)
                    i = 1
                    continue
                else:
                    if endcon == 0:
                        z.toast('全部发送完成')

                        now = datetime.datetime.now()
                        nowtime = now.strftime(
                            '%Y-%m-%d %H:%M:%S'
                        )  # 将日期转化为字符串 datetime => string
                        cache.set(
                            '%s_WXAddAddressList_time' %
                            d.server.adb.device_serial(), nowtime, None)
                        z.toast('模块结束,保存的时间是%s' % nowtime)

                        if (args["time_delay"]):
                            z.sleep(int(args["time_delay"]))
                        return
                    d.swipe(width / 2, height * 6 / 7, width / 2, height / 7)
                    i = 1
                    endcon = 0
Ejemplo n.º 22
0
    def action(self, d, z, args):
        startTime = args["startTime"]
        endTime = args["endTime"]
        try:
            if self.repo.timeCompare(startTime, endTime):
                z.toast("该时间段不允许运行")
                return
        except:
            z.toast("输入的时间格式错误,请检查后再试")
            return
        set_timeStart = int(args['set_timeStart'])  # 得到设定的时间
        set_timeEnd = int(args["set_timeEnd"])
        run_time = float(random.randint(set_timeStart, set_timeEnd))
        run_interval = z.getModuleRunInterval(self.mid)
        if run_interval is not None and run_interval < run_time:
            z.toast(u'锁定时间还差:%d分钟' % int(run_time - run_interval))
            z.sleep(2)
            return
        z.toast("准备执行MMS版QQ关注我赞的人模块")
        z.sleep(1)
        z.toast("正在ping网络是否通畅")
        z.heartbeat()
        i = 0
        while i < 200:
            i += 1
            ping = d.server.adb.cmd("shell",
                                    "ping -c 3 baidu.com").communicate()
            print(ping)
            if 'icmp_seq' and 'bytes from' and 'time' in ping[0]:
                z.toast("网络通畅。开始执行:MMS版QQ关注我赞的人模块")
                break
            z.sleep(2)
        if i > 200:
            z.toast("网络不通,请检查网络状态")
            if (args["time_delay"]):
                z.sleep(int(args["time_delay"]))
            return
        self.scode = smsCode(d.server.adb.device_serial())
        z.heartbeat()
        d.server.adb.cmd(
            "shell",
            "am force-stop com.tencent.mobileqq").communicate()  # 强制停止
        d.server.adb.cmd(
            "shell",
            "am start -n com.tencent.mobileqq/com.tencent.mobileqq.activity.SplashActivity"
        ).communicate()  # 拉起来
        z.sleep(10)
        z.heartbeat()
        if d(text="消息",
             resourceId="com.tencent.mobileqq:id/ivTitleName",
             className="android.widget.TextView").exists:
            z.toast("登录状态正常")
        elif d(text='绑定手机号码').exists:
            while d(text='关闭').exists:
                d(text='关闭').click()
                z.sleep(0.5)
            z.sleep(1)
        elif d(text='主题装扮').exists:
            while d(text='关闭').exists:
                d(text='关闭').click()
                z.sleep(0.5)
        elif d(text='马上绑定').exists:
            while d(text='关闭').exists:
                d(text='关闭').click()
                z.sleep(0.5)
        else:
            z.toast("登录状态异常,停止模块")
            now = datetime.datetime.now()
            nowtime = now.strftime(
                '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
            z.setModuleLastRun(self.mid)
            z.toast('模块结束,保存的时间是%s' % nowtime)
            return
        str = d.info  # 获取屏幕大小等信息
        height = str["displayHeight"]
        width = str["displayWidth"]
        z.heartbeat()
        if d(text='绑定手机号码').exists:
            d(text='关闭').click()
        if d(textContains='匹配').exists:
            d.press.back()
        z.heartbeat()
        while not d(text='附近的人', className="android.widget.TextView").exists:
            if d(index=2, text="动态",
                 className="android.widget.TextView").exists:
                d(index=2, text="动态",
                  className="android.widget.TextView").click()
            z.sleep(1)
            z.heartbeat()
            if d(index=1, text="附近",
                 className="android.widget.TextView").exists:
                z.sleep(1)
                z.heartbeat()
                d(index=1, text="附近",
                  className="android.widget.TextView").click()
        # d(text='附近的人',className="android.widget.TextView").click()
        z.sleep(8)
        x = 0
        while (not d(text="去领心", className="android.widget.Button").exists
               ) or (not d(text="附近的人",
                           className="android.widget.TextView").exists):
            z.sleep(2)
            if x == 4:
                break
            x = x + 1
        if d(text="去领心", className="android.widget.Button").exists:
            d(index=0, className="android.widget.LinearLayout").child(
                index="2",
                className="android.widget.ImageView",
                resourceId="com.tencent.mobileqq:id/name").click()
            z.sleep(1)
        tempnum = 0
        objtemp = d(index=2, className="android.widget.LinearLayout").child(
            index=0,
            className="android.widget.LinearLayout",
            resourceId="com.tencent.mobileqq:id/name").child(
                index="0", className="android.widget.RelativeLayout").child(
                    index=0,
                    className="android.widget.ImageView",
                    resourceId="com.tencent.mobileqq:id/icon")
        while True:
            if objtemp.exists:
                z.sleep(1)
                break
            else:
                z.sleep(2)
                if tempnum == 4:
                    break
                else:
                    tempnum = tempnum + 1
        # d(className='android.widget.AbsListView').child(className='android.widget.LinearLayout',index=2).click()
        # z.sleep(5)
        while objtemp.exists:
            z.sleep(1)
            z.heartbeat()
            objtemp.click()
        forwait = 0
        while True:
            if d(text='附近点赞升级啦').exists:
                d(text='知道了').click()
                break
            else:
                z.sleep(1)
                if forwait == 3:
                    break
                else:
                    forwait = forwait + 1

        while not d(text='编辑交友资料').exists:
            time.sleep(2)
        d(descriptionContains='赞').child(className='android.view.View').click()
        z.sleep(3)
        d(text='我赞过谁').click()
        z.heartbeat()
        z.sleep(3)
        obj3 = d( className='android.widget.AbsListView' ).child( className='android.widget.RelativeLayout', index=1 ) \
            .child( className='android.widget.RelativeLayout', index=1 ).child(
            className='android.widget.LinearLayout' )  # 用来点击的
        if not obj3.exists:
            # 我没赞过好友的情况
            now = datetime.datetime.now()
            nowtime = now.strftime(
                '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
            z.setModuleLastRun(self.mid)
            z.toast('模块结束,保存的时间是%s' % nowtime)
            return
        z.heartbeat()
        set1 = set()
        i = 1
        t = 1
        mmm = 0
        add_count = int(args['add_count'])  # 要添加多少人
        while t < add_count + 1:
            obj = d( className='android.widget.AbsListView' ).child( className='android.widget.RelativeLayout',
                                                                     index=i ) \
                .child( className='android.widget.RelativeLayout', index=1 ).child(
                className='android.widget.LinearLayout' )  # 用来点击的
            obj1 = obj.child(className='android.widget.TextView')
            if obj1.exists:
                z.heartbeat()
                obj1 = obj1.info
                name = obj1['text']
                if name in set1:  # 判断是否已经关注过该联系人
                    i = i + 1
                    continue
                else:
                    time.sleep(0.5)
                    set1.add(name)
                    print(name)
                z.sleep(1)
                z.heartbeat()
                obj.click()
                while d(textContains='正在加载').exists:
                    z.sleep(2)
                z.heartbeat()

                if d(text='关注').exists:
                    d(text='关注').click()
                    z.sleep(3)
                if d(textContains='取消').exists:
                    d(text='取消').click()
                if mmm == 0:
                    if d(text='关注').exists:  # 因为第一次会有个提醒页面,需要再点一次才能关注成功
                        d(text='关注').click()
                        z.sleep(1)
                        z.heartbeat()
                        if d(text='关注').exists:  # 因为第一次会有个提醒页面,需要再点一次才能关注成功
                            z.toast('关注频繁,结束程序')
                            now = datetime.datetime.now()
                            nowtime = now.strftime(
                                '%Y-%m-%d %H:%M:%S'
                            )  # 将日期转化为字符串 datetime => string
                            cache.set(
                                '%s_MMCQQConecrnMyParise_time' %
                                d.server.adb.device_serial(), nowtime, None)
                            z.toast('模块结束,保存的时间是%s' % nowtime)
                            return
                            # mmm = 1
                    # if d(text='关注').exists:
                    #     return

                    d.press.back()
                    i = i + 1
                    t = t + 1
                else:
                    z.heartbeat()
                    if d(text='关注').exists:
                        z.toast('关注频繁,结束程序')
                        now = datetime.datetime.now()
                        nowtime = now.strftime(
                            '%Y-%m-%d %H:%M:%S'
                        )  # 将日期转化为字符串 datetime => string
                        z.setModuleLastRun(self.mid)
                        z.toast('模块结束,保存的时间是%s' % nowtime)
                        return
                    d.press.back()
                    i = i + 1
                    continue
            else:
                if d(textContains='暂无更多').exists:
                    break
                if d(textContains='显示更多').exists:
                    d(textContains='显示更多').click()
                d.swipe(width / 2, height * 4 / 5, width / 2, height / 5)
                z.sleep(2)
                i = 1
                continue

        now = datetime.datetime.now()
        nowtime = now.strftime(
            '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
        z.setModuleLastRun(self.mid)
        z.toast('模块结束,保存的时间是%s' % nowtime)
        return
Ejemplo n.º 23
0
    def action(self, d, z, args):
        startTime = args["startTime"]
        endTime = args["endTime"]
        try:
            if self.repo.timeCompare(startTime, endTime):
                z.toast("该时间段不允许运行")
                return
        except:
            z.toast("输入的时间格式错误,请检查后再试")
            return
        set_timeStart = int(args['set_timeStart'])  # 得到设定的时间
        set_timeEnd = int(args["set_timeEnd"])
        run_time = float(random.randint(set_timeStart, set_timeEnd))
        run_interval = z.getModuleRunInterval(self.mid)
        if run_interval is not None and run_interval < run_time:
            z.toast(u'锁定时间还差:%d分钟' % int(run_time - run_interval))
            z.sleep(2)
            return
        z.toast("准备执行MMS版QQ附近的人关注")
        z.sleep(1)
        z.toast("正在ping网络是否通畅")
        z.heartbeat()
        i = 0
        while i < 200:
            i += 1
            ping = d.server.adb.cmd("shell",
                                    "ping -c 3 baidu.com").communicate()
            print(ping)
            if 'icmp_seq' and 'bytes from' and 'time' in ping[0]:
                z.toast("网络通畅。开始执行:MMS版QQ附近的人关注")
                break
            z.sleep(2)
        if i > 200:
            z.toast("网络不通,请检查网络状态")
            if (args["time_delay"]):
                z.sleep(int(args["time_delay"]))
            return
        # self.scode = smsCode( d.server.adb.device_serial( ) )
        z.heartbeat()
        d.server.adb.cmd(
            "shell",
            "am force-stop com.tencent.mobileqq").communicate()  # 强制停止
        d.server.adb.cmd(
            "shell",
            "am start -n com.tencent.mobileqq/com.tencent.mobileqq.activity.SplashActivity"
        ).communicate()  # 拉起来
        z.sleep(10)
        z.heartbeat()
        if d(text="消息",
             resourceId="com.tencent.mobileqq:id/ivTitleName",
             className="android.widget.TextView").exists:
            z.toast("登录状态正常")
        elif d(text='绑定手机号码').exists:
            while d(text='关闭').exists:
                d(text='关闭').click()
                z.sleep(0.5)
            z.sleep(1)
        elif d(text='主题装扮').exists:
            while d(text='关闭').exists:
                d(text='关闭').click()
                z.sleep(0.5)
        elif d(text='马上绑定').exists:
            while d(text='关闭').exists:
                d(text='关闭').click()
                z.sleep(0.5)
        else:
            z.toast("登录状态异常,停止模块")
            now = datetime.datetime.now()
            nowtime = now.strftime(
                '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
            cache.set(
                '%s_MMCQQConecrnNearbyPeople_time' %
                d.server.adb.device_serial(), nowtime, None)
            z.toast('模块结束,保存的时间是%s' % nowtime)
            return
        str = d.info  # 获取屏幕大小等信息
        height = str["displayHeight"]
        width = str["displayWidth"]
        z.heartbeat()
        if d(text='绑定手机号码').exists:
            d(text='关闭').click()
        if d(textContains='匹配').exists:
            d.press.back()
        # d(description='快捷入口').click()
        # d( descriptionContains='快捷入口' ).click( )
        # d(text='加好友/群').click()
        z.heartbeat()
        while not d(text='附近的人', className="android.widget.TextView").exists:
            if d(index=2, text="动态",
                 className="android.widget.TextView").exists:
                d(index=2, text="动态",
                  className="android.widget.TextView").click()
            z.sleep(1)
            z.heartbeat()
            if d(index=1, text="附近",
                 className="android.widget.TextView").exists:
                z.sleep(1)
                z.heartbeat()
                d(index=1, text="附近",
                  className="android.widget.TextView").click()
                z.sleep(8)
                break
        x = 0
        while (not d(text="去领心", className="android.widget.Button").exists
               ) or (not d(text="附近的人",
                           className="android.widget.TextView").exists):
            z.sleep(2)
            if x == 4:
                break
            x = x + 1
        if d(text="去领心", className="android.widget.Button").exists:
            d(index=0, className="android.widget.LinearLayout").child(
                index="2",
                className="android.widget.ImageView",
                resourceId="com.tencent.mobileqq:id/name").click()
            z.sleep(1)

        tempnum = 0
        objtemp = d(index=2, className="android.widget.LinearLayout").child(
            index=0,
            className="android.widget.LinearLayout",
            resourceId="com.tencent.mobileqq:id/name").child(
                index="0", className="android.widget.RelativeLayout").child(
                    index=0,
                    className="android.widget.ImageView",
                    resourceId="com.tencent.mobileqq:id/icon")
        while True:
            if objtemp.exists:
                z.sleep(1)
                break
            else:
                z.sleep(2)
                if tempnum == 4:
                    break
                else:
                    tempnum = tempnum + 1

        getGender = args['gender']
        selectTime = args["selectTime"]
        # if getGender != '不限':
        d(resourceId='com.tencent.mobileqq:id/ivTitleBtnRightImage').click()
        d(text='筛选附近的人').click()
        if d(text=getGender).exists:
            d(text=getGender).click()
            z.sleep(0.5)
            d(text=selectTime).click()
            d(text='完成').click()
        while not d(textContains='等级').exists:
            z.sleep(2)
        z.heartbeat()
        # prisenum = int( args['prisenum'] )
        concernnum = int(args['concernnum'])
        # textnum = int( args['textnum'] )
        # count = max( prisenum, concernnum, textnum )
        t = 0
        i = 3
        nameList = []
        while t < concernnum:
            forClick = d(className='android.widget.AbsListView').child(
                className='android.widget.LinearLayout', index=i)
            if forClick.exists:
                z.heartbeat()
                if forClick.child(
                        index=0,
                        className="android.widget.RelativeLayout").child(
                            index=3,
                            className="android.widget.LinearLayout").child(
                                index=0, text='直播中').exists:
                    i = i + 1
                    continue
                if forClick.child(index=0,
                                  resourceId="com.tencent.mobileqq:id/icon",
                                  className="android.widget.ImageView").exists:
                    forClick.child(
                        index=0,
                        resourceId="com.tencent.mobileqq:id/icon",
                        className="android.widget.ImageView").click()
                else:
                    i = i + 1
                    continue

                while not d(textContains='关注').exists:
                    z.sleep(2)
                    if d(text='知道了').exists:
                        d(text='知道了').click()

                obj = d(index=1,
                        className="android.widget.RelativeLayout",
                        resourceId="com.tencent.mobileqq:id/name").child(
                            index=0,
                            className="android.widget.LinearLayout").child(
                                index=0,
                                className="android.widget.LinearLayout").child(
                                    index=0,
                                    className="android.widget.TextView")
                if obj.exists:
                    obj = obj.info["text"].encode("utf-8")
                    if obj in nameList:
                        i = i + 1
                        d.press.back()
                        continue
                    else:
                        nameList.append(obj)
                z.sleep(2)
                if t < concernnum:
                    if d(text='关注').exists:
                        d(text='关注').click()
                        if d(text='关注').exists:
                            d(text='关注').click()
                            if d(text='关注').exists:
                                z.toast("关注频繁,进行其他操作")
                                now = datetime.datetime.now()
                                nowtime = now.strftime(
                                    '%Y-%m-%d %H:%M:%S'
                                )  # 将日期转化为字符串 datetime => string
                                z.setModuleLastRun(self.mid)
                                z.toast('模块结束,保存的时间是%s' % nowtime)
                                return
                        while d(text="返回",
                                resourceId=
                                "com.tencent.mobileqq:id/ivTitleBtnLeft"
                                ).exists:
                            d(text="返回",
                              resourceId="com.tencent.mobileqq:id/ivTitleBtnLeft"
                              ).click()
                        i = i + 1
                        continue
                # if d( index=1, resourceId='com.tencent.mobileqq:id/rlCommenTitle',
                #       className="android.widget.RelativeLayout" ).child( index=0,
                #                                                          className="android.widget.LinearLayout" ).child(
                #         index=0, className="android.widget.ImageView" ).exists:
                #     d( index=1, resourceId='com.tencent.mobileqq:id/rlCommenTitle',
                #        className="android.widget.RelativeLayout" ).child( index=0,
                #                                                           className="android.widget.LinearLayout" ).child(
                #         index=0,
                #         className="android.widget.ImageView" ).click( )
                i = i + 1
                t = t + 1

            elif d(className='android.widget.AbsListView').child(
                    className='android.widget.RelativeLayout', index=i).child(
                        index=2,
                        className="android.widget.RelativeLayout").child(
                            text="广告",
                            className="android.widget.TextView").exists:
                i = i + 1
                continue
            else:
                d.swipe(width / 2, height * 5 / 6, width / 2, height / 6)
                z.sleep(2)
                i = 1

        now = datetime.datetime.now()
        nowtime = now.strftime(
            '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
        z.setModuleLastRun(self.mid)
        z.toast('模块结束,保存的时间是%s' % nowtime)
        return
Ejemplo n.º 24
0
 def heartbeat(self):
     key = 'timeout_%s' % self.server.adb.device_serial()
     cache.set(key, (datetime.datetime.now() -
                     datetime.datetime(2017, 1, 1)).seconds)
Ejemplo n.º 25
0
 def setModuleLastRun(self, mid):
     key = '%s_%s' % (self.server.adb.device_serial(), mid)
     cache.set(key, int(time.time()), None)
Ejemplo n.º 26
0
    def action(self, d, z, args):
        startTime = args["startTime"]
        endTime = args["endTime"]
        try:
            if self.repo.timeCompare(startTime, endTime):
                z.toast("该时间段不允许运行")
                return
        except:
            z.toast("输入的时间格式错误,请检查后再试")
            return
        set_timeStart = int(args['set_timeStart'])  # 得到设定的时间
        set_timeEnd = int(args["set_timeEnd"])
        run_time = float(random.randint(set_timeStart, set_timeEnd))
        run_interval = z.getModuleRunInterval(self.mid)
        if run_interval is not None and run_interval < run_time:
            z.toast(u'锁定时间还差:%d分钟' % int(run_time - run_interval))
            z.sleep(2)
            return
        z.heartbeat()
        z.toast("准备执行TIM通讯录加好友+导入通讯录 MMS版")
        z.toast("开始导入通讯录")
        self.getAddressList(d, z, args)
        z.toast("正在ping网络是否通畅")
        z.heartbeat()
        i = 0
        while i < 200:
            i += 1
            ping = d.server.adb.cmd("shell",
                                    "ping -c 3 baidu.com").communicate()
            print(ping)
            if 'icmp_seq' and 'bytes from' and 'time' in ping[0]:
                z.toast("网络通畅。开始执行:TIM通讯录加好友")
                break
            z.sleep(2)
        if i > 200:
            z.toast("网络不通,请检查网络状态")
            if (args["time_delay"]):
                z.sleep(int(args["time_delay"]))
            return
        self.scode = smsCode(d.server.adb.device_serial())
        z.heartbeat()
        str = d.info  # 获取屏幕大小等信息
        height = str["displayHeight"]
        width = str["displayWidth"]
        cate_id1 = args["repo_material_id"]
        Material = self.repo.GetMaterial(cate_id1, 0, 1)
        message = Material[0]['content']  # 取出验证消息的内容
        d.server.adb.cmd("shell",
                         "am force-stop com.tencent.tim").communicate()  # 强制停止
        d.server.adb.cmd(
            "shell",
            "am start -n com.tencent.tim/com.tencent.mobileqq.activity.SplashActivity"
        ).communicate()  # 拉起来
        z.sleep(10)
        z.heartbeat()
        if d(text="消息",
             resourceId="com.tencent.tim:id/ivTitleName").exists and not d(
                 text="马上绑定", className="android.widget.Button").exists:
            z.toast("登录状态正常,继续执行")
        else:
            if d(text="关闭",
                 resourceId="com.tencent.tim:id/ivTitleBtnLeftButton").exists:
                d(text="关闭",
                  resourceId="com.tencent.tim:id/ivTitleBtnLeftButton").click(
                  )
                z.sleep(1)
            elif d(text="消息",
                   className="android.widget.TextView").exists and d(
                       text="马上绑定", className="android.widget.Button").exists:
                d(text="消息", className="android.widget.TextView").click()
                z.sleep(1)
            elif d(text="返回").exists:
                d(text="返回").click()
                z.sleep(1)

            else:
                z.toast("登录状态异常,跳过此模块")
                now = datetime.datetime.now()
                nowtime = now.strftime(
                    '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
                z.setModuleLastRun(self.mid)
                z.toast('模块结束,保存的时间是%s' % nowtime)
                return
        if d(text='马上绑定').exists:
            result = self.bindPhoneNumber(z, d)
            if result == "nothing":
                now = datetime.datetime.now()
                nowtime = now.strftime(
                    '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
                z.setModuleLastRun(self.mid)
                z.toast('模块结束,保存的时间是%s' % nowtime)
                return
        if d(text='通讯录').exists:
            d(text='关闭').click()
        d(description='快捷入口').click()
        d(textContains='加好友').click()
        d(text='添加手机联系人').click()
        z.heartbeat()
        while d(text='验证手机号码').exists:
            PhoneNumber = None
            j = 0
            while PhoneNumber is None:
                j += 1
                PhoneNumber = self.scode.GetPhoneNumber(
                    self.scode.QQ_CONTACT_BIND)  # 获取接码平台手机号码
                z.heartbeat()
                if j > 2:
                    z.toast('取不到手机号码')
                    if (args["time_delay"]):
                        z.sleep(int(args["time_delay"]))
                    now = datetime.datetime.now()
                    nowtime = now.strftime(
                        '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
                    z.setModuleLastRun(self.mid)
                    z.toast('模块结束,保存的时间是%s' % nowtime)
                    return
            obj = d(className="android.view.View", description="删除 按钮")
            if obj.exists:
                z.heartbeat()
                z.sleep(1)
                obj.click()
            z.sleep(2)
            z.input(PhoneNumber)
            z.sleep(1.5)
            if d(text='下一步').exists:
                d(text='下一步').click()
                z.sleep(3)
            if d(text='确定').exists:
                d(text='确定').click()
                z.sleep(2)
            code = self.scode.GetVertifyCode(PhoneNumber,
                                             self.scode.QQ_CONTACT_BIND,
                                             '4')  # 获取接码验证码
            self.scode.defriendPhoneNumber(PhoneNumber,
                                           self.scode.QQ_CONTACT_BIND)
            if code == '':
                z.toast(PhoneNumber + '手机号,获取不到验证码')
                if d(text='返回').exists:
                    d(text='返回').click()
                if not d(textContains='中国').exists:
                    if d(text='返回').exists:
                        d(text='返回').click()
                if d(className='android.view.View',
                     descriptionContains='删除').exists:
                    d(className='android.view.View',
                      descriptionContains='删除').click()
                continue
            z.heartbeat()
            z.input(code)
            if d(text='完成').exists:
                d(text='完成').click()
            z.sleep(5)
            break
        # if d( resourceId='com.tencent.mobileqq:id/name', className='android.widget.EditText',
        #       index=2 ).exists:  # 检查到尚未 启用通讯录
        if d(text="启用").exists:  # 检查到尚未 启用通讯录
            d(text="启用").click()
            if not d(textContains='+86').exists:
                d(description='点击选择国家和地区').click()
                if d(text='中国').exists:
                    d(text='中国').click()
                else:
                    str = d.info  # 获取屏幕大小等信息
                    height = str["displayHeight"]
                    width = str["displayWidth"]
                    d.click(width * 5 / 12, height * 5 / 32)
                    z.sleep(1.5)
                    z.input('中国')
                    z.sleep(2)
                    d(text='+86').click()
            z.heartbeat()
            text = self.Bind(d, z)  # 未开启通讯录的,现绑定通讯录
            z.heartbeat()
            if text == 'false':  # 操作过于频繁的情况
                if (args["time_delay"]):
                    z.sleep(int(args["time_delay"]))
                now = datetime.datetime.now()
                nowtime = now.strftime(
                    '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
                z.setModuleLastRun(self.mid)
                z.toast('模块结束,保存的时间是%s' % nowtime)
                return
            z.sleep(7)
        if d(textContains='没有可匹配的').exists:
            if (args["time_delay"]):
                z.sleep(int(args["time_delay"]))
            now = datetime.datetime.now()
            nowtime = now.strftime(
                '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
            z.setModuleLastRun(self.mid)
            z.toast('模块结束,保存的时间是%s' % nowtime)
            return
        if d(text='匹配手机通讯录').exists:
            d(text='匹配手机通讯录').click()
        z.heartbeat()
        z.sleep(5)
        obj1 = d( className='android.widget.AbsListView' ).child( className='android.widget.LinearLayout',
                                                                  index=2 ) \
            .child( className='android.widget.ImageView', index=0 )  # 判断第一次进通讯录是否有人
        if not obj1.exists:
            d(text='返回').click()
            z.sleep(1.5)
            d(text='添加手机联系人').click()
            if not obj1.exists:
                z.toast("该手机上没有联系人")
                if (args["time_delay"]):
                    z.sleep(int(args["time_delay"]))
                now = datetime.datetime.now()
                nowtime = now.strftime(
                    '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
                z.setModuleLastRun(self.mid)
                z.toast('模块结束,保存的时间是%s' % nowtime)
                return
        count = 0
        index = 2
        EndIndex = int(args['EndIndex'])
        switch_card = args["switch_card"]
        # while index < EndIndex + 1:
        # for index in range(2,EndIndex+3):
        #     cate_id = args["repo_material_id"]
        #     time.sleep(2)
        num = 0
        obj = d(index=0,
                resourceId='com.tencent.tim:id/name',
                className='android.widget.AbsListView').child(
                    className="android.widget.LinearLayout",
                    index=index).child(text="添加", index=2)
        while obj.exists:

            obj.click()

            # if gender != '不限':
            #     gender2 = self.Gender(d)
            #     if gender == gender2:               # gender是外界设定的,gender2是读取到的
            #         time.sleep(1)
            #     else:
            #         d(textContains='返回').click()
            #         i = i + 1
            z.sleep(1)
            z.heartbeat()
            if obj.exists:  # 拒绝被添加的轻况或请求失败
                num = num + 1
                index = index + 1
                obj = d(index=0,
                        resourceId='com.tencent.tim:id/name',
                        className='android.widget.AbsListView').child(
                            className="android.widget.LinearLayout",
                            index=index).child(text="添加", index=2)
                continue
            if d(text='必填',
                 resourceId='com.tencent.tim:id/name').exists:  # 要回答问题的情况
                z.heartbeat()
                objtext = d(textContains="问题",
                            index=0,
                            resourceId="com.tencent.tim:id/textView1",
                            className="android.widget.TextView")
                objnum = d(index=1,
                           resourceId="com.tencent.tim:id/name",
                           className="android.widget.FrameLayout").child(
                               index=0,
                               className="android.widget.RelativeLayout",
                               resourceId="com.tencent.tim:id/name").child(
                                   index=2,
                                   resourceId="com.tencent.tim:id/name",
                                   className="android.widget.TextView")
                if objtext.exists:
                    objtext = objtext.info["text"]
                    if "电话" in objtext or "手机" in objtext or "号码" in objtext:
                        if objnum.exists:
                            objnum = objnum.info["text"][3:]
                            z.input(objnum)
                            z.sleep(1)
                            z.heartbeat()
                            d(text="下一步").click()
                            z.sleep(1)
                            z.heartbeat()
                            if d(text="下一步").exists:
                                z.sleep(1)
                                z.heartbeat()
                                d(text="手机联系人").click()
                                z.sleep(1)
                                z.heartbeat()
                            else:
                                z.sleep(1)
                                z.heartbeat()
                                if d(text="发送").exists:
                                    d(text="发送").click()
                                    z.sleep(3)
                                    if d(text="发送").exists:
                                        now = datetime.datetime.now()
                                        nowtime = now.strftime(
                                            '%Y-%m-%d %H:%M:%S'
                                        )  # 将日期转化为字符串 datetime => string
                                        cache.set(
                                            '%s_MMCTIMAdressAddfriends_time' %
                                            d.server.adb.device_serial(),
                                            nowtime, None)
                                        z.toast('模块结束,保存的时间是%s' % nowtime)
                                        return
                                if d(text='添加失败,请勿频繁操作').exists:
                                    z.heartbeat()
                                    z.toast("频繁操作,跳出模块")
                                    now = datetime.datetime.now()
                                    nowtime = now.strftime(
                                        '%Y-%m-%d %H:%M:%S'
                                    )  # 将日期转化为字符串 datetime => string
                                    z.setModuleLastRun(self.mid)
                                    z.toast('模块结束,保存的时间是%s' % nowtime)
                                    return

                    else:
                        d(text="手机联系人",
                          resourceId="com.tencent.tim:id/ivTitleBtnLeft",
                          className="android.widget.TextView").click()
                index = index + 1
                obj = d(index=0,
                        resourceId='com.tencent.tim:id/name',
                        className='android.widget.AbsListView').child(
                            className="android.widget.LinearLayout",
                            index=index).child(text="添加", index=2)
                num = 0
                continue
            d.dump(compressed=False)
            if d(text="风险提示").exists:  # 风险提示
                d(text="取消").click()
                z.sleep(1)
                d(text="手机联系人",
                  resourceId="com.tencent.tim:id/ivTitleBtnLeft").click()
                index = index + 1
                obj = d(index=0,
                        resourceId='com.tencent.tim:id/name',
                        className='android.widget.AbsListView').child(
                            className="android.widget.LinearLayout",
                            index=index).child(text="添加", index=2)
                z.heartbeat()
                num = 0
                continue
            obj = d(text='发送',
                    resourceId='com.tencent.tim:id/ivTitleBtnRightText'
                    )  # 不需要验证可直接添加为好友的情况
            if obj.exists:
                z.sleep(2)
                obj.click()
                if d(text='添加失败,请勿频繁操作',
                     resourceId='com.tencent.tim:id/name').exists:
                    z.heartbeat()
                    z.toast("频繁操作,跳出模块")
                    now = datetime.datetime.now()
                    nowtime = now.strftime(
                        '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
                    z.setModuleLastRun(self.mid)
                    z.toast('模块结束,保存的时间是%s' % nowtime)
                    return
                else:
                    count = count + 1
                    print("请求发送成功")
                num = 0
                continue
            d.dump(compressed=False)
            obj = d(index=3,
                    className='android.widget.EditText',
                    resourceId='com.tencent.tim:id/name'
                    ).info  # 将之前消息框的内容删除        需要发送验证信息
            obj = obj['text']
            lenth = len(obj)
            t = 0
            while t < lenth:
                d.press.delete()
                t = t + 1
            time.sleep(2)
            z.input(message)
            z.sleep(1)
            # d(index=2,className="android.widget.CompoundButton",resourceId="com.tencent.tim:id/name").click()
            if "是" in switch_card:
                if d(index=2,
                     className="android.widget.CompoundButton",
                     resourceId="com.tencent.tim:id/name").exists:
                    d(index=2,
                      className="android.widget.CompoundButton",
                      resourceId="com.tencent.tim:id/name").click()
                else:
                    if d(text="设置我的名片").exists:
                        d(text="设置我的名片").click()
                        while True:
                            z.sleep(1)
                            z.heartbeat()
                            d(text="添加我的名片").click()
                            d(index=3,
                              resourceId="com.tencent.tim:id/name",
                              className="android.widget.Button").click()
                            z.sleep(2)
                            obj = d(
                                index=0,
                                className="com.tencent.widget.GridView",
                                resourceId="com.tencent.tim:id/photo_list_gv"
                            ).child(index=0,
                                    className="android.widget.RelativeLayout")
                            if obj.exists:
                                z.sleep(1)
                                z.heartbeat()
                                obj.click()
                                z.sleep(3)
                                d(text='确定',
                                  resourceId='com.tencent.tim:id/name').click(
                                  )
                                time.sleep(3)
                                z.heartbeat()
                                d(text="完成").click()
                                z.sleep(1)
                                z.heartbeat()
                                d(text="返回").click()
                                break
                            if d(index=0,
                                 resourceId="com.tencent.tim:id/name",
                                 className="android.widget.ImageButton"
                                 ).exists:
                                d(index=0,
                                  resourceId="com.tencent.tim:id/name",
                                  className="android.widget.ImageButton"
                                  ).click()
                                d(text="退出").click()
            z.sleep(1)
            z.heartbeat()
            objtemp = d(index=0,
                        className="android.widget.RelativeLayout",
                        resourceId="com.tencent.tim:id/name").child(
                            index=2,
                            className="android.widget.TextView",
                            resourceId="com.tencent.tim:id/name")
            if objtemp.exists:
                objtemp = objtemp.info["text"].encode("utf-8")[3:]
            d(text='下一步',
              resourceId='com.tencent.tim:id/ivTitleBtnRightText',
              className="android.widget.TextView").click()
            try:
                obj = d(index=0,
                        className="android.widget.LinearLayout",
                        resourceId="com.tencent.tim:id/name").child(
                            index=1,
                            className="android.widget.EditText",
                            resourceId="com.tencent.tim:id/name")
                if obj.exists:
                    obj = obj.info["text"].encode("utf-8")
                    obj = int(obj)
            except:
                try:
                    a = int(objtemp)
                    if d(index=0,
                         className="android.view.View",
                         description="删除 按钮").exists:
                        d(index=0,
                          className="android.view.View",
                          description="删除 按钮").click()
                        z.sleep(1)
                        z.input(objtemp)
                except:
                    z.sleep(1)
            z.sleep(1)
            if d(text='发送').exists:
                d(text='发送').click()
                z.sleep(3)
                if d(text='发送').exists:
                    z.toast("无法添加")
                    now = datetime.datetime.now()
                    nowtime = now.strftime(
                        '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
                    z.setModuleLastRun(self.mid)
                    z.toast('模块结束,保存的时间是%s' % nowtime)
                    return
            if d(resourceId='com.tencent.tim:id/name',
                 text='添加失败,请勿频繁操作').exists:  # 操作过于频繁的情况
                z.toast("频繁操作,跳出模块")
                now = datetime.datetime.now()
                nowtime = now.strftime(
                    '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
                z.setModuleLastRun(self.mid)
                z.toast('模块结束,保存的时间是%s' % nowtime)
                return
            # print( QQnumber + "请求发送成功" )
            num = 0
            z.heartbeat()
            obj = d(index=0,
                    resourceId='com.tencent.tim:id/name',
                    className='android.widget.AbsListView').child(
                        className="android.widget.LinearLayout",
                        index=index).child(text="添加", index=2)
            count = count + 1
            if count == EndIndex:
                z.toast("添加数量好友达到需求数量,停止模块")
                now = datetime.datetime.now()
                nowtime = now.strftime(
                    '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
                z.setModuleLastRun(self.mid)
                z.toast('模块结束,保存的时间是%s' % nowtime)
                return
            if num > 3:
                z.toast("请求失败,无法添加,退出模块")
                now = datetime.datetime.now()
                nowtime = now.strftime(
                    '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
                z.setModuleLastRun(self.mid)
                z.toast('模块结束,保存的时间是%s' % nowtime)
                return
        z.toast("已无好友可加,停止模块!")
        now = datetime.datetime.now()
        nowtime = now.strftime(
            '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
        z.setModuleLastRun(self.mid)
        z.toast('模块结束,保存的时间是%s' % nowtime)
        if (args["time_delay"]):
            time.sleep(int(args["time_delay"]))
Ejemplo n.º 27
0
 def setModuleLastRun_new(self, mid):
     key = '%s_%s' % (self.server.adb.device_serial(), mid)
     now = datetime.datetime.now()
     nowtime = now.strftime('%H:%M')  # 将日期转化为字符串 datetime => string
     cache.set(key, nowtime, None)
Ejemplo n.º 28
0
        const.MAX_SLOTS_TOKEN = int(value)

if not os.path.exists('plugins/__init__.py'):
    f = open('plugins/__init__.py', 'w')  # r只读,w可写,a追加
    f.write("#init")
    f.close()

import sys

reload(sys)
sys.setdefaultencoding('utf8')
from dbapi import dbapi

from zcache import cache

cache.set("ztask_active_time", datetime.datetime.now())

try:
    rst = int(util.exccmd("awk -F. '{print $1}' /proc/uptime"))
    if rst < 500:
        dbapi.log_warn("", "任务暂缓%s秒后启动" % const.MAX_SLOTS_WECHAT,
                       "系统已经成功启动,任务将在%s秒后启动,请等待..." % const.MAX_SLOTS_WECHAT)
        time.sleep(const.WAIT_START_TIME)
    else:
        print '系统已启动超过500秒,不再等待,直接拉起'
except:
    # noting to do
    ok = 'ok'

optpath = os.getcwd()  # 获取当前操作目录
imgpath = os.path.join(optpath, 'img')  # 截图目录
Ejemplo n.º 29
0
    def action(self, d, z, args):
        condition = self.timeinterval(d, z, args)
        if condition == 'end':
            z.toast('时间间隔不满足')
            z.sleep(2)
            return
        z.heartbeat()

        d.press.home()
        if d(text='微信').exists:
            d(text='微信').click()
        else:
            # d.swipe( width - 20, height / 2, 0, height / 2, 5 )
            z.toast('该页面没有微信')
            z.sleep(2)
            return
        z.sleep(5)
        while True:
            if d(text='发现') and d(text='我') and d(text='通讯录').exists:
                break
            else:
                d(descriptionContains='返回',
                  className='android.widget.ImageView').click()
        cate_id = args['repo_wxcade_id']
        d(text='发现').click()
        d(textContains='附近的人').click()
        z.sleep(1)
        if d(text='开始查看').exists:
            d(text='开始查看').click()
            d(text='下次不提示').click()
            d(text='确定').click()
        z.sleep(2)

        if d(text='查看附近的人').exists:
            d(text='查看附近的人').click()
        while True:
            if d(description='更多').exists:
                break
            else:
                z.sleep(2)
        d(description='更多').click()
        gender = args['gender']
        if gender == '男':
            d(text='只看男生').click()
            z.sleep(5)
        elif gender == "女":
            d(text='只看女生').click()
            z.sleep(5)
        else:
            d(text='查看全部').click()
            z.sleep(5)

        serial = z.wx_action("opennearui")  # 得到微信id,unicode样式
        #print(serial)
        ids = json.loads(serial)  # 将unicode转换为idct
        allwxid = (list(ids))  #将所有的微信id由dict转换为list
        #print(allwxid)
        lenth = len(allwxid)
        z.heartbeat()

        for i in range(lenth):
            z.heartbeat()
            wxid = allwxid[i]  #得到key值,也就是微信v1值
            logging.info(wxid)
            if 'v1_' not in wxid:
                continue
            self.repo.uploadPhoneNumber(wxid, cate_id)

        now = datetime.datetime.now()
        nowtime = now.strftime(
            '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
        cache.set('%s_WXSaveId_time' % d.server.adb.device_serial(), nowtime,
                  None)
        z.toast('模块结束,保存的时间是%s' % nowtime)

        if (args["time_delay"]):
            z.sleep(int(args["time_delay"]))