Пример #1
0
    def Bind(self, d, z):
        self.scode = smsCode(d.server.adb.device_serial())
        newStart = 1
        while newStart == 1:
            GetBindNumber = self.scode.GetPhoneNumber(
                self.scode.QQ_CONTACT_BIND)
            print(GetBindNumber)
            z.sleep(2)
            d(resourceId='com.tencent.mobileqq:id/name',
              className='android.widget.EditText').set_text(
                  GetBindNumber)  #GetBindNumber
            z.heartbeat()
            z.sleep(1)
            d(text='下一步').click()
            z.sleep(3)
            if d(text='下一步').exists:  #操作过于频繁的情况
                return 'false'

            if d(text='确定').exists:  #提示该号码已经与另一个qq绑定,是否改绑,如果请求失败的情况
                d(text='确定', ).click()

            code = self.scode.GetVertifyCode(GetBindNumber,
                                             self.scode.QQ_CONTACT_BIND, '4')

            newStart = 0

            d(resourceId='com.tencent.mobileqq:id/name',
              className='android.widget.EditText').set_text(code)
            z.heartbeat()
            d(text='完成', resourceId='com.tencent.mobileqq:id/name').click()
            z.sleep(6)
            if d(textContains='没有可匹配的').exists:
                return 'false'

        return 'true'
Пример #2
0
 def bindPhoneNumber(self, z, d):
     z.toast("点击开始绑定")
     self.scode = smsCode(d.server.adb.device_serial())
     d(text='马上绑定').click()
     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 > 20:
                 z.toast('取不到手机号码')
                 return "nothing"
         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.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
     z.sleep(1)
Пример #3
0
    def Bind(self, d,z):
        self.scode = smsCode(d.server.adb.device_serial())
        newStart = 1
        while newStart == 1:
            GetBindNumber = self.scode.GetPhoneNumber(self.scode.QQ_CONTACT_BIND)
            print(GetBindNumber)
            z.sleep(2)
            z.input(GetBindNumber)
            z.heartbeat()

            z.sleep(1)
            d(text='下一步').click()
            z.sleep(3)

            if d(text='确定').exists:  # 提示该号码已经与另一个qq绑定,是否改绑,如果请求失败的情况
                d(text='确定').click()
                if d(text='确定').exists:
                    return 'false'

            code = self.scode.GetVertifyCode(GetBindNumber, self.scode.QQ_CONTACT_BIND, '4')
            newStart = 0
            z.input(code)
            z.heartbeat()
            d(text='下一步').click()
            z.sleep(4)
            if d(textContains='访问你的通讯录').exists:
                d(text='好').click()
                z.sleep(5)

            if d(textContains='没有可匹配的').exists:
                return 'false'
            if d(textContains='验证短信').exists:    #验证码错误的情况
                return 'false'

        return 'true'
Пример #4
0
    def action(self, d, z, args):
        z.heartbeat()
        d.press.home()
        self.scode = smsCode(d.server.adb.device_serial())
        runLock = int(args['run_lock'])
        cateId = args['repo_number_id']
        totalList = self.repo.GetNUmberNormalTotal(cateId)
        normalTotal = int(totalList[0]['total'])

        if normalTotal < runLock:
            z.toast('库内未使用号码低于' + args['run_lock'] + ',开始拉号码')
        else:
            z.toast('库内未使用号码大于' + args['run_lock'] + ',模块无法运行')

        count = 1
        while normalTotal < runLock:
            if count > int(args['get_amount']):
                z.toast('成功拉取' + args['get_amount'])
                break
            PhoneNumber = self.scode.GetPhoneNumber(
                self.scode.WECHAT_REGISTER)  # 获取接码平台手机号码
            z.sleep(3)
            PhoneNumberStr = ','.join(PhoneNumber)
            self.scode.defriendPhoneNumber(PhoneNumberStr,
                                           self.scode.WECHAT_REGISTER)  # 拉黑
            self.repo.uploadPhoneNumber(PhoneNumberStr, cateId)  # 入库

            if args["time_delay"]:
                z.sleep(int(args["time_delay"]))
            count = count + 1
Пример #5
0
    def Bind(self, d,z):
        self.scode = smsCode(d.server.adb.device_serial())
        newStart = 1
        while newStart < 3:
            GetBindNumber = self.scode.GetPhoneNumber(self.scode.QQ_CONTACT_BIND)
            print(GetBindNumber)
            z.sleep(2)
            d(text='请输入你的手机号码', className='android.widget.EditText')
            z.input(GetBindNumber)  # GetBindNumber
            z.heartbeat()
            z.sleep(1)
            d(text='下一步').click()
            z.sleep(3)
            if d(text='下一步', resourceId='com.tencent.mobileqq:id/name', index=2).exists:  # 操作过于频繁的情况
                return 'false'

            if d(text='确定', resourceId='com.tencent.qqlite:id/phone_bind_changeqq_confirm_btn').exists:  # 提示该号码已经与另一个qq绑定,是否改绑,如果请求失败的情况
                d(text='确定', resourceId='com.tencent.qqlite:id/phone_bind_changeqq_confirm_btn').click()

            try:
                code = self.scode.GetVertifyCode(GetBindNumber, self.scode.QQ_CONTACT_BIND, '4')
                if d(text='启用').exists:
                    d(resourceId='com.tencent.qqlite:id/ivTitleBtnLeft').click()
            except:
                if d(text='启用').exists:
                    d(resourceId='com.tencent.qqlite:id/ivTitleBtnLeft').click()

                if d(text='验证手机号码').exists:
                    d(text='验证手机号码').click()
                    z.sleep(1)

                obj = d(resourceId='com.tencent.qqlite:id/number_edit', className='android.widget.EditText', index=2)
                if obj.exists:
                    deltext = obj.info['text']

                if deltext != '':
                    for i in range(len(deltext)):
                        d.press.delete()
                newStart += 1
                continue

            d(resourceId='com.tencent.qqlite:id/code_edit').click()
            z.input(code)
            z.heartbeat()
            d(text='下一步').click()
            z.sleep(5)

            if d(text='“QQ”想访问你的通讯录').exists:
                d(text='好').click()

            if d(textContains='没有可匹配的').exists:
                return 'false'

            if code != '':
                break

        if newStart >= 3:
            return 'false'

        return 'true'
Пример #6
0
    def Bind(self, d, z):
        circle = 0
        self.scode = smsCode(d.server.adb.device_serial())
        newStart = 1
        while newStart == 1:
            GetBindNumber = self.scode.GetPhoneNumber(
                self.scode.QQ_CONTACT_BIND)
            if 'Session' in GetBindNumber:
                self.Bind(d, z)
            if isinstance(GetBindNumber, list) and GetBindNumber:
                GetBindNumber = GetBindNumber[0]
            elif GetBindNumber is None or GetBindNumber == []:
                return 'false'
            print(GetBindNumber)
            z.sleep(2)
            d(resourceId='com.tencent.mobileqq:id/name',
              className='android.widget.EditText').set_text(
                  GetBindNumber)  # GetBindNumber
            z.heartbeat()
            z.sleep(1)
            d(text='下一步').click()
            z.sleep(3)
            while d(text="正在发送请求").exists:
                time.sleep(3)
            if d(text='下一步').exists:  # 操作过于频繁的情况
                return 'false'

            if d(text='确定').exists:  # 提示该号码已经与另一个qq绑定,是否改绑,如果请求失败的情况
                d(text='确定', ).click()
            z.heartbeat()
            code = self.scode.GetVertifyCode(GetBindNumber,
                                             self.scode.QQ_CONTACT_BIND, '4')
            d(resourceId='com.tencent.mobileqq:id/name',
              className='android.widget.EditText').set_text(code)
            print(code)
            newStart = 0
            if d(text='请输入短信验证码').exists:
                if circle < 4:
                    z.toast('没有接收到验证码')
                    d(textContains='返回').click()
                    if d(text='确定').exists:
                        d(text='返回').click()
                        z.sleep(1)
                    d(description='删除 按钮').click()
                    circle = circle + 1
                    newStart = 1
                    continue
                else:
                    z.toast('程序结束')
                    print(circle)
                    return 'false'
            z.heartbeat()
            d(text='完成', resourceId='com.tencent.mobileqq:id/name').click()
            z.sleep(10)
            if d(textContains='没有可匹配的').exists:
                return 'false'

        return 'true'
Пример #7
0
 def Bind(self, d, z):
     circle = 0
     self.scode = smsCode(d.server.adb.device_serial())
     newStart = 1
     while newStart == 1:
         GetBindNumber = self.scode.GetPhoneNumber(
             self.scode.QQ_CONTACT_BIND)
         print(GetBindNumber)
         z.sleep(2)
         z.heartbeat()
         obj = d(className="android.view.View", description="删除 按钮")
         if obj.exists:
             z.heartbeat()
             z.sleep(1)
             obj.click()
         z.sleep(2)
         d(resourceId='com.tencent.tim:id/name',
           className='android.widget.EditText').set_text(
               GetBindNumber)  # GetBindNumber
         z.heartbeat()
         z.sleep(1)
         d(text='下一步').click()
         z.sleep(3)
         if d(text='下一步').exists:  # 操作过于频繁的情况
             return 'false'
         if d(text='确定').exists:  # 提示该号码已经与另一个qq绑定,是否改绑,如果请求失败的情况
             d(text='确定', ).click()
         z.heartbeat()
         code = self.scode.GetVertifyCode(GetBindNumber,
                                          self.scode.QQ_CONTACT_BIND, '4')
         d(resourceId='com.tencent.tim:id/name',
           className='android.widget.EditText').set_text(code)
         print(code)
         newStart = 0
         if d(text='请输入短信验证码').exists:
             if circle < 4:
                 z.toast('没有接收到验证码')
                 d(textContains='返回').click()
                 if d(text='确定').exists:
                     d(text='返回').click()
                     z.sleep(1)
                 d(description='删除 按钮').click()
                 circle = circle + 1
                 newStart = 1
                 continue
             else:
                 z.toast('程序结束')
                 print(circle)
                 return 'false'
         z.heartbeat()
         d(text='完成', resourceId='com.tencent.tim:id/name').click()
         z.sleep(10)
         if d(textContains='没有可匹配的').exists:
             return 'false'
     return 'true'
Пример #8
0
    def action(self, d, z, args):
        z.toast( "TIM邮件发消息" )
        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( "网络通畅。开始执行:TTIM邮件发消息" )
                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_id = args['repo_number_id']
        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="消息" ).exists:
            z.toast( "卡槽TIM状态正常,继续执行" )
        else:
            z.toast( "卡槽TIM状态异常,跳过此模块" )
            return

        d(index=2, className='android.widget.FrameLayout').click()
        d(text='邮件', className='android.widget.TextView').click()
        time.sleep(1)
        if d(text='开通QQ邮箱', className='android.widget.Button').exists:
            d(text='开通QQ邮箱', className='android.widget.Button').click()

        while 1:
            if d(text='写邮件', className='android.widget.TextView').exists:
                d(text='写邮件', className='android.widget.TextView').click()
                break
            else:
                time.sleep(1)

        # while 1:
        #     if d(text='发送', className='android.widget.Button').exists:


        if (args["time_delay"]):
            time.sleep(int(args["time_delay"]))
Пример #9
0
    def Bind(self, d, z):
        self.scode = smsCode(d.server.adb.device_serial())
        z.heartbeat()
        newStart = 1
        while newStart == 1:
            GetBindNumber = self.scode.GetPhoneNumber(
                self.scode.QQ_CONTACT_BIND)
            if isinstance(GetBindNumber, list) and GetBindNumber:
                GetBindNumber = GetBindNumber[0]
            elif GetBindNumber is None or GetBindNumber == []:
                return 'false'
            if 'Session' in GetBindNumber:
                self.Bind(d, z)
            print(GetBindNumber)
            z.sleep(2)
            d(resourceId='com.tencent.mobileqq:id/name',
              className='android.widget.EditText').set_text(
                  GetBindNumber)  # GetBindNumber
            z.heartbeat()
            z.sleep(1)
            d(text='下一步').click()
            z.sleep(3)
            while d(text="正在发送请求").exists:
                time.sleep(3)
            if d(text='下一步',
                 resourceId='com.tencent.mobileqq:id/name',
                 index=2).exists:  # 操作过于频繁的情况
                return 'false'

            if d(text='确定',
                 resourceId='com.tencent.mobileqq:id/name',
                 index='2').exists:  # 提示该号码已经与另一个qq绑定,是否改绑,如果请求失败的情况
                d(text='确定',
                  resourceId='com.tencent.mobileqq:id/name',
                  index='2').click()
            z.heartbeat()
            code = self.scode.GetVertifyCode(GetBindNumber,
                                             self.scode.QQ_CONTACT_BIND, '4')
            newStart = 0

            d(resourceId='com.tencent.mobileqq:id/name',
              className='android.widget.EditText').set_text(code)
            d(text='完成', resourceId='com.tencent.mobileqq:id/name').click()
            z.heartbeat()
            z.sleep(5)
            if d(textContains='没有可匹配的').exists:
                return 'false'

        return 'true'
Пример #10
0
    def LoginPlayCode(self, d, z):
        self.scode = smsCode(d.server.adb.device_serial())
        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)
        sourcePng = os.path.join(base_dir, "%s_s.png" % (self.GetUnique()))
        codePng = os.path.join(base_dir, "%s_c.png" % (self.GetUnique()))
        codeEditTextObj = d(resourceId='com.tencent.mobileqq:id/name',
                            index='2',
                            className="android.widget.EditText")
        if codeEditTextObj.exists:  # 需要验证码的情况
            icode = imageCode()
            im_id = ""
            for i in range(0, 4):  # 打码循环
                if i > 0:
                    icode.reportError(im_id)
                obj = d(resourceId='com.tencent.mobileqq:id/name',
                        className='android.widget.ImageView'
                        )  # 当弹出选择QQ框的时候,定位不到验证码图片
                obj = obj.info
                obj = obj['bounds']  # 验证码处的信息
                left = obj["left"]  # 验证码的位置信息
                top = obj['top']
                right = obj['right']
                bottom = obj['bottom']

                d.screenshot(sourcePng)  # 截取整个输入验证码时的屏幕

                img = Image.open(sourcePng)
                box = (left, top, right, bottom)  # left top right bottom
                region = img.crop(box)  # 截取验证码的图片

                img = Image.new('RGBA', (right - left, bottom - top))
                img.paste(region, (0, 0))

                img.save(codePng)
                im = open(codePng, 'rb')

                codeResult = icode.getCode(im, icode.CODE_TYPE_4_NUMBER_CHAR,
                                           60)

                code = codeResult["Result"]
                im_id = codeResult["Id"]
                os.remove(sourcePng)
                os.remove(codePng)

        return code
Пример #11
0
    def palyCode(self, d, z, picObj):
        self.scode = smsCode(d.server.adb.device_serial())
        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)
        sourcePng = os.path.join(base_dir, "%s_s.png" % (self.GetUnique()))
        codePng = os.path.join(base_dir, "%s_c.png" % (self.GetUnique()))
        icode = imageCode()
        im_id = ""
        code = ""
        for i in range(0, 2):  # 打码循环
            if i > 0:
                icode.reportError(im_id)
            obj = picObj.info
            obj = obj['bounds']  # 验证码处的信息
            left = obj["left"]  # 验证码的位置信息
            top = obj['top']
            right = obj['right']
            bottom = obj['bottom']

            d.screenshot(sourcePng)  # 截取整个输入验证码时的屏幕

            img = Image.open(sourcePng)
            box = (left, top, right, bottom)  # left top right bottom
            region = img.crop(box)  # 截取验证码的图片

            img = Image.new('RGBA', (right - left, bottom - top))
            img.paste(region, (0, 0))

            img.save(codePng)
            im = open(codePng, 'rb')

            codeResult = icode.getCode(im, icode.CODE_TYPE_4_NUMBER_CHAR, 60)

            code = codeResult["Result"]
            im_id = codeResult["Id"]
            os.remove(sourcePng)
            os.remove(codePng)
            z.heartbeat()
            if code.isalpha() or code.isisdigitv() or code.isalnum():
                break
            else:
                continue

        return code
Пример #12
0
    def playCode(self, codeImgObj):
        z.toast("非网页视图打码")
        self.scode = smsCode(d.server.adb.device_serial())
        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)
        sourcePng = os.path.join(base_dir, "%s_s.png" % (self.GetUnique()))
        codePng = os.path.join(base_dir, "%s_c.png" % (self.GetUnique()))
        icode = imageCode()
        im_id = ""
        for i in range(0, 4):  # 打码循环
            if i > 0:
                icode.reportError(im_id)

            obj = d(resourceId='com.tencent.mobileqqi:id/0', className='android.widget.ImageView')  # 当弹出选择QQ框的时候,定位不到验证码图片
            if not obj.exists:
                return False

            obj = obj.info
            obj = obj['bounds']  # 验证码处的信息
            left = obj["left"]  # 验证码的位置信息
            top = obj['top']
            right = obj['right']
            bottom = obj['bottom']

            d.screenshot(sourcePng)  # 截取整个输入验证码时的屏幕

            img = Image.open(sourcePng)
            box = (left, top, right, bottom)  # left top right bottom
            region = img.crop(box)  # 截取验证码的图片

            img = Image.new('RGBA', (right - left, bottom - top))
            img.paste(region, (0, 0))

            img.save(codePng)

            with open( codePng, 'rb' ) as im:
                codeResult = self.codedll.QQPlayCode( im )
Пример #13
0
    def action(self, d, z, args):
        z.toast("准备执行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(8)
        z.heartbeat()

        if d(text='消息').exists:  # 到了通讯录这步后看号有没有被冻结
            z.toast("卡槽状态正常,继续执行")
        else:
            z.toast("卡槽状态异常,跳过此模块")
            return
        z.heartbeat()
        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()  #等同于按返回键
        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(random.randint(1, 3))
        z.heartbeat()
        while not d(text="说说", className='android.widget.TextView').exists:
            z.sleep(1)
        if d(text="说说", className='android.widget.TextView').exists:
            d(text="说说", className='android.widget.TextView').click()
            # z.sleep(1)
            z.sleep(2)
        x1 = 516 / 540
        y1 = 173 / 888
        obj = d(index=6,
                className="android.widget.RelativeLayout",
                resourceId="com.tencent.mobileqq:id/name").child(
                    index=2,
                    className="android.widget.ImageView",
                    resourceId="com.tencent.mobileqq:id/name")
        while obj.exists:
            z.sleep(1)
            z.heartbeat()
            d.click(x1 * width, y1 * height)
            z.sleep(2)
            z.heartbeat()
            if d(text="删除", className='android.widget.TextView'):
                d(text="删除", className='android.widget.TextView').click()
                z.sleep(1)
                z.heartbeat()
                while d(text='确认',
                        resourceId="com.tencent.mobileqq:id/dialogRightBtn"
                        ).exists:
                    d(text='确认',
                      resourceId="com.tencent.mobileqq:id/dialogRightBtn"
                      ).click()
                    z.sleep(2)
        z.toast("模块完成")
        if (args["time_delay"]):
            z.sleep(int(args["time_delay"]))
Пример #14
0
    def action(self, d, z, args):
        z.toast( "准备执行TIM修改我的名片模块" )
        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( "网络通畅。开始执行: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( )
        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( 8 )
        z.heartbeat( )

        if d( text='消息' ).exists:  # 到了通讯录这步后看号有没有被冻结
            z.toast( "卡槽TIM状态正常,继续执行" )
        else:
            z.toast( "卡槽TIM状态异常,跳过此模块" )
            return
        z.heartbeat( )
        while True:                          #由于网速慢或手机卡可能误点
            if d( index=1, className='android.widget.ImageView' ).exists:
                # d(index=0,className="android.widget.RelativeLayout").child( index=1,resourceId="com.tencent.tim:id/name", className='android.widget.ImageView' ).click()
                z.heartbeat( )
                d( index=2, className="android.widget.FrameLayout" ).child( index=0,className="android.widget.RelativeLayout" ).click( )
                # d( index=2, className="android.widget.FrameLayout" ).child( index=0,className="android.widget.RelativeLayout" ).child( index=1, className='android.widget.ImageView' ).click()
            if d(text="加好友").exists:    #由于网速慢或手机卡可能误点
                d(text="加好友").click()
                d(text="返回",className="android.widget.TextView").click()
                d( index=2, className="android.widget.FrameLayout" ).child( index=0,className="android.widget.RelativeLayout" ).click( )
            z.sleep( 3 )
            if d( text='我的名片夹', resourceId='com.tencent.tim:id/name', className="android.widget.TextView" ).exists:
                z.heartbeat( )
                d( text='我的名片夹', resourceId='com.tencent.tim:id/name' ).click( )
                break
        z.sleep(1)

        if d(text="设置我的名片").exists:
            z.heartbeat( )
            d( text="设置我的名片" ).click()
            z.sleep( 1 )
            d(text="添加我的名片").click()
            z.sleep(1)
        else:
            z.heartbeat( )
            d(text="我的名片").click()
            z.sleep( 1 )
            d(index=2,text="编辑").click()
            z.heartbeat( )
            z.sleep( 2 )
            d(descriptionContains="名片图片").click()
            z.sleep( 2 )
            d( descriptionContains="显示更多" ).click( )
            z.sleep(2)
            if d(descriptionContains="显示更多").exists:
                z.toast("暂时无法更换名片")
                return
        d( text='从相册选择', resourceId='com.tencent.tim:id/action_sheet_button' ).click( )
        z.sleep( 3 )
        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:
            obj.click( )
            z.sleep( 3 )
            d( text='确定', resourceId='com.tencent.tim:id/name' ).click( )
            while d( text='正在识别' ).exists:
                time.sleep( 2 )
            z.heartbeat( )
        if d( text="重选" ).exists:
            d( text="重选" ).click( )
            d( index=0, className="com.tencent.widget.GridView",
               resourceId="com.tencent.tim:id/photo_list_gv" ).child( index=0,
                                                                      className="android.widget.RelativeLayout" ).click( )
            d( text='确定', resourceId='com.tencent.tim:id/name' ).click( )
            while d( text='正在识别' ).exists:
                time.sleep( 2 )
        z.sleep(2)
        d(text="完成").click()
Пример #15
0
    def action(self, d,z, args):
        z.heartbeat()
        self.scode = smsCode( d.server.adb.device_serial( ) )
        logger = util.logger

        runLock = int( args['run_lock'] )
        cateId = args['repo_normal_number_id']
        logger.info(cateId)
        cateType = 'information'
        totalList = self.repo.GetNUmberNormalTotal( cateId,cateType )
        normalTotal = int( totalList[0]['total'] )



        if normalTotal < runLock:
            z.toast( '库内未使用号码低于' + args['run_lock'] + ',开始拉号码' )

            str = d.info  # 获取屏幕大小等信息
            height = str["displayHeight"]
            width = str["displayWidth"]
            d.press.home( )

            while True:
                if d( text='微信' ).exists:
                    d( text='微信' ).click( )
                    break
                d.swipe( width - 20, height / 2, 0, height / 2, 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( )
            z.sleep( 1 )
            if d( text='添加朋友' ).exists:
                d( text='添加朋友' ).click( )
            else:
                d( description='更多功能按钮', className='android.widget.RelativeLayout' ).click( )
                z.sleep( 1 )
                d( text='添加朋友' ).click( )
            d( index='1', className='android.widget.TextView' ).click( )  # 点击搜索好友的输入框
            z.heartbeat( )

            lock_count = 0
            while True:
                lock_count = lock_count + 1
                if lock_count > int( args['check_count'] ):
                    z.toast( '成功检存' + args['check_count'] + '次,结束' )
                    break

                while True:
                    WXnumber = self.scode.GetPhoneNumber(self.scode.WECHAT_REGISTER)  # 获取接码平台手机号码
                    if WXnumber is not None:
                        z.sleep(3)
                        self.scode.defriendPhoneNumber( WXnumber, self.scode.WECHAT_REGISTER )  # 拉黑
                        break
                z.input(WXnumber)
                d( textContains='搜索:' ).click( )
                z.heartbeat( )
                while d( textContains='正在查找' ).exists:
                    z.sleep( 2 )
                z.heartbeat( )
                if d( textContains='操作过于频繁' ).exists:
                    repo_check_frequency_id = args['repo_check_frequency_id']
                    self.repo.uploadPhoneNumber(WXnumber, repo_check_frequency_id )
                    z.toast('操作过于频繁,模块停止运行')
                    break

                z.sleep( 1 )
                if d( textContains='用户不存在' ).exists:
                    repo_not_exist_id = args['repo_not_exist_id']
                    self.repo.uploadPhoneNumber( WXnumber,repo_not_exist_id )
                    d( descriptionContains='清除', index=2 ).click( )
                    z.sleep( 1 )
                    continue
                if d( textContains='状态异常' ).exists:
                    repo_exception_id = args['repo_exception_id']
                    self.repo.uploadPhoneNumber( WXnumber,repo_exception_id )
                    d( descriptionContains='清除', index=2 ).click( )
                    z.sleep(1)
                    continue
                z.heartbeat( )
                if d( text='详细资料' ).exists:
                    repo_normal_number_id = args['repo_normal_number_id']
                    para = {"phoneNumber": WXnumber, 'x_01': "exist", 'x_02': '0','x_03': '2000-01-01 00:00:00',
                            'x_04': '0', 'x_05': '空', 'x_06': '2000-01-01 00:00:00',
                            'x_19': 'CheckXunMa','x_27': '0', 'x_28': '0'}
                    self.repo.PostInformation( repo_normal_number_id, para )
                    d( descriptionContains='返回' ).click( )
                    d( descriptionContains='清除' ).click( )
                    z.sleep( 1 )
        else:
            z.toast( '库内未使用号码大于' + args['run_lock'] + ',模块无法运行' )
Пример #16
0
    def action(self, d, z, args):
        z.toast("准备执行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.qqlite").communicate()  # 强制停止
        d.server.adb.cmd(
            "shell",
            "am start -n com.tencent.qqlite/com.tencent.mobileqq.activity.SplashActivity"
        ).communicate()  # 拉起来
        z.sleep(8)
        z.heartbeat()

        if d(text='消息').exists:  # 到了通讯录这步后看号有没有被冻结
            z.toast("卡槽状态正常,继续执行")
        else:
            z.toast("卡槽状态异常,跳过此模块")
            return

        repo_material_cate_id = args["repo_material_cate_id"]  # 得到验证语的仓库号
        Material = self.repo.GetMaterial(repo_material_cate_id, 0, 1)
        gender1 = args['gender']
        wait = 1  # 判断素材仓库里是否由素材
        while wait == 1:
            try:
                material = Material[0]['content']  # 取出验证消息的内容
                wait = 0
            except Exception:
                d.server.adb.cmd(
                    "shell",
                    "am broadcast -a com.zunyun.zime.toast --es msg \"仓库为空,没有取到验证消息\""
                )
        add_count = int(args['add_count'])  # 要添加多少人
        repo_number_cate_id = int(args["repo_number_cate_id"])  # 得到取号码的仓库号
        wait = 1
        while wait == 1:
            numbers = self.repo.GetNumber(repo_number_cate_id, 120,
                                          add_count)  # 取出add_count条两小时内没有用过的号码
            if "Error" in numbers:  #
                d.server.adb.cmd(
                    "shell",
                    "am broadcast -a com.zunyun.zime.toast --es msg \"仓库为空,没有取到号码\""
                )
                continue
            wait = 0
        list = numbers  # 将取出的号码保存到一个新的集合
        # num = list[0]['number']
        QQnumber = numbers[0]['number']
        z.sleep(8)
        z.heartbeat()
        d(resourceId='com.tencent.qqlite:id/0', description='更多').click()
        z.heartbeat()
        z.sleep(2)
        if d(text='添加',
             resourceId='com.tencent.qqlite:id/action_sheet_button').exists:
            d(text='添加',
              resourceId='com.tencent.qqlite:id/action_sheet_button').click()
        else:
            z.heartbeat()
            d(resourceId='com.tencent.qqlite:id/0', description='更多').click()
            z.heartbeat()
            d(text='添加',
              resourceId='com.tencent.qqlite:id/action_sheet_button').click()
        z.sleep(3)
        z.heartbeat()
        d(text='QQ号/手机号/邮箱/群', resourceId='com.tencent.qqlite:id/0').click()
        z.heartbeat()
        d(text='QQ号/手机号/邮箱/群',
          resourceId='com.tencent.qqlite:id/et_search_keyword').set_text(
              QQnumber)  # 第一次添加的帐号 list[0]
        z.heartbeat()
        d(text='找人:', resourceId='com.tencent.qqlite:id/0').click()
        z.sleep(2)
        count = 0
        while count < add_count:
            numbers = list[i]
            repo_material_cate_id = args["repo_material_cate_id"]  # 得到验证语的仓库号
            Material = self.repo.GetMaterial(repo_material_cate_id, 0, 1)
            material = Material[0]['content']  # 得到验证语
            numbers = self.repo.GetNumber(repo_number_cate_id, 120,
                                          add_count)  # 取出两小时内没有用过的号码
            list = numbers
            QQnumber = numbers[0]['number']
            z.heartbeat()
            time.sleep(1)
            if d(text='没有找到相关结果',
                 className='android.widget.TextView').exists:  #没有这个人的情况
                z.heartbeat()
                d(resourceId='com.tencent.qqlite:id/ib_clear_text',
                  description='清空搜索输入').click()
                obj = d(text='QQ号/手机号/邮箱/群',
                        resourceId='com.tencent.qqlite:id/et_search_keyword')
                if obj.exists:
                    z.heartbeat()
                    z.sleep(2)
                    obj.set_text(QQnumber)  # 下次要添加的号码
                obj = d(text='网络查找人',
                        resourceId='com.tencent.qqlite:id/et_search_keyword')
                if obj.exists:
                    z.heartbeat()
                    z.sleep(2)
                    obj.set_text(QQnumber)  # 下次要添加的号码
                d(text='找人:', resourceId='com.tencent.qqlite:id/0').click()
                time.sleep(1)
                continue
            time.sleep(2)
            if d(className='android.view.View').child(
                    index=1,
                    resourceId='com.tencent.qqlite:id/0',
                    className="android.widget.RelativeLayout"
            ).exists:  #在同一查条件有多个人
                z.heartbeat()
                z.sleep(2)
                d(className='android.view.View').child(
                    index=1,
                    resourceId='com.tencent.qqlite:id/0',
                    className="android.widget.RelativeLayout").click()
                z.sleep(2)
            z.sleep(1)
            obj = d(index=1,
                    resourceId="com.tencent.qqlite:id/0",
                    className="android.widget.RelativeLayout").child(
                        index=2,
                        resourceId="com.tencent.qqlite:id/0",
                        className="android.widget.TextView")
            if obj.exists:
                obj = obj.info
                gender2 = obj["text"][0:1]
            else:
                gender2 = "不限"

            z.heartbeat()
            if gender1 != '不限':
                z.heartbeat()
                if gender1 == gender2:  # gender1是外界设定的,gender2是读取到的
                    z.sleep(1)
                else:
                    z.sleep(1)
                    d(text='个人资料').click()
                    z.sleep(2)
                    if d(resourceId='com.tencent.qqlite:id/ib_clear_text',
                         description='清空搜索输入').exists:
                        d(resourceId='com.tencent.qqlite:id/ib_clear_text',
                          description='清空搜索输入').click()
                    else:
                        d(text='个人资料').click()
                    obj = d(
                        text='QQ号/手机号/邮箱/群',
                        resourceId='com.tencent.qqlite:id/et_search_keyword')
                    if obj.exists:
                        z.heartbeat()
                        z.sleep(2)
                        obj.set_text(
                            QQnumber)  # 要改为从库里取-------------------------------
                    obj = d(
                        text='网络查找人',
                        resourceId='com.tencent.qqlite:id/et_search_keyword')
                    if obj.exists:
                        z.sleep(2)
                        obj.set_text(QQnumber)
                    if d(text='找人:',
                         resourceId='com.tencent.qqlite:id/0').exists:
                        d(text='找人:',
                          resourceId='com.tencent.qqlite:id/0').click()
                    else:
                        d(resourceId="com.tencent.qqlite:id/0",
                          description="取消").click()
                        if d(resourceId='com.tencent.qqlite:id/ib_clear_text',
                             description='清空搜索输入').exists:
                            d(resourceId='com.tencent.qqlite:id/ib_clear_text',
                              description='清空搜索输入').click()
                        else:
                            d(text='个人资料').click()

                        obj = d(
                            text='QQ号/手机号/邮箱/群',
                            resourceId='com.tencent.qqlite:id/et_search_keyword'
                        )
                        if obj.exists:
                            z.heartbeat()
                            z.sleep(2)
                            obj.set_text(
                                QQnumber
                            )  # 要改为从库里取-------------------------------
                        obj = d(
                            text='网络查找人',
                            resourceId='com.tencent.qqlite:id/et_search_keyword'
                        )
                        if obj.exists:
                            z.sleep(2)
                            obj.set_text(QQnumber)
                        if d(text='找人:',
                             resourceId='com.tencent.qqlite:id/0').exists:
                            d(text='找人:',
                              resourceId='com.tencent.qqlite:id/0').click()
                    continue
            z.heartbeat()
            d(text='加好友', className="android.widget.TextView").click()
            time.sleep(1)
            if d(text='加好友').exists:  #拒绝被添加为好友的情况
                time.sleep(1)
                z.heartbeat()
                d(text='个人资料').click()
                z.sleep(2)
                d(resourceId='com.tencent.qqlite:id/ib_clear_text',
                  description='清空搜索输入').click()
                z.sleep(2)
                obj = d(text='QQ号/手机号/邮箱/群',
                        resourceId='com.tencent.qqlite:id/et_search_keyword')
                if obj.exists:
                    z.heartbeat()
                    z.sleep(2)
                    obj.set_text(
                        QQnumber)  # 要改为从库里取------------------------------
                obj = d(text='网络查找人',
                        resourceId='com.tencent.qqlite:id/et_search_keyword')
                if obj.exists:
                    z.heartbeat()
                    z.sleep(2)
                    obj.set_text(QQnumber)
                time.sleep(1)
                d(text='找人:', resourceId='com.tencent.qqlite:id/0').click()
                continue
            time.sleep(2)
            if d(text="风险提示").exists:  #风险提示
                z.sleep(1)
                z.heartbeat()
                d(text="取消").click()
                z.sleep(1)
                d(text='个人资料').click()
                z.sleep(2)
                d(resourceId='com.tencent.qqlite:id/ib_clear_text',
                  description='清空搜索输入').click()
                obj = d(text='QQ号/手机号/邮箱/群',
                        resourceId='com.tencent.qqlite:id/et_search_keyword')
                if obj.exists:
                    z.heartbeat()
                    z.sleep(2)
                    obj.set_text(
                        QQnumber)  # 要改为从库里取-------------------------------
                obj = d(text='网络查找人',
                        resourceId='com.tencent.qqlite:id/et_search_keyword')
                if obj.exists:
                    z.sleep(2)
                    obj.set_text(QQnumber)
                d(text='找人:', resourceId='com.tencent.qqlite:id/0').click()
                continue
            if d(text='必填').exists:  #要回答问题的情况
                z.heartbeat()
                z.sleep(2)
                d(text='身份验证').click()
                z.sleep(1)
                z.heartbeat()
                d(text='个人资料').click()
                z.sleep(2)
                d(resourceId='com.tencent.qqlite:id/ib_clear_text',
                  description='清空搜索输入').click()
                obj = d(text='QQ号/手机号/邮箱/群',
                        resourceId='com.tencent.qqlite:id/et_search_keyword')
                if obj.exists:
                    z.sleep(2)
                    obj.set_text(QQnumber)  # 下次要添加的号码-
                obj = d(text='网络查找人',
                        resourceId='com.tencent.qqlite:id/et_search_keyword')
                if obj.exists:
                    z.heartbeat()
                    z.sleep(2)
                    obj.set_text(QQnumber)
                time.sleep(1)
                d(text='找人:', resourceId='com.tencent.qqlite:id/0').click()
                continue
            time.sleep(1)
            z.heartbeat()
            obj = d(text='发送')  #不需要验证可直接添加为好友的情况
            if obj.exists:
                z.sleep(2)
                obj.click()
                if d(text='添加失败,请勿频繁操作').exists:
                    # z.sleep( 1 )
                    # z.heartbeat( )
                    # d( text="确定", className="android.widget.TextView" ).click( )
                    # z.sleep( 1 )
                    # z.heartbeat( )
                    # d( text="返回", className="android.widget.TextView" ).click( )
                    z.toast("频繁操作,跳出模块")
                    return
                else:
                    print(str(QQnumber) + "请求发送成功")
                time.sleep(1)
                d(resourceId='com.tencent.qqlite:id/ib_clear_text',
                  description='清空搜索输入').click()
                obj = d(text='QQ号/手机号/邮箱/群',
                        resourceId='com.tencent.qqlite:id/et_search_keyword')
                if obj.exists:
                    z.heartbeat()
                    z.sleep(2)
                    obj.set_text(
                        QQnumber)  # 要改为从库里取-------------------------------
                obj = d(text='网络查找人',
                        resourceId='com.tencent.qqlite:id/et_search_keyword')
                if obj.exists:
                    z.sleep(2)
                    obj.set_text(QQnumber)
                d(text='找人:', resourceId='com.tencent.qqlite:id/0').click()
                continue
            time.sleep(2)
            obj = d(index=3,
                    className="android.widget.EditText",
                    resourceId="com.tencent.qqlite:id/0").info  #将之前消息框的内容删除
            obj = obj['text']
            lenth = len(obj)
            t = 0
            while t < lenth:
                d.press.delete()
                t = t + 1
            time.sleep(2)
            z.input(material)
            z.sleep(1)
            d(text='下一步').click()
            z.sleep(1)
            d(text='发送').click()
            print(str(QQnumber) + "请求发送成功")
            time.sleep(1)
            if d(text='添加失败,请勿频繁操作',
                 resourceId='com.tencent.qqlite:id/name').exists:
                # z.sleep( 1 )
                # z.heartbeat( )
                # d( text="确定", className="android.widget.TextView" ).click( )
                # z.sleep( 1 )
                # z.heartbeat( )
                # d( text="返回", className="android.widget.TextView" ).click( )
                print("频繁操作,跳出模块")
                z.toast("频繁操作,跳出模块")
                return
            z.sleep(2)
            d(resourceId='com.tencent.qqlite:id/ib_clear_text',
              description='清空搜索输入').click()
            z.sleep(2)
            count = count + 1
            if count == add_count:
                print("模块已完成")
                z.toast("模块已完成")
                break
            if count < add_count:
                obj = d(text='QQ号/手机号/邮箱/群',
                        resourceId='com.tencent.qqlite:id/et_search_keyword')
                if obj.exists:
                    obj.click()
                    z.input(QQnumber)
                    z.sleep(2)
                obj = d(text='网络查找人',
                        resourceId='com.tencent.qqlite:id/et_search_keyword')
                if obj.exists:
                    obj.set_text(QQnumber)
                    z.sleep(1)
                d(text='找人:', resourceId='com.tencent.qqlite:id/0').click()
            else:
                z.sleep(2)
                z.heartbeat()
                d(text="取消", className="android.widget.Button").click()
                z.sleep(2)
                d(text="返回", className="android.widget.TextView").click()
        if (args["time_delay"]):
            time.sleep(int(args["time_delay"]))
Пример #17
0
    def login(self, d, args, z):
        z.heartbeat()
        self.scode = smsCode(d.server.adb.device_serial())
        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)
        sourcePng = os.path.join(base_dir, "%s_s.png" % (self.GetUnique()))
        codePng = os.path.join(base_dir, "%s_c.png" % (self.GetUnique()))
        cate_id = args["repo_cate_id"]

        time_limit1 = args['time_limit1']
        numbers = self.repo.GetAccount(cate_id, time_limit1, 1)
        while len(numbers) == 0:
            z.heartbeat()
            d.server.adb.cmd(
                "shell",
                "am broadcast -a com.zunyun.zime.toast --es msg \"QQ帐号库%s号仓库无%s分钟未用,开始切换卡槽\""
                % (cate_id, time_limit1)).communicate()
            z.sleep(2)
            return 0

        QQNumber = numbers[0]['number']  # 即将登陆的QQ号
        QQPassword = numbers[0]['password']
        z.sleep(1)
        z.heartbeat()
        d.server.adb.cmd("shell",
                         "pm clear com.tencent.mobileqq").communicate()  # 清除缓存
        d.server.adb.cmd(
            "shell",
            "am start -n com.tencent.mobileqq/com.tencent.mobileqq.activity.SplashActivity"
        ).communicate()  # 拉起来
        while d(textContains='正在更新数据').exists:
            z.sleep(2)

        z.sleep(20)
        z.heartbeat()
        d.dump(compressed=False)
        if d(text='登 录',
             resourceId='com.tencent.mobileqq:id/btn_login').exists:
            d(text='登 录').click()

        z.sleep(1)
        # d(className='android.widget.EditText', index=0).set_text(QQNumber)  # 1918697054----xiake1234.  QQNumber
        d(className='android.widget.EditText',
          index=0).click()  # 1918697054----xiake1234.  QQNumber
        z.input(QQNumber)
        z.sleep(1)
        # d(resourceId='com.tencent.mobileqq:id/password').set_text(QQPassword)  # Bn2kJq5l     QQPassword
        d(resourceId='com.tencent.mobileqq:id/password').click(
        )  # Bn2kJq5l     QQPassword
        z.input(QQPassword)
        z.heartbeat()
        logger = util.logger
        print('QQ号:%s,QQ密码:%s' % (QQNumber, QQPassword))
        d.dump(compressed=False)
        d(text='登 录', resourceId='com.tencent.mobileqq:id/login').click()
        z.sleep(1)
        while d(text='登录中').exists:
            z.sleep(2)
        z.sleep(20)
        z.heartbeat()

        loginStatusList = z.qq_getLoginStatus(d)
        if loginStatusList is None:
            if d(text='消息').exists and d(text='联系人').exists and d(
                    text='动态').exists:
                loginStatusList = {'success': True}
            else:
                loginStatusList = {'success': False}

        loginStatus = loginStatusList['success']
        if loginStatus:
            return QQNumber

        detection_robot = d(index='3', className="android.widget.EditText")
        not_detection_robot = d(resourceId='com.tencent.mobileqq:id/name',
                                index='2',
                                className="android.widget.EditText")
        if detection_robot.exists or not_detection_robot.exists:  # 需要验证码的情况
            z.toast("非网页打码")
            icode = imageCode()
            im_id = ""
            for i in range(0, 4):  # 打码循环
                if i > 0:
                    icode.reportError(im_id)
                obj = d(resourceId='com.tencent.mobileqq:id/name',
                        className='android.widget.ImageView'
                        )  # 当弹出选择QQ框的时候,定位不到验证码图片
                if not obj.exists:
                    obj = d(index='2', className='android.widget.Image')
                obj = obj.info
                obj = obj['bounds']  # 验证码处的信息
                left = obj["left"]  # 验证码的位置信息
                top = obj['top']
                right = obj['right']
                bottom = obj['bottom']

                d.screenshot(sourcePng)  # 截取整个输入验证码时的屏幕

                img = Image.open(sourcePng)
                box = (left, top, right, bottom)  # left top right bottom
                region = img.crop(box)  # 截取验证码的图片

                img = Image.new('RGBA', (right - left, bottom - top))
                img.paste(region, (0, 0))

                img.save(codePng)
                im = open(codePng, 'rb')

                codeResult = icode.getCode(im, icode.CODE_TYPE_4_NUMBER_CHAR,
                                           60)

                code = codeResult["Result"]
                im_id = codeResult["Id"]
                os.remove(sourcePng)
                os.remove(codePng)
                z.heartbeat()
                z.sleep(5)
                if not_detection_robot.exists:
                    d(resourceId='com.tencent.mobileqq:id/name',
                      index='2',
                      className="android.widget.EditText").set_text(code)
                else:
                    detection_robot.set_text(code)
                z.sleep(3)
                if d(descriptionContains='验证',
                     className='android.view.View').exists:
                    d(descriptionContains='验证',
                      className='android.view.View').click()
                else:
                    d(text='完成',
                      resourceId='com.tencent.mobileqq:id/ivTitleBtnRightText'
                      ).click()
                z.sleep(6)
                z.heartbeat()
                while d(className='android.widget.ProgressBar',
                        index=0).exists:  # 网速不给力时,点击完成后仍然在加载时的状态
                    z.sleep(2)
                z.sleep(3)
                z.heartbeat()
                if detection_robot.exists or not_detection_robot.exists:
                    continue
                else:
                    break
            z.sleep(5)
            if d(textContains='验证码').exists:
                return "nothing"
        else:
            if self.WebViewBlankPages(d)[2] > 200:
                z.toast("不是空白页")
                self.WebViewPlayCode(d, z)

        z.heartbeat()
        # z.toast( "强制停止,拉起" )
        # d.server.adb.cmd( "shell", "am force-stop com.tencent.mobileqq" ).communicate( )  # 强制停止
        # z.sleep( 1 )
        # d.server.adb.cmd( "shell",
        #                   "am start -n com.tencent.mobileqq/com.tencent.mobileqq.activity.SplashActivity" ).communicate( )  # 拉起来

        z.sleep(5)
        z.heartbeat()
        loginStatusList = z.qq_getLoginStatus(d)
        if loginStatusList is None:
            if d(text='消息').exists and d(text='联系人').exists and d(
                    text='动态').exists:
                loginStatusList = {'success': True}
            else:
                z.toast("登陆新场景,现无法判断登陆状态")
                loginStatusList = {'success': False}

        loginStatus = loginStatusList['success']
        if loginStatus:
            z.toast("卡槽QQ状态正常,继续执行")
        else:
            if d(text='去安全中心').exists:
                self.repo.BackupInfo(cate_id, 'frozen', QQNumber, '',
                                     '')  # 仓库号,使用中,QQ号,设备号_卡槽号QQNumber

            else:
                self.repo.BackupInfo(cate_id, 'normal', QQNumber, '', '')

            z.toast("卡槽QQ状态异常,跳过此模块")
            return "nothing"

        if d(text='马上绑定').exists:
            self.BindAddressBook(z, d, args)

        if d(text='匹配手机通讯录').exists:  # 登陆上后弹出t通讯录的情况
            d(text='匹配手机通讯录').click()
            z.sleep(1.5)
            if d(text='取消').exists:
                d(text='取消').child()

        if d(textContains="请在小米神隐模式中将TIM设置为“无限制”。").exists:
            z.toast("我是小米神隐")
            d(text='我知道了').click()

        return QQNumber
Пример #18
0
    def login(self, d, z, args, password):
        z.toast("开始登录")
        d.server.adb.cmd("shell", "pm clear im.yixin" ).communicate( )  # 清除缓存
        d.server.adb.cmd("shell", "am start -n im.yixin/.activity.WelcomeActivity" ).communicate( )  # 拉起易信
        z.sleep(10)
        z.heartbeat()
        if d(text='很抱歉,“易信”已停止运行。').exists:
            d( text='确定' ).click( )
            return 'fail'

        d.server.adb.cmd( "shell", "am force-stop im.yixin" ).communicate( )  # 强制停止
        d.server.adb.cmd( "shell", "am start -n im.yixin/.activity.WelcomeActivity" ).communicate( )  # 拉起易信
        z.sleep(5)
        z.heartbeat()
        if d( text='很抱歉,“易信”已停止运行。' ).exists:
            d( text='确定' ).click( )
            return 'fail'

        if d( text='接受', resourceId='im.yixin:id/easy_dialog_positive_btn' ).exists:
            d( text='接受', resourceId='im.yixin:id/easy_dialog_positive_btn' ).click( )
            z.sleep( 2 )

        if d( text='登 录' ).exists:
            d( text='登 录' ).click()
            z.sleep( 2 )

        while True:
            z.heartbeat()
            z.toast(u"开始获取手机号码")
            self.scode = smsCode( d.server.adb.device_serial( ) )

            str = d.info  # 获取屏幕大小等信息
            height = str["displayHeight"]
            width = str["displayWidth"]

            if d( resourceId='im.yixin:id/register_phone_number_edittext' ).exists:
                d( resourceId='im.yixin:id/register_phone_number_edittext' ).click.bottomright( )


            number_cate_id = args['repo_number_id']
            # number_time_limit = int(args['number_time_limit'])  # 号码提取时间间隔
            exist_numbers = self.repo.GetNumber( number_cate_id, 0, 1, 'exist' )
            remain = 1 - len( exist_numbers )
            normal_numbers = self.repo.GetNumber( number_cate_id, 0, remain, 'normal' )
            numbers = exist_numbers + normal_numbers
            if len( numbers ) == 0:
                d.server.adb.cmd("shell",
                              "am broadcast -a com.zunyun.zime.toast --es msg \"电话号码%s号仓库为空\"" % number_cate_id).communicate()
                return None

            number = numbers[0]["number"]

            if d(resourceId='im.yixin:id/editUserid').exists:
                d(resourceId='im.yixin:id/editUserid').click()

            try:
                PhoneNumber = self.scode.GetPhoneNumber(self.scode.WECHAT_REGISTER, number)  # 获取接码平台手机号码
            except:
                PhoneNumber = None

            # PhoneNumber = self.scode.GetPhoneNumber(self.scode.WECHAT_REGISTER)  # 获取接码平台手机号码

            if PhoneNumber is None:
                z.toast(u'讯码查不无此号,重新获取')
                continue
            else:
                z.toast(u"成功获取手机号")
                break

        z.input(PhoneNumber)

        if d(text='找回密码').exists:
            d(text='找回密码').click()
            z.sleep(3)

        if not d(text='中国',resourceId='im.yixin:id/country_name').exists:
            d( resourceId='im.yixin:id/country_name' ).click()
            z.sleep(1)
            while True:
                if d( text='中国').exists:
                    d( text='中国' ).click()
                    break
                else:
                    d.swipe( width / 2, height * 6 / 7, width / 2, height / 7 )

        if d(text='下一步').exists:
            d(text='下一步').click()
            z.sleep(8)

        z.heartbeat()
        if d(text='注册',resourceId='im.yixin:id/easy_dialog_positive_btn').exists:
            return "fail"

        if d(text='输入收到的验证码').exists:
            d(text='输入收到的验证码').click()

        try:
            code = self.scode.GetVertifyCode( PhoneNumber, self.scode.WECHAT_REGISTER, 4)  # 获取接码验证码
            self.scode.defriendPhoneNumber( PhoneNumber, self.scode.WECHAT_REGISTER )
        except:
            self.scode.defriendPhoneNumber( PhoneNumber, self.scode.WECHAT_REGISTER )
            code = ''

        if code == '':
            z.toast( PhoneNumber + '手机号,获取不到验证码' )
            return "fail"

        z.input(code)
        if d(text='下一步').exists:
            d(text='下一步').click()
            z.sleep(8)

        if d(resourceId='im.yixin:id/password_edittext').exists:
            z.input(password)
            z.sleep(1)
            d(text='完成').click()
            z.sleep(15)
            z.heartbeat()

        if d(text='立即更新').exists and d(text='下次再说').exists:
            d(text='下次再说').click()

        if d(text='消息').exists and d(text='电话').exists and d(text='发现').exists and d(text='通讯录').exists:
            z.toast(u'登录成功')
            return PhoneNumber
        else:
            z.toast(u'登录失败,重新登录')
            return "fail"
Пример #19
0
    def palyCode(self, d, z, picObj):
        self.scode = smsCode(d.server.adb.device_serial())
        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)
        sourcePng = os.path.join(base_dir, "%s_s.png" % (self.GetUnique()))
        codePng = os.path.join(base_dir, "%s_c.png" % (self.GetUnique()))
        icode = imageCode()
        im_id = ""
        code = ""
        for i in range(0, 2):  # 打码循环
            if i > 0:
                icode.reportError(im_id)
            obj = picObj.info
            obj = obj['bounds']  # 验证码处的信息
            left = obj["left"]  # 验证码的位置信息
            top = obj['top']
            right = obj['right']
            bottom = obj['bottom']

            d.screenshot(sourcePng)  # 截取整个输入验证码时的屏幕

            img = Image.open(sourcePng)
            box = (left, top, right, bottom)  # left top right bottom
            region = img.crop(box)  # 截取验证码的图片

            img = Image.new('RGBA', (right - left, bottom - top))
            img.paste(region, (0, 0))

            img.save(codePng)
            time.sleep(1)
            with open(codePng, 'rb') as f:
                # file = f.read()
                file = "data:image/jpeg;base64," + base64.b64encode(f.read())
                da = {"IMAGES": file}
                path = "/ocr.index"
                headers = {
                    "Content-Type": "application/x-www-form-urlencoded",
                    "Connection": "Keep-Alive"
                }
                conn = httplib.HTTPConnection("162626i1w0.51mypc.cn",
                                              10082,
                                              timeout=30)
                time.sleep(0.5)
                params = urllib.urlencode(da)
                conn.request(method="POST",
                             url=path,
                             body=params,
                             headers=headers)
                time.sleep(1)
                response = conn.getresponse()
                if response.status == 200:
                    code = response.read()
                    break
                else:
                    continue
                # print data
            # im = open(codePng, 'rb')
            #
            # codeResult = icode.getCode(im, icode.CODE_TYPE_4_NUMBER_CHAR, 60)
            #
            # code = codeResult["Result"]
            # im_id = codeResult["Id"]
            os.remove(sourcePng)
            os.remove(codePng)
            z.heartbeat()
            break
            # if code.isalpha() or code.isisdigitv() or code.isalnum():
            #     break
            # else:
            #     continue

        return code
Пример #20
0
    def action(self, d, z, args):
        z.toast("准备执行TIM唤醒名片加好友模块")
        z.sleep(1)
        z.heartbeat()
        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()
        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(8)
        z.heartbeat()

        if d(text='消息').exists:  # 到了通讯录这步后看号有没有被冻结
            z.toast("卡槽TIM状态正常,继续执行")
        else:
            z.toast("卡槽TIM状态异常,跳过此模块")
            return
        z.heartbeat()

        gender1 = args['gender']
        cate_id1 = args["repo_material_cate_id"]
        add_count = int(args['add_count'])  # 要添加多少人
        switch_card = args["switch_card"]
        switch = args["switch"]
        count = 1
        num = 0
        while True:  #总人数
            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)
                return
            message = Material[0]['content']  # 取出验证消息的内容

            repo_number_cate_id = int(args["repo_number_cate_id"])  # 得到取号码的仓库号

            numbers = self.repo.GetNumber(repo_number_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号仓库为空,等待中\""
                    % repo_number_cate_id).communicate()
                z.sleep(5)
                return
            z.heartbeat()
            QQnumber = numbers[0]['number']
            print(QQnumber)
            z.sleep(1)

            z.cmd(
                "shell",
                'am start -a android.intent.action.VIEW -d "mqqapi://card/show_pslcard?src_type=internal\&version=1\&uin=%s\&card_type=person\&source=qrcode"'
                % QQnumber)  # qq名片页面
            z.sleep(random.randint(5, 7))
            if d(text='TIM').exists:
                z.heartbeat()
                d(text='TIM').click()
                z.sleep(2)
                z.heartbeat()
                while d(text='仅此一次').exists:
                    z.heartbeat()
                    d(text='仅此一次').click()
            z.sleep(1)
            if d(text="申请加群").exists:
                continue
            objtext = d(index=0,
                        className="android.widget.LinearLayout").child(
                            index=1,
                            className="android.widget.RelativeLayout").child(
                                index=1, className="android.widget.TextView")
            if objtext.exists:
                objtext = objtext.info['text']
                if objtext == "":
                    z.toast("账号为空,继续唤醒")
                    continue
            if gender1 != '不限':
                gender2 = self.Gender(d, z)
                z.heartbeat()
                if gender1 == gender2:  # gender1是外界设定的,gender2是读取到的
                    z.sleep(1)
                else:
                    # d( text='返回', resourceId='com.tencent.tim:id/ivTitleBtnLeft' ).click( )
                    # add_count = add_count+1
                    continue
            z.sleep(1)
            n = 1
            d.dump(compressed=False)
            if d(text='加好友', className="android.widget.Button").exists:
                d(text='加好友', className="android.widget.Button").click()
                z.toast("点了一次")
                z.sleep(6)
            d.dump(compressed=False)
            if d(text='加好友', className="android.widget.Button").exists:
                d(text='加好友', className="android.widget.Button").click()
                z.toast("点了二次")
                z.sleep(6)
            d.dump(compressed=False)
            if d(text='加好友', className="android.widget.Button").exists:
                d(text='加好友', className="android.widget.Button").click()
                z.toast("点了三次")
                z.sleep(6)
            z.heartbeat()
            d.dump(compressed=False)
            if d(text='加好友',
                 className="android.widget.Button").exists:  #拒绝被添加的轻况
                z.toast("无法加好友,重新唤醒")
                z.sleep(2)
                continue
            if d(text='必填',
                 resourceId='com.tencent.tim:id/name').exists:  #要回答问题的情况
                z.heartbeat()
                continue
            d.dump(compressed=False)
            if d(text="风险提示").exists:  #风险提示
                z.heartbeat()
                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("频繁操作,跳出模块")
                    return
                else:
                    count = count + 1
                    print(QQnumber + "请求发送成功")
                continue

            if switch == "是":
                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)
            # 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(3)
                            z.heartbeat()
                            d.dump(compressed=False)
                            if d(text="添加我的名片").exists:
                                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(3)
            z.heartbeat()
            d.dump(compressed=False)
            if d(text='下一步',
                 resourceId='com.tencent.tim:id/ivTitleBtnRightText').exists:
                z.heartbeat()
                d(text='下一步',
                  resourceId='com.tencent.tim:id/ivTitleBtnRightText').click()
            z.sleep(2)
            if d(text='发送').exists:
                z.heartbeat()
                d(text='发送').click()
                z.sleep(3)
            if d(resourceId='com.tencent.tim:id/name',
                 text='添加失败,请勿频繁操作').exists:  # 操作过于频繁的情况
                z.toast("频繁操作,跳出模块")
                return
            print(QQnumber + "请求发送成功")
            z.heartbeat()
            if count == add_count:
                break
            count = count + 1
        z.sleep(1)
        z.toast("模块完成")
        if (args["time_delay"]):
            z.sleep(int(args["time_delay"]))
Пример #21
0
    def action(self, d, z, args):
        z.toast("准备执行TIM搜索加好友模块")
        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( "网络通畅。开始执行: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()
        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(8)
        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("登录状态异常,跳过此模块")
                return

        repo_material_cate_id = args["repo_material_cate_id"]  # 得到验证语的仓库号
        Material = self.repo.GetMaterial(repo_material_cate_id, 0, 1)
        switch_card = args["switch_card"]
        gender1 = args['gender']
        wait = 1  # 判断素材仓库里是否由素材
        while wait == 1:
            try:
                material = Material[0]['content']  # 取出验证消息的内容
                wait = 0
            except Exception:
                d.server.adb.cmd(
                    "shell",
                    "am broadcast -a com.zunyun.zime.toast --es msg \"仓库为空,没有取到验证消息\""
                )
        add_count = int(args['add_count'])  # 要添加多少人
        repo_number_cate_id = int(args["repo_number_cate_id"])  # 得到取号码的仓库号
        wait = 1
        while wait == 1:
            numbers = self.repo.GetNumber(repo_number_cate_id, 120,
                                          add_count)  # 取出add_count条两小时内没有用过的号码
            if "Error" in numbers:  #
                d.server.adb.cmd(
                    "shell",
                    "am broadcast -a com.zunyun.zime.toast --es msg \"仓库为空,没有取到号码\""
                )
                continue
            wait = 0
        # list = numbers # 将取出的号码保存到一个新的集合
        # num = list[0]['number']
        QQnumber = numbers[0]['number']
        z.sleep(1)
        z.heartbeat()
        d(resourceId='com.tencent.tim:id/name', description='快捷入口').click()
        z.heartbeat()
        z.sleep(1)
        if d(text='加好友', resourceId='com.tencent.tim:id/name').exists:
            d(text='加好友', resourceId='com.tencent.tim:id/name').click()
            z.heartbeat()
        else:
            z.heartbeat()
            d(resourceId='com.tencent.tim:id/name', description='快捷入口').click()
            z.heartbeat()
            d(text='加好友', resourceId='com.tencent.tim:id/name').click()
        z.sleep(1)
        z.heartbeat()
        if d(text='QQ号/手机号/群', resourceId='com.tencent.tim:id/name').exists:
            d(text='QQ号/手机号/群', resourceId='com.tencent.tim:id/name').click()
        # d(text='QQ号/手机号/群', resourceId='com.tencent.tim:id/et_search_keyword').click()
        z.heartbeat()
        # d(text='QQ号/手机号/群', resourceId='com.tencent.tim:id/et_search_keyword').set_text(QQnumber)  # 第一次添加的帐号 list[0]
        z.input(QQnumber)
        z.heartbeat()
        # d( text='搜索', resourceId='com.tencent.tim:id/btn_cancel_search' ).click( )
        if d(text="找人:", className="android.widget.TextView").exists:
            d(text="找人:", className="android.widget.TextView").click()
            z.sleep(3)
        count = 0
        while count < add_count:
            # numbers = list[0]
            repo_material_cate_id = args["repo_material_cate_id"]  # 得到验证语的仓库号
            Material = self.repo.GetMaterial(repo_material_cate_id, 0, 1)
            material = Material[0]['content']  # 得到验证语
            numbers = self.repo.GetNumber(repo_number_cate_id, 120,
                                          1)  # 取出两小时内没有用过的号码
            # list = numbers
            QQnumber = numbers[0]['number']
            z.heartbeat()
            time.sleep(1)
            if d(text='没有找到相关结果',
                 className='android.widget.TextView').exists:  #没有这个人的情况
                z.heartbeat()
                d(resourceId='com.tencent.tim:id/ib_clear_text',
                  description='清空').click()
                obj = d(text='QQ号/手机号/群',
                        resourceId='com.tencent.tim:id/et_search_keyword')
                if obj.exists:
                    z.heartbeat()
                    z.sleep(2)
                    obj.set_text(QQnumber)  # 下次要添加的号码
                obj = d(text='网络查找人',
                        resourceId='com.tencent.tim:id/et_search_keyword')
                if obj.exists:
                    z.heartbeat()
                    z.sleep(2)
                    obj.set_text(QQnumber)  # 下次要添加的号码
                if d(text="找人:", className="android.widget.TextView").exists:
                    d(text="找人:", className="android.widget.TextView").click()
                    z.sleep(3)
                time.sleep(1)
                continue
            time.sleep(2)
            if d(text="申请加群").exists:
                d(resourceId="com.tencent.tim:id/ivTitleBtnLeft",
                  description="返回按钮").click()
                d(resourceId='com.tencent.tim:id/ib_clear_text',
                  description='清空').click()
                obj = d(text='QQ号/手机号/群',
                        resourceId='com.tencent.tim:id/et_search_keyword')
                if obj.exists:
                    z.heartbeat()
                    z.sleep(2)
                    obj.set_text(QQnumber)  # 下次要添加的号码
                obj = d(text='网络查找人',
                        resourceId='com.tencent.tim:id/et_search_keyword')
                if obj.exists:
                    z.heartbeat()
                    z.sleep(2)
                    obj.set_text(QQnumber)  # 下次要添加的号码
                # d( text='搜索', resourceId='com.tencent.tim:id/btn_cancel_search' ).click( )
                if d(text="找人:", className="android.widget.TextView").exists:
                    d(text="找人:", className="android.widget.TextView").click()
                    z.sleep(3)
                time.sleep(1)
                continue
            z.sleep(2)
            if d(className='android.widget.AbsListView').child(
                    index=1,
                    resourceId='com.tencent.tim:id/name').exists:  #在同一查条件有多个人
                z.heartbeat()
                z.sleep(2)
                d(className='android.widget.AbsListView').child(
                    index=1, resourceId='com.tencent.tim:id/name').click()
                z.sleep(2)
            z.sleep(1)
            z.heartbeat()
            if gender1 != '不限':
                gender2 = self.Gender(d, z)
                z.heartbeat()
                if gender1 == gender2:  # gender1是外界设定的,gender2是读取到的
                    z.sleep(1)
                else:
                    d(text='返回',
                      resourceId='com.tencent.tim:id/ivTitleBtnLeft').click()
                    z.sleep(2)
                    d(resourceId='com.tencent.tim:id/ib_clear_text',
                      description='清空').click()
                    obj = d(text='QQ号/手机号/群',
                            resourceId='com.tencent.tim:id/et_search_keyword')
                    if obj.exists:
                        z.heartbeat()
                        z.sleep(2)
                        obj.set_text(
                            QQnumber)  # 要改为从库里取-------------------------------
                    obj = d(text='网络查找人',
                            resourceId='com.tencent.tim:id/et_search_keyword')
                    if obj.exists:
                        z.sleep(2)
                        obj.set_text(QQnumber)
                    if d(text="找人:",
                         className="android.widget.TextView").exists:
                        d(text="找人:",
                          className="android.widget.TextView").click()
                        z.sleep(3)
                    continue
            z.heartbeat()
            d(text='加好友', resourceId='com.tencent.tim:id/name').click()
            time.sleep(1)
            if d(text='加好友',
                 resourceId='com.tencent.tim:id/name').exists:  #拒绝被添加为好友的情况
                time.sleep(1)
                z.heartbeat()
                d(text='返回',
                  resourceId='com.tencent.tim:id/ivTitleBtnLeft').click()
                z.sleep(2)
                d(resourceId='com.tencent.tim:id/ib_clear_text',
                  description='清空').click()
                z.sleep(2)
                obj = d(text='QQ号/手机号/群',
                        resourceId='com.tencent.tim:id/et_search_keyword')
                if obj.exists:
                    z.heartbeat()
                    z.sleep(2)
                    obj.set_text(
                        QQnumber)  # 要改为从库里取------------------------------
                obj = d(text='网络查找人',
                        resourceId='com.tencent.tim:id/et_search_keyword')
                if obj.exists:
                    z.heartbeat()
                    z.sleep(2)
                    obj.set_text(QQnumber)
                time.sleep(1)
                if d(text="找人:", className="android.widget.TextView").exists:
                    d(text="找人:", className="android.widget.TextView").click()
                    z.sleep(3)
                continue
            time.sleep(2)
            if d(text="风险提示").exists:  #风险提示
                z.sleep(1)
                z.heartbeat()
                d(text="取消").click()
                z.sleep(1)
                d(text='返回',
                  resourceId='com.tencent.tim:id/ivTitleBtnLeft').click()
                z.sleep(2)
                d(resourceId='com.tencent.tim:id/ib_clear_text',
                  description='清空').click()
                obj = d(text='QQ号/手机号/群',
                        resourceId='com.tencent.tim:id/et_search_keyword')
                if obj.exists:
                    z.heartbeat()
                    z.sleep(2)
                    obj.set_text(
                        QQnumber)  # 要改为从库里取-------------------------------
                obj = d(text='网络查找人',
                        resourceId='com.tencent.tim:id/et_search_keyword')
                if obj.exists:
                    z.sleep(2)
                    obj.set_text(QQnumber)
                if d(text="找人:", className="android.widget.TextView").exists:
                    d(text="找人:", className="android.widget.TextView").click()
                    z.sleep(3)
                continue
            if d(text='必填',
                 resourceId='com.tencent.tim:id/name').exists:  #要回答问题的情况
                z.heartbeat()
                z.sleep(2)
                d(text='返回',
                  resourceId='com.tencent.tim:id/ivTitleBtnLeft').click()
                time.sleep(1)
                z.heartbeat()
                d(text='返回',
                  resourceId='com.tencent.tim:id/ivTitleBtnLeft').click()
                z.sleep(2)
                d(resourceId='com.tencent.tim:id/ib_clear_text',
                  description='清空').click()
                obj = d(text='QQ号/手机号/群',
                        resourceId='com.tencent.tim:id/et_search_keyword')
                if obj.exists:
                    z.sleep(2)
                    obj.set_text(QQnumber)  # 下次要添加的号码-
                obj = d(text='网络查找人',
                        resourceId='com.tencent.tim:id/et_search_keyword')
                if obj.exists:
                    z.heartbeat()
                    z.sleep(2)
                    obj.set_text(QQnumber)
                time.sleep(1)
                if d(text="找人:", className="android.widget.TextView").exists:
                    d(text="找人:", className="android.widget.TextView").click()
                    z.sleep(3)
                continue
            time.sleep(1)
            z.heartbeat()
            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.sleep( 1 )
                    # z.heartbeat( )
                    # d( text="确定", className="android.widget.TextView" ).click( )
                    # z.sleep( 1 )
                    # z.heartbeat( )
                    # d( text="返回", className="android.widget.TextView" ).click( )
                    z.toast("频繁操作,跳出模块")
                    return
                else:
                    print(str(QQnumber) + "请求发送成功")
                    time.sleep(1)
                    d(text='返回',
                      resourceId='com.tencent.tim:id/ivTitleBtnLeft').click()
                    z.sleep(2)
                    d(resourceId='com.tencent.tim:id/ib_clear_text',
                      description='清空').click()
                    obj = d(text='QQ号/手机号/群',
                            resourceId='com.tencent.tim:id/et_search_keyword')
                    if obj.exists:
                        z.heartbeat()
                        z.sleep(2)
                        obj.set_text(
                            QQnumber)  # 要改为从库里取-------------------------------
                    obj = d(text='网络查找人',
                            resourceId='com.tencent.tim:id/et_search_keyword')
                    if obj.exists:
                        z.sleep(2)
                        obj.set_text(QQnumber)
                    if d(text="找人:",
                         className="android.widget.TextView").exists:
                        d(text="找人:",
                          className="android.widget.TextView").click()
                        z.sleep(3)
                    continue
            time.sleep(2)
            obj = d(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)
            d(className='android.widget.EditText',
              resourceId='com.tencent.tim:id/name').click()  #发送验证消息  material
            z.input(material)
            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(3)
                            z.heartbeat()
                            d.dump(compressed=False)
                            if d(text="添加我的名片").exists:
                                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()
            d(text='下一步',
              resourceId='com.tencent.tim:id/ivTitleBtnRightText').click()
            z.sleep(1)
            d(text='发送',
              resourceId='com.tencent.tim:id/ivTitleBtnRightText').click()
            print(str(QQnumber) + "请求发送成功")
            time.sleep(1)
            if d(text='添加失败,请勿频繁操作',
                 resourceId='com.tencent.tim:id/name').exists:
                # z.sleep( 1 )
                # z.heartbeat( )
                # d( text="确定", className="android.widget.TextView" ).click( )
                # z.sleep( 1 )
                # z.heartbeat( )
                # d( text="返回", className="android.widget.TextView" ).click( )
                z.toast("频繁操作,跳出模块")
                return
            z.sleep(1)
            d(text='返回',
              resourceId='com.tencent.tim:id/ivTitleBtnLeft').click()
            z.sleep(2)
            d(resourceId='com.tencent.tim:id/ib_clear_text',
              description='清空').click()
            z.sleep(1)
            count = count + 1
            if count < add_count:
                obj = d(text='QQ号/手机号/群',
                        resourceId='com.tencent.tim:id/et_search_keyword')
                if obj.exists:
                    obj.click()

                    z.input(QQnumber)
                    z.sleep(2)
                obj = d(text='网络查找人',
                        resourceId='com.tencent.tim:id/et_search_keyword')
                if obj.exists:
                    obj.set_text(QQnumber)
                    z.sleep(1)
                if d(text="找人:", className="android.widget.TextView").exists:
                    d(text="找人:", className="android.widget.TextView").click()
                    z.sleep(3)
            else:
                z.sleep(2)
                z.heartbeat()
                d(text="取消", className="android.widget.Button").click()
                z.sleep(2)
                d(text="返回", className="android.widget.TextView").click()

            if count == add_count:
                print("模块已完成")
                z.toast("模块已完成")
                break
        if (args["time_delay"]):
            time.sleep(int(args["time_delay"]))
Пример #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版TIM我的名片夹加好友模块")
        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("网络通畅。开始执行: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()
        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(8)
        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

        add_count = int(args['add_count'])  # 要添加多少人
        repo_number_cate_id = int(args["repo_number_cate_id"])  # 得到取号码的仓库号
        switch_card = args["switch_card"]
        z.heartbeat()
        z.sleep(8)
        # while True:  # 由于网速慢或手机卡可能误点
        #     if d( index=1, className='android.widget.ImageView' ).exists:
        #         # d(index=0,className="android.widget.RelativeLayout").child( index=1,resourceId="com.tencent.tim:id/name", className='android.widget.ImageView' ).click()
        #         z.heartbeat( )
        #         d( index=2, className="android.widget.FrameLayout" ).child( index=0,
        #                                                                     className="android.widget.RelativeLayout" ).click( )
        #         # d( index=2, className="android.widget.FrameLayout" ).child( index=0,className="android.widget.RelativeLayout" ).child( index=1, className='android.widget.ImageView' ).click()
        #     if d( text="加好友" ).exists:  # 由于网速慢或手机卡可能误点
        #         d( text="加好友" ).click( )
        #         d( text="返回", className="android.widget.TextView" ).click( )
        #         d( index=2, className="android.widget.FrameLayout" ).child( index=0,
        #                                                                     className="android.widget.RelativeLayout" ).click( )
        #     z.sleep( 3 )
        #     if d( text='我的名片夹', resourceId='com.tencent.tim:id/name', className="android.widget.TextView" ).exists:
        #         z.heartbeat( )
        #         d( text='我的名片夹', resourceId='com.tencent.tim:id/name' ).click( )
        #         break
        # z.sleep( 1 )
        if d(index=1, className="android.widget.RelativeLayout").child(
                index=0, className="android.widget.ImageView").exists:
            d(index=1, className="android.widget.RelativeLayout").child(
                index=0, className="android.widget.ImageView").click()
        z.sleep(1)
        if d(description="名片夹").exists:
            d(description="名片夹").click()
            z.sleep(0.5)
        else:
            if d(index=1, className="android.widget.RelativeLayout").child(
                    index=0, className="android.widget.ImageView").exists:
                d(index=1, className="android.widget.RelativeLayout").child(
                    index=0, className="android.widget.ImageView").click()
            z.sleep(1)
            if d(description="名片夹").exists:
                d(description="名片夹").click()
            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

        count = 0
        i = 0
        num = 0  # 请求失败的次数
        repo_material_cate_id = args["repo_material_cate_id"]
        # for i in range(0, add_count, +1):  # 总人数
        flag = True
        while count < add_count:
            numbers = self.repo.GetNumber(repo_number_cate_id, 60,
                                          1)  # 取出totalNumber条一小时内没有用过的号码
            if len(numbers) == 0:
                d.server.adb.cmd(
                    "shell",
                    "am broadcast -a com.zunyun.zime.toast --es msg \"号码%s号仓库为空,等待中\""
                    % repo_number_cate_id).communicate()
                now = datetime.datetime.now()
                nowtime = now.strftime(
                    '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
                z.setModuleLastRun(self.mid)
                z.toast('模块结束,保存的时间是%s' % nowtime)
                return
            list = numbers  # 将取出的号码保存到一个新的集合
            Material = self.repo.GetMaterial(repo_material_cate_id, 0, 1)
            if len(Material) == 0:
                d.server.adb.cmd(
                    "shell",
                    "am broadcast -a com.zunyun.zime.toast --es msg \"消息素材%s号仓库为空,没有取到消息\""
                    % repo_material_cate_id).communicate()
                now = datetime.datetime.now()
                nowtime = now.strftime(
                    '%Y-%m-%d %H:%M:%S')  # 将日期转化为字符串 datetime => string
                z.setModuleLastRun(self.mid)
                z.toast('模块结束,保存的时间是%s' % nowtime)
                return
            material = Material[0]['content']
            if flag:
                z.sleep(1)
                if d(text="添加第一张名片").exists:
                    z.heartbeat()
                    d(text="添加第一张名片").click()
                    z.sleep(1)
                else:
                    z.heartbeat()
                    d(index=0,
                      className="android.widget.RelativeLayout",
                      resourceId="com.tencent.tim:id/name").child(
                          index=1,
                          className="android.widget.RelativeLayout").child(
                              index=1,
                              className="android.widget.ImageView",
                              resourceId="com.tencent.tim:id/name").click()
                    z.sleep(1)
                    d(index=2, text="编辑").click()
                    z.sleep(1)
                    if d(text="重新扫描",
                         className="android.widget.TextView").exists:
                        d(text="重新扫描",
                          className="android.widget.TextView").click()
                        z.sleep(2)
                    z.heartbeat()

                while d(index=3, className="android.widget.Button").exists:
                    z.heartbeat()
                    d(index=3, className="android.widget.Button").click()
                z.sleep(1)
                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:
                    obj.click()
                    z.sleep(1)
                    d(text='确定', resourceId='com.tencent.tim:id/name').click()
                    z.heartbeat()
                    z.sleep(4)
                    flag = False

            obj = d(index=0,
                    className="android.widget.LinearLayout",
                    resourceId="com.tencent.tim:id/name").child(
                        index=0, className="android.widget.EditText")
            if obj.exists:
                obj.click()
                z.heartbeat()
                obj = obj.info['text']
                lenth = len(obj)
                t = 0
                while t < 11:
                    z.heartbeat()
                    d.press.delete()
                    t = t + 1
                z.input(list[0]['number'])

            z.heartbeat()
            z.sleep(1)
            i = 0
            d(text="完成").click()
            z.sleep(2)
            Str = d.info  # 获取屏幕大小等信息
            height = Str["displayHeight"]
            width = Str["displayWidth"]

            # for index in range( 0, 3 ):
            z.heartbeat()
            d.swipe(width / 2 + 20, height / 2, width / 2 + 20, 0, 5)
            z.sleep(1)
            obj = d(text="加好友", className="android.widget.Button")
            if obj.exists:
                z.heartbeat()
                obj.click()
                z.sleep(1)
            else:
                d.swipe(width / 2, height * 1 / 6, width / 2, height * 5 / 6)
                continue
            if d(text="加好友",
                 className="android.widget.Button").exists:  # 请求失败活拒绝
                z.heartbeat()
                num = num + 1  # 请求失败的次数+1
                d.swipe(width / 2, height * 1 / 6, width / 2, height * 5 / 6)
                continue
            if d(text="风险提示").exists:  # 风险提示
                z.heartbeat()
                z.sleep(1)
                d(text="取消").click()
                z.sleep(1)
                z.heartbeat()
                d(text="返回", className="android.widget.TextView").click()
                d.swipe(width / 2, height * 1 / 6, width / 2, height * 5 / 6)
                continue
            if d(text='发送',
                 resourceId='com.tencent.tim:id/ivTitleBtnRightText'
                 ).exists:  # 可直接添加为好友的情况
                z.heartbeat()
                d(text='发送',
                  resourceId='com.tencent.tim:id/ivTitleBtnRightText').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
                elif d(resourceId='com.tencent.tim:id/name',
                       text='添加失败,请勿频繁操作').exists:  # 操作过于频繁的情况
                    # z.sleep( 1 )
                    # z.heartbeat( )
                    # d(text = "确定",className="android.widget.TextView").click()
                    # z.sleep( 1 )
                    # z.heartbeat( )
                    # d(text="返回",className="android.widget.TextView").click()
                    z.toast("频繁操作,跳出模块")
                    return
            if d(text='必填',
                 resourceId='com.tencent.tim:id/name').exists:  # 需要验证时
                z.heartbeat()
                d(text="返回", className="android.widget.TextView").click()
                num = 0
                d.swipe(width / 2, height * 1 / 6, width / 2, height * 5 / 6)
                continue
            num = 0
            z.heartbeat()
            obj = d(className='android.widget.EditText',
                    resourceId='com.tencent.tim:id/name').info  # 将之前消息框的内容删除
            obj = obj['text']
            lenth = len(obj)
            t = 0
            while t < lenth:
                z.heartbeat()
                d.press.delete()
                t = t + 1
            time.sleep(1)
            z.heartbeat()
            d(className='android.widget.EditText',
              resourceId='com.tencent.tim:id/name').click()  # 发送验证消息  material
            z.sleep(1)
            z.heartbeat()
            z.input(material)
            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(3)
                            z.heartbeat()
                            d.dump(compressed=False)
                            if d(text="添加我的名片").exists:
                                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()
            d(text='下一步',
              resourceId='com.tencent.tim:id/ivTitleBtnRightText').click()
            z.heartbeat()
            z.sleep(1)
            d(text='发送',
              resourceId='com.tencent.tim:id/ivTitleBtnRightText').click()
            time.sleep(1)
            if d(text="请求发送失败").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
            elif d(resourceId='com.tencent.tim:id/name',
                   text='添加失败,请勿频繁操作').exists:  # 操作过于频繁的情况
                # d( text="确定", className="android.widget.TextView" ).click( )
                # z.sleep( 1 )
                # d( text="返回", className="android.widget.TextView" ).click( )
                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
            count = count + 1
            if count == add_count:
                break
            if num > 3:  # 一直请求失败,跳出循环
                z.heartbeat()
                print("该QQ好暂时无法通过我的名片夹加好友,请切换账号或者执行其他操作")
                z.toast("该QQ好暂时无法通过我的名片夹加好友,请切换账号或者执行其他操作")
                z.sleep(5)
                break
        z.sleep(1)
        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"]))
Пример #23
0
    def LoginPlayCode(self, d, z):
        self.scode = smsCode( d.server.adb.device_serial( ) )
        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 )
        sourcePng = os.path.join( base_dir, "%s_s.png" % (self.GetUnique( )) )
        codePng = os.path.join( base_dir, "%s_c.png" % (self.GetUnique( )) )
        detection_robot = d( index='3', className="android.widget.EditText" )
        not_detection_robot = d( resourceId='com.tencent.tim:id/name', index='2',
                                 className="android.widget.EditText" )
        if detection_robot.exists or not_detection_robot.exists:  # 需要验证码的情况
            icode = imageCode( )
            im_id = ""
            for i in range( 0, 4 ):  # 打码循环
                # if i > 0:
                #     icode.reportError( im_id )
                obj = d( resourceId='com.tencent.tim:id/name',
                         className='android.widget.ImageView' )  # 当弹出选择QQ框的时候,定位不到验证码图片
                if not obj.exists:
                    obj = d( index='2', className='android.widget.Image' )
                obj = obj.info
                obj = obj['bounds']  # 验证码处的信息
                left = obj["left"]  # 验证码的位置信息
                top = obj['top']
                right = obj['right']
                bottom = obj['bottom']

                d.screenshot( sourcePng )  # 截取整个输入验证码时的屏幕

                img = Image.open( sourcePng )
                box = (left, top, right, bottom)  # left top right bottom
                region = img.crop( box )  # 截取验证码的图片

                img = Image.new( 'RGBA', (right - left, bottom - top) )
                img.paste( region, (0, 0) )

                img.save( codePng )
                with open( codePng, 'rb' ) as f:
                    # file = f.read()
                    file = "data:image/jpeg;base64," + base64.b64encode( f.read( ) )
                    da = {"IMAGES": file}
                    path = "/ocr.index"
                    headers = {"Content-Type": "application/x-www-form-urlencoded",
                               "Connection": "Keep-Alive"}
                    conn = httplib.HTTPConnection( "162626i1w0.51mypc.cn", 10082, timeout=30 )
                    params = urllib.urlencode( da )
                    conn.request( method="POST", url=path, body=params, headers=headers )
                    response = conn.getresponse( )
                    if response.status == 200:
                        code = response.read( )
                    else:
                        continue
                os.remove( sourcePng )
                os.remove( codePng )
                z.heartbeat( )
                z.sleep( 5 )
                if not_detection_robot.exists:
                    d( resourceId='com.tencent.tim:id/name', index='2',
                       className="android.widget.EditText" ).set_text( code )
                else:
                    detection_robot.set_text( code )
                z.sleep( 3 )
                if d( descriptionContains='验证', className='android.view.View' ).exists:
                    d( descriptionContains='验证', className='android.view.View' ).click( )
                else:
                    d( text='完成', resourceId='com.tencent.tim:id/ivTitleBtnRightText' ).click( )
                z.sleep( 5 )
                z.heartbeat( )
                while d( className='android.widget.ProgressBar', index=0 ).exists:  # 网速不给力时,点击完成后仍然在加载时的状态
                    z.sleep( 2 )
                z.heartbeat( )
                if detection_robot.exists or not_detection_robot.exists:
                    continue
                else:
                    break
            z.sleep( 5 )
            if d( textContains='验证码' ).exists:
                return "no"
            else:
                return "yes"
        else:
            return "no"
Пример #24
0
    def action(self, d, z, args):
        z.toast("准备执行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(8)
        z.heartbeat()

        if d(text='消息').exists:  # 到了通讯录这步后看号有没有被冻结
            z.toast("卡槽状态正常,继续执行")
        else:
            z.toast("卡槽状态异常,跳过此模块")
            return
        z.heartbeat()
        str = d.info  # 获取屏幕大小等信息
        height = str["displayHeight"]
        width = str["displayWidth"]
        repo_material_cate_id = args["repo_material_cate_id"]
        textType = args["type"]
        z.heartbeat()
        if d(text='绑定手机号码').exists:
            d(text='关闭').click()
        if d(textContains='匹配').exists:
            d.press.back()  #等同于按返回键
        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(random.randint(1, 3))
        z.heartbeat()
        while not d(index=2,
                    description="写说说等按钮",
                    className='android.widget.LinearLayout').exists:
            z.sleep(1)

        count = int(args["count"])
        for i in range(0, count):
            Material = self.repo.GetMaterial(repo_material_cate_id, 5, 1)
            if len(Material) == 0:
                d.server.adb.cmd(
                    "shell",
                    "am broadcast -a com.zunyun.zime.toast --es msg \"消息素材%s号仓库为空,没有取到消息\""
                    % repo_material_cate_id).communicate()
                z.sleep(10)
                return
            message = Material[0]['content']
            if d(index=2,
                 description="写说说等按钮",
                 className='android.widget.LinearLayout').exists:
                d(index=2,
                  description="写说说等按钮",
                  className='android.widget.LinearLayout').click()
                # z.sleep(1)
                z.sleep(2)
                z.heartbeat()
            if d(index=1, text="说说",
                 className="android.widget.TextView").exists:
                d(index=1, text="说说",
                  className="android.widget.TextView").click()
                z.sleep(1)
                z.heartbeat()
            if textType == "文字" or textType == "文字+图片":
                z.input(message.encode('utf-8'))
            z.sleep(2)

            if textType == "照片" or textType == "文字+图片":
                z.sleep(1)
                z.heartbeat()
                d(text="照片/视频", className="android.widget.TextView").click()
                z.sleep(1)
                z.heartbeat()
                d(text="从手机选择",
                  resourceId="com.tencent.mobileqq:id/action_sheet_button"
                  ).click()
                z.sleep(3)
                if d(className='com.tencent.widget.GridView').child(
                        className='android.widget.RelativeLayout',
                        index=i).exists:
                    d(className='com.tencent.widget.GridView').child(
                        className='android.widget.RelativeLayout',
                        index=i).click()
                else:
                    if d(className='com.tencent.widget.GridView').child(
                            className='android.widget.RelativeLayout',
                            index=0).exists:
                        d(className='com.tencent.widget.GridView').child(
                            className='android.widget.RelativeLayout',
                            index=0).click()
                    else:
                        z.toast("没有照片,停止模块")
                        return
                z.sleep(1)
                z.heartbeat()
                if d(textContains="确定",
                     resourceId="com.tencent.mobileqq:id/send_btn").exists:
                    d(textContains="确定",
                      resourceId="com.tencent.mobileqq:id/send_btn").click()
                    z.sleep(2)
                    z.heartbeat()
            if d(text="发表",
                 resourceId="com.tencent.mobileqq:id/ivTitleBtnRightText"
                 ).exists:
                d(text="发表",
                  resourceId="com.tencent.mobileqq:id/ivTitleBtnRightText"
                  ).click()
                z.sleep(3)
                z.heartbeat()

        z.toast("模块完成")
        if (args["time_delay"]):
            z.sleep(int(args["time_delay"]))
Пример #25
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"]))
Пример #26
0
    def action(self, d,z,args):
        z.toast( "准备执行轻聊版唤醒名片加好友模块" )
        z.sleep(1)
        z.heartbeat( )
        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( "网络通畅。开始执行:轻聊版唤醒名片加好友" )
                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.qqlite" ).communicate( )  # 强制停止
        d.server.adb.cmd( "shell",
                          "am start -n com.tencent.qqlite/com.tencent.mobileqq.activity.SplashActivity" ).communicate( )  # 拉起来
        z.sleep( 8 )
        z.heartbeat( )

        if d( text='消息' ).exists:  # 到了通讯录这步后看号有没有被冻结
            z.toast( "卡槽状态正常,继续执行" )
        else:
            z.toast( "卡槽状态异常,跳过此模块" )
            return
        z.heartbeat()

        gender1 = args['gender']
        cate_id1 = args["repo_material_cate_id"]
        add_count = int(args['add_count'])  # 要添加多少人
        count = 0
        while count<add_count:            #总人数
            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 )
                return
            message = Material[0]['content']  # 取出验证消息的内容

            repo_number_cate_id = int( args["repo_number_cate_id"] )  # 得到取号码的仓库号

            numbers = self.repo.GetNumber( repo_number_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号仓库为空,等待中\"" % repo_number_cate_id ).communicate( )
                z.sleep( 5 )
                return
            z.heartbeat( )
            QQnumber = numbers[0]['number']
            # print(QQnumber)
            z.sleep(2)

            z.cmd("shell", 'am start -a android.intent.action.VIEW -d "mqqapi://card/show_pslcard?src_type=internal\&version=1\&uin=%s\&card_type=person\&source=qrcode"'%QQnumber)  # qq名片页面
            # z.sleep(5)
            z.sleep(random.randint(1,3))
            if d(text='QQ轻聊版').exists:
                z.heartbeat( )
                d(text='QQ轻聊版').click()
                z.sleep(2)
                if d(text='仅此一次').exists:
                    d(text='仅此一次').click()
                    z.heartbeat( )
            z.sleep(1)
            if d(text="消息").exists:
                continue
            z.heartbeat()
            if d(text="申请加群").exists:
                continue

            obj = d(index=1,resourceId="com.tencent.qqlite:id/0",className="android.widget.RelativeLayout").child(index=2,resourceId="com.tencent.qqlite:id/0",className="android.widget.TextView")
            if obj.exists:
                obj = obj.info
                gender2 = obj["text"][0:1]
            else:
                gender2 = "不限"

            if gender1 != '不限':
                z.heartbeat( )
                if gender1 == gender2:  # gender1是外界设定的,gender2是读取到的
                    z.sleep( 1 )
                else:
                    continue
            z.sleep(1)
            d.dump( compressed=False )
            d(text='加好友',className="android.widget.TextView").click()
            z.sleep( random.randint( 1, 3 ) )
            z.heartbeat()
            if d(text='加好友',className="android.widget.TextView").exists:    #拒绝被添加的轻况
                print("拒绝添加或请求失败")
                continue
            if d(text='必填').exists:                     #要回答问题的情况
                print("需要回答问题")
                z.heartbeat( )
                continue
            d.dump( compressed=False )
            if d(text="风险提示").exists:   #风险提示
                print( "该账号有风险" )
                z.heartbeat()
                continue
            obj = d( text='发送', resourceId='com.tencent.qqlite:id/ivTitleBtnRightText' )  # 不需要验证可直接添加为好友的情况
            if obj.exists:
                z.sleep( 2 )
                obj.click( )
                z.sleep( random.randint( 3, 5 ) )
                if d( text='添加失败,请勿频繁操作').exists:
                    z.heartbeat( )
                    z.toast( "频繁操作,跳出模块" )
                    print( "频繁操作,跳出模块" )
                    return
                else:
                    print( QQnumber + "请求发送成功" )
                continue
            d.dump( compressed=False )
            # obj = d(index=3, className='android.widget.EditText', resourceId='com.tencent.qqlite:id/name' ).info  # 将之前消息框的内容删除        需要发送验证信息
            obj = d(index=3,className="android.widget.EditText",resourceId="com.tencent.qqlite:id/0").info
            obj = obj['text']
            lenth = len( obj )
            t = 0
            while t < lenth:
                d.press.delete( )
                t = t + 1
            time.sleep( 1 )
            z.input(message)
            d(text='下一步',resourceId='com.tencent.qqlite:id/ivTitleBtnRightText').click()
            z.sleep( 1 )
            d(text='发送').click()
            z.sleep( random.randint( 3, 5 ) )
            if d(  text='添加失败,请勿频繁操作' ).exists:  # 操作过于频繁的情况
                z.toast("频繁操作,跳出模块")
                print("频繁操作,跳出模块")
                return
            print(QQnumber+"请求发送成功")
            z.heartbeat()
            count = count + 1
            if count == add_count:
                z.toast("加好友请求次数达到设定值,模块完成")
                break
        # z.toast("模块完成!")
        z.sleep(1)

        if (args["time_delay"]):
            z.sleep(int(args["time_delay"]))
Пример #27
0
    def Bind(self, d, z):
        circle = 0
        self.scode = smsCode(d.server.adb.device_serial())
        newStart = 1
        while newStart == 1:
            GetBindNumber = self.scode.GetPhoneNumber(
                self.scode.QQ_CONTACT_BIND)
            print(GetBindNumber)
            z.sleep(2)
            d(resourceId='com.tencent.mobileqq:id/name',
              className='android.widget.EditText').set_text(
                  GetBindNumber)  #GetBindNumber
            z.heartbeat()
            z.sleep(2)
            d(text='下一步').click()
            z.sleep(3)
            if d(textContains='中国').exists:  #操作过于频繁的情况
                return 'false'

            if d(text='确定').exists:  #提示该号码已经与另一个qq绑定,是否改绑,如果请求失败的情况
                d(text='确定', ).click()
                z.sleep(1)
                if d(text='确定').exists:
                    z.toast('请求失败,结束程序')
                    return 'false'
            z.heartbeat()

            code = self.scode.GetVertifyCode(GetBindNumber,
                                             self.scode.QQ_CONTACT_BIND, '4')
            print(code)
            newStart = 0
            d(resourceId='com.tencent.mobileqq:id/name',
              className='android.widget.EditText').set_text(code)
            if d(text='请输入验证码').exists:
                if circle < 4:
                    z.toast('没有接收到验证码')
                    d(textContains='返回').click()
                    if d(text='取消').exists:
                        d(text='取消').click()
                    d(textContains='联系人').click()
                    d(className='android.view.View').child(
                        className='android.widget.RelativeLayout',
                        index=4).click()
                    circle = circle + 1
                    newStart = 1
                    continue
                else:
                    z.toast('程序结束')
                    return 'false'

            z.heartbeat()
            d(text='下一步').click()
            z.sleep(2)
            if d(text='请求失败').exists:
                d(text='确定').click()
                return 'false'
            if d(textContains='匹配手机通讯录').exists:
                d(text='匹配手机通讯录').click()
                time.sleep(10)
            self.scode.defriendPhoneNumber(GetBindNumber,
                                           self.scode.QQ_CONTACT_BIND)
            if d(textContains='匹配手机通讯录').exists:
                d(text='匹配手机通讯录').click()
                z.sleep(15)

        return 'true'
Пример #28
0
    def action(self, d,z, args):
        z.heartbeat()
        Str = d.info  # 获取屏幕大小等信息
        height = Str["displayHeight"]
        width = Str["displayWidth"]
        saveCate = args['repo_information_id']
        self.scode = smsCode(d.server.adb.device_serial())
        logger = util.logger
        while True:
            nowTime = datetime.datetime.now( ).strftime( "%Y-%m-%d %H:%M:%S" );  # 生成当前时间
            NUM_INFO = self.repo.GetInformationByDevice( saveCate, d.server.adb.device_serial() )
            x26 = NUM_INFO[0]['x26']
            if x26 == '登陆状态YSE':
                z.toast('该设备已成功注册微信号')
                break
            d.press.home()
            d.server.adb.cmd("shell", "pm clear com.tencent.mm").communicate()  # 清除缓存,返回home页面

            while True:
                if d(text='微信').exists:
                    d(text='微信').click()
                    break
                d.swipe( width - 20, height / 2, 0, height / 2, 5 )

            z.sleep(8)
            if d(text='注册').exists:
                d(text='注册').click()
            cate_id = args['repo_material_id']  # 得到昵称库的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
            name = Material[0]['content']  # 从素材库取出的要发的材料
            z.input(name)       #name


            if not d( text='中国' ).exists:
                d( text='国家/地区' ).click( )
                d( className='android.support.v7.widget.LinearLayoutCompat', index=1 ).click( )
                z.input( '中' )
                d( text='中国' ).click( )


            d(className='android.widget.ScrollView').child(className='android.widget.LinearLayout', index=2).child(
                className='android.widget.EditText', index=1).click()
            d(className='android.widget.ScrollView').child(className='android.widget.LinearLayout', index=2).child(
                className='android.widget.EditText', index=1).click.bottomright()
            z.heartbeat()


            information_cate_id = args['repo_information_id']
            numbers = self.repo.GetInformation(information_cate_id)
            if len(numbers) == 0:
                d.server.adb.cmd( "shell",
                                  "am broadcast -a com.zunyun.zime.toast --es msg \"资料库%s号仓库为空,没有取到手机号\"" % information_cate_id ).communicate( )
                z.sleep(10)
                return
            z.heartbeat()

            number = numbers[0]['phonenumber']

            PhoneNumber = self.scode.GetPhoneNumber(self.scode.WECHAT_REGISTER,number)#获取接码平台手机号码
            # PhoneNumber = '13829507040'


            if PhoneNumber is None:
                self.repo.DeleteInformation( saveCate, number )
                z.toast('讯码查不无此号')
                continue

            z.heartbeat()
            print(PhoneNumber)
            z.input(PhoneNumber)
            d(className='android.widget.LinearLayout',index=3).child(className='android.widget.EditText').click()
            d(textContains='密码').click()
            z.heartbeat()
            password = self.GenPassword()
            z.input(password)
            print(password)
            print('↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑  上面是手机+密码 ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ')
            z.heartbeat()

            d(text='注册').click()
            z.sleep(3)


            if d(textContains='操作太频繁,请稍后再试').exists:
                para = {"phoneNumber": PhoneNumber, 'x_03': nowTime, 'x_19': 'WXRegister'}
                self.repo.PostInformation( saveCate, para )
                d( text='确定' ).click()
                break


            if d(textContains='相同手机号不可频繁重复注册微信帐号').exists:
                para = {"phoneNumber": PhoneNumber, 'x_03': nowTime, 'x_19': 'WXRegister'}
                self.repo.PostInformation( saveCate, para )
                d( text='确定' ).click()
                break

            d( text='确定' ).click()
            z.sleep(3)


            if d(textContains='正在验证').exists:
                z.sleep(35)
            z.heartbeat()

            code = self.scode.GetVertifyCode(PhoneNumber, self.scode.WECHAT_REGISTER)#获取接码验证码
            # self.scode.defriendPhoneNumber(PhoneNumber,self.scode.WECHAT_REGISTER)
            if code == '':
                self.repo.DeleteInformation( saveCate, PhoneNumber )
                z.toast(PhoneNumber + '手机号,获取不到验证码')
                continue
            z.heartbeat()
            print('验证码:'+code)
            logger.info(numbers)
            logger.info('我是numbers------------------------------------------------')
            logger.info(numbers[0]['x02'])
            logger.info('我是numbers[0][x02]----------------------')
            x_02 = int( numbers[0]['x02'] ) + 1
            para = {"phoneNumber": PhoneNumber, 'x_02': x_02, 'x_19': 'WXRegister'}
            self.repo.PostInformation( saveCate, para )
            d(text='请输入验证码').click()
            d(text='请输入验证码').click()
            z.input(code)
            d(text='下一步', className='android.widget.Button').click()
            z.sleep(10)
            z.heartbeat( )

            while d(text='验证码不正确,请重新输入').exists:
                d(text='确定').click()
                d(className='android.widget.ScrollView').child(className='android.widget.LinearLayout',index=0).child(className='android.widget.LinearLayout',index=2).child(
                    className='android.widget.LinearLayout',index=0).child(className='android.widget.EditText', index=1).click.bottomright()
                code = self.scode.GetVertifyCode(PhoneNumber, self.scode.WECHAT_REGISTER)
                self.scode.defriendPhoneNumber(PhoneNumber,self.scode.WECHAT_REGISTER)
                if code == '':
                    self.repo.DeleteInformation( saveCate, PhoneNumber )
                    z.toast(PhoneNumber+'手机号,获取不到验证码')
                    break
                z.sleep(8)
                print(code)
                d(text='请输入验证码').click()
                z.input(code)
                d(text='下一步', className='android.widget.Button').click()
                z.sleep(3)
                if d(textContains='你操作频率过快').exists:
                    d(text='确定').click()
                    break


            if d( textContains='看看手机通讯录' ).exists:
                d( text='是' ).click()

                para = {"phoneNumber": PhoneNumber,'x_05': 'YES',  'x_19': 'WXRegister', 'x_20':d.server.adb.device_serial(), 'x_26': '登陆状态YSE'}
                self.repo.PostInformation( saveCate, para )

                z.sleep(15)
                z.heartbeat( )


                if d( textContains='如果这不是你本人操作,你的短信内容已经泄露。请检查手机是否被植入木马导致短信被转发。' ).exists:
                    d( text='确定' ).click( )
                continue


            if d(textContains='当前手机号一个月内已成功注册微信号').exists:
                d(text='确定')
                self.repo.DeleteInformation( saveCate, PhoneNumber )


            if d( textContains='操作频率' ).exists:
                d( text='确定' ).click( )
                break

            z.sleep(2)
            n = 0
            while True:
                z.sleep(5)

                if d(text='是我的,立刻登录').exists:
                    n = n + 1
                    d(text='是我的,立刻登录').click()
                    if n == 1:
                        z.sleep(10)
                        z.heartbeat( )
                    else:
                        z.sleep(15)
                        z.heartbeat( )


                if d( textContains='看看手机通讯录' ).exists:
                    d( text='是' ).click()
                    number_info = self.repo.GetInformation(saveCate,PhoneNumber)

                    logger.info(number_info)
                    logger.info('number_info--------------------------------------------')

                    if number_info[0]['x05'] is None:
                        para = {"phoneNumber": PhoneNumber, 'x_05': 'YES', 'x_19': 'WXRegister', 'x_26': '登陆状态YSE','x_20': d.server.adb.device_serial( )}
                    else:
                        para = {"phoneNumber": PhoneNumber,'x_05': 'YES',  'x_19': 'WXRegister', 'x_26': '登陆状态YSE','x_20':d.server.adb.device_serial()}
                    self.repo.PostInformation( saveCate, para )

                    z.sleep(10)
                    z.heartbeat( )


                    if d(textContains='如果这不是你本人操作,你的短信内容已经泄露。请检查手机是否被植入木马导致短信被转发。' ).exists:
                        d(text='确定' ).click( )
                    break


                if d(text='声纹验证').exists:
                    d(className='android.widget.ImageView', description='返回').click()
                    x_27 = int( numbers[0]['x27'] ) + 1
                    para = {"phoneNumber": PhoneNumber, 'x_01': "exist", 'x_03': nowTime,
                            'x_19': 'WXRegister', 'x_27': x_27}
                    self.repo.PostInformation( saveCate, para )
                    break



                if d(textContains='非法软件注册').exists:
                    d(text='取消').click()
                    self.repo.DeleteInformation(saveCate, PhoneNumber)
                    break


                if d(text='该帐号长期未登录,为保护帐号安全,系统将其自动置为保护状态。点击确定按钮可立即激活帐号解除保护状态。').exists:
                    d(text='取消').click()
                    self.repo.DeleteInformation( saveCate, PhoneNumber )
                    break


                if d(textContains='帐号有异常').exists:
                    d(text='取消').click()
                    self.repo.DeleteInformation( saveCate, PhoneNumber )
                    break


                if d(textContains='限制登录').exists:
                    d(text='取消').click()
                    self.repo.DeleteInformation( saveCate, PhoneNumber )
                    break


                if d(textContains='长期没有登陆,帐号已被收回').exists:
                    d(text='取消').click()
                    self.repo.DeleteInformation( saveCate, PhoneNumber )
                    break


                if d(textContains='相同手机号不可频繁重复注册微信帐号').exists:
                    d(text='确定').click()
                    self.repo.DeleteInformation( saveCate, PhoneNumber )
                    break


                if d(textContains='你操作频率过快').exists:
                    d(text='确定').click()
                    break


                if d(textContains='是否立即验证').exists:
                    d(text='确定').click()
                    z.sleep(10)
                    z.heartbeat( )


                if d(text='确认登录').exists:

                    self.repo.DeleteInformation( saveCate, PhoneNumber )

                    if n==1:
                        self.repo.DeleteInformation( saveCate, PhoneNumber )
                    else:
                        para = {"phoneNumber": PhoneNumber, 'x_01': "exist", 'x_03': nowTime, 'x_19': 'WXRegister'}
                        self.repo.PostInformation( saveCate, para )
                    break


                if d(text='设置密码').exists:
                    d(className='android.widget.LinearLayout', index=2).child(className='android.widget.EditText', index=1).click()
                    z.input(password)
                    z.sleep(2)
                    d(className='android.widget.LinearLayout', index=4).child(className='android.widget.EditText', index=1).click()
                    z.input(password)
                    d(text='完成').click()

                    z.sleep(15)
                    z.heartbeat( )


                    if d(textContains='看看手机通讯录').exists:
                        d( text='是' ).click( )
                        para = {"phoneNumber": PhoneNumber,'x_05': 'YES', 'x_19': 'WXRegister','x_20':d.server.adb.device_serial(),'x_21':password, 'x_26': '登陆状态YSE'}
                        self.repo.PostInformation( saveCate, para )
                        z.sleep(15)
                        z.heartbeat( )


                    if d( textContains='你的操作频繁过快,请稍后重试' ).exists:
                        d( text='确定' ).click( )
                        para = {"phoneNumber": PhoneNumber,'x_05': 'YES',  'x_19': 'WXRegister', 'x_20': d.server.adb.device_serial( ), 'x_21': password,
                                'x_26': '登陆状态YSE'}
                        self.repo.PostInformation( saveCate, para )
                        z.sleep( 15 )
                        z.heartbeat( )


                    if d( textContains='如果这不是你本人操作,你的短信内容已经泄露。请检查手机是否被植入木马导致短信被转发。' ).exists:
                        d( text='确定' ).click( )

                    break


                if d(text='验证身份').exists:
                    z.sleep(3)
                    x_value = ''

                    if d( description='通过扫码验证身份', className='android.view.View', index=1 ).exists:
                        self.repo.DeleteInformation( saveCate, PhoneNumber )
                        break

                    if d( descriptionContains='验证失败', className='android.view.View' ).exists:
                        d( descriptionContains='关闭页面', className='android.view.View',index=3).click( )
                        if x_value != '':
                            para = {"phoneNumber": PhoneNumber, 'x_01': "exist", "x_key": x_value, 'x_19': 'WXRegister'}
                        self.repo.PostInformation( saveCate, para )
                        break

                    if d( descriptionContains='验证通过', className='android.view.View' ).exists:
                        d( descriptionContains='关闭页面', className='android.view.View',index=3).click( )
                        if x_value == '':
                            x_value = 'YSE'
                        para = {"phoneNumber": PhoneNumber, 'x_01': "exist", 'x_05': x_value, 'x_19': 'WXRegister'}
                        self.repo.PostInformation( saveCate, para )
                        break


                    for i in range( 1, 6 ):

                        if i != 1:
                            yibushiObj_HTC = d( className='android.widget.RadioButton', descriptionContains='以上都不是',index=6 )
                            if not yibushiObj_HTC.exists:
                                break

                        if d( description='请选择你最近一次登录设备的名称' ).exists:
                            if d( className='android.widget.RadioButton', index=1 ).exists:
                                numberInfo = self.repo.GetInformation( information_cate_id, number )
                                if numberInfo[0]['x07'] is not None:
                                    x0_val = d( className='android.widget.RadioButton', index=1 ).info[
                                        'contentDescription'].replace('\n\n','')
                                    x1_val = d( className='android.widget.RadioButton', index=2 ).info[
                                        'contentDescription'].replace('\n\n','')
                                    x2_val = d( className='android.widget.RadioButton', index=3 ).info[
                                        'contentDescription'].replace('\n\n','')
                                    x3_val = d( className='android.widget.RadioButton', index=4 ).info[
                                        'contentDescription'].replace('\n\n','')
                                    x4_val = d( className='android.widget.RadioButton', index=5 ).info[
                                        'contentDescription'].replace('\n\n','')

                                    data = {'cate_id': saveCate, 'phoneNumber': PhoneNumber, 'x_07': x0_val,'x_08': x1_val, 'x_09': x2_val, 'x_10': x3_val, 'x_11': x4_val}
                                    logger.info(data)
                                    logger.info('data----------------------------------------------------')
                                    trues = repo.GetTrueAnswer(data)
                                    logger.info( trues )
                                    logger.info( 'trues----------------------------------------------------' )
                                    true = trues[0]['x07']
                                    logger.info( true )
                                    logger.info( 'true----------------------------------------------------' )

                                    trues = repo.GetTrueAnswer(data)
                                    true = trues[0]['x07']


                                    if true == x0_val:
                                        x_value = x0_val
                                        d( className='android.widget.RadioButton', index=1 ).click( )
                                        d( className='android.view.View',
                                           descriptionContains='下一步' ).click( )  # 下一步
                                        z.sleep( 2 )
                                    if true == x1_val:
                                        x_value = x1_val
                                        d( className='android.widget.RadioButton', index=2 ).click( )
                                        d( className='android.view.View',
                                           descriptionContains='下一步' ).click( )  # 下一步
                                        z.sleep( 2 )
                                    if true == x2_val:
                                        x_value = x2_val
                                        d( className='android.widget.RadioButton', index=3 ).click( )
                                        d( className='android.view.View',
                                           descriptionContains='下一步' ).click( )  # 下一步
                                        z.sleep( 2 )
                                    if true == x3_val:
                                        x_value = x3_val
                                        d( className='android.widget.RadioButton', index=4 ).click( )
                                        d( className='android.view.View',
                                           descriptionContains='下一步' ).click( )  # 下一步
                                        z.sleep( 2 )
                                    if true == x4_val:
                                        x_value = x4_val
                                        d( className='android.widget.RadioButton', index=5 ).click( )
                                        d( className='android.view.View',
                                           descriptionContains='下一步' ).click( )  # 下一步
                                        z.sleep( 2 )
                                    if true is None:
                                        d.click(410, 540)
                                        d.click(410, 640)
                                        z.sleep(2)

                                else:
                                    number = random.randint( 1, 5 )
                                    if number == 1:
                                        x_value = d( className='android.widget.RadioButton', index=1 ).info[
                                            'contentDescription'].replace('\n\n','')
                                        d( className='android.widget.RadioButton', index=1 ).click( )
                                        d( className='android.view.View',
                                           descriptionContains='下一步' ).click( )  # 下一步
                                        z.sleep( 2 )
                                    if number == 2:
                                        x_value = d( className='android.widget.RadioButton', index=2 ).info[
                                            'contentDescription'].replace('\n\n','')
                                        d( className='android.widget.RadioButton', index=2 ).click( )
                                        d( className='android.view.View',
                                           descriptionContains='下一步' ).click( )  # 下一步
                                        z.sleep( 2 )
                                    if number == 3:
                                        x_value = d( className='android.widget.RadioButton', index=3 ).info[
                                            'contentDescription'].replace('\n\n','')
                                        d( className='android.widget.RadioButton', index=3 ).click( )
                                        d( className='android.view.View',
                                           descriptionContains='下一步' ).click( )  # 下一步
                                        z.sleep( 2 )
                                    if number == 4:
                                        x_value = d( className='android.widget.RadioButton', index=4 ).info[
                                            'contentDescription'].replace('\n\n','')
                                        d( className='android.widget.RadioButton', index=4 ).click( )
                                        d( className='android.view.View',
                                           descriptionContains='下一步' ).click( )  # 下一步
                                        z.sleep( 2 )
                                    if number == 5:
                                        x_value = d( className='android.widget.RadioButton', index=5 ).info[
                                            'contentDescription'].replace('\n\n','')
                                        d( className='android.widget.RadioButton', index=5 ).click( )
                                        d( className='android.view.View',
                                           descriptionContains='下一步' ).click( )  # 下一步
                                        z.sleep( 2 )
                            else:
                                d.click( 410, 540 )
                                d.click( 410, 640 )
                                z.sleep( 2 )


                        elif d( description='请从下面头像中选出两位你的好友' ).exists:
                            d( className='android.widget.ImageView', description='返回' ).click( )
                            break
                        else:
                            d.click( 410, 540 )
                            d.click( 410, 640 )
                            z.sleep( 2 )

                    x_04_number = self.repo.GetInformation( information_cate_id, PhoneNumber )
                    logger.info(PhoneNumber)
                    logger.info(x_04_number)
                    logger.info('我是x_04_number--------------------------------------------------------')
                    x_04 = int( x_04_number[0]['x04'] ) + 1
                    para = {"phoneNumber": PhoneNumber, 'x_04': x_04, 'x_19': 'WXRegister'}
                    self.repo.PostInformation( saveCate, para )

                z.sleep(5)

                if d(text='确认登录').exists:
                    para = {"phoneNumber": PhoneNumber, 'x_01': "exist", 'x_03': nowTime, 'x_19': 'WXRegister'}
                    self.repo.PostInformation( saveCate, para )
                    break

                if d(descriptionContains='验证失败', className='android.view.View').exists:
                    d(descriptionContains='关闭页面', className='android.view.View',index=3).click()
                    if x_value == '':
                        para = {"phoneNumber": PhoneNumber, 'x_01': "exist", 'x_05': '空', 'x_19': 'WXRegister'}
                    else:
                        para = {"phoneNumber": PhoneNumber, 'x_01': "exist",
                                "x_key": x_value, 'x_19': 'WXRegister'}
                    self.repo.PostInformation( saveCate, para )
                    logger.info(para)

                if d(descriptionContains='验证通过', className='android.view.View').exists:
                    d(descriptionContains='关闭页面', className='android.view.View',index=3).click()
                    if x_value == '':
                        x_value = 'YSE'
                    para = {"phoneNumber": PhoneNumber, 'x_01': "exist", 'x_05':x_value , 'x_19': 'WXRegister'}
                    self.repo.PostInformation( saveCate, para )
                    logger.info(para)
            continue
Пример #29
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版TIM修改我的名片夹加好友模块" )
        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( "网络通畅。开始执行: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( )
        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( 8 )
        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

        z.heartbeat( )
        z.sleep( 8 )
        # while True:  # 由于网速慢或手机卡可能误点
        #     if d( index=1, className='android.widget.ImageView' ).exists:
        #         # d(index=0,className="android.widget.RelativeLayout").child( index=1,resourceId="com.tencent.tim:id/name", className='android.widget.ImageView' ).click()
        #         z.heartbeat( )
        #         d( index=2, className="android.widget.FrameLayout" ).child( index=0,
        #                                                                     className="android.widget.RelativeLayout" ).click( )
        #         # d( index=2, className="android.widget.FrameLayout" ).child( index=0,className="android.widget.RelativeLayout" ).child( index=1, className='android.widget.ImageView' ).click()
        #     if d( text="加好友" ).exists:  # 由于网速慢或手机卡可能误点
        #         d( text="加好友" ).click( )
        #         d( text="返回", className="android.widget.TextView" ).click( )
        #         d( index=2, className="android.widget.FrameLayout" ).child( index=0,
        #                                                                     className="android.widget.RelativeLayout" ).click( )
        #     z.sleep( 3 )
        #     if d( text='我的名片夹', resourceId='com.tencent.tim:id/name', className="android.widget.TextView" ).exists:
        #         z.heartbeat( )
        #         d( text='我的名片夹', resourceId='com.tencent.tim:id/name' ).click( )
        #         break
        # z.sleep( 1 )
        if d(index=1,className="android.widget.RelativeLayout").child(index=0,className="android.widget.ImageView").exists:
            d( index=1, className="android.widget.RelativeLayout" ).child( index=0,
                                                                           className="android.widget.ImageView" ).click()
        z.sleep(1)
        if d(description="名片夹").exists:
            d( description="名片夹" ).click()
            z.sleep(0.5)
        else:
            if d( index=1, className="android.widget.RelativeLayout" ).child( index=0,className="android.widget.ImageView" ).exists:
                d( index=1, className="android.widget.RelativeLayout" ).child( index=0,className="android.widget.ImageView" ).click( )
            z.sleep( 1 )
            if d( description="名片夹" ).exists:
                d( description="名片夹" ).click( )
            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:
            z.heartbeat( )
            d( text="设置我的名片" ).click()
            z.sleep( 1 )
            d(text="添加我的名片").click()
            z.sleep(3)
        else:
            if d(index=0,description="我的名片",className="android.widget.FrameLayout").exists:
                d( index=0, description="我的名片", className="android.widget.FrameLayout" ).click()
                z.sleep(1)
                z.heartbeat()
                if d(text="编辑",resourceId="com.tencent.tim:id/ivTitleBtnRightText").exists:
                    d( text="编辑", resourceId="com.tencent.tim:id/ivTitleBtnRightText" ).click()
                    z.sleep(0.5)
                    if d(text="重新扫描",className="android.widget.TextView").exists:
                        d( text="重新扫描", className="android.widget.TextView" ).click()
                        z.sleep(1)

        while d(index=3,className="android.widget.Button").exists:
            z.heartbeat()
            d( index=3, className="android.widget.Button" ).click()
        z.sleep( 5 )
        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:
            obj.click( )
            z.sleep( 6 )
            d( text='确定', resourceId='com.tencent.tim:id/name' ).click( )
            num = 0              #休眠次数
            while not d( text='完成' ).exists:
                if num==2:
                    break
                else:
                    z.sleep(2)
                    num = num +1
            z.heartbeat( )
            if d(index=0,className="android.widget.ImageButton").exists and not d(text="完成").exists:
                z.sleep(1)
                z.heartbeat()
                # d( index=0, className="android.widget.ImageButton" ).click()
                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:
            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:
        #     d( text="重选" ).click( )
        #     d( index=0, className="com.tencent.widget.GridView",
        #        resourceId="com.tencent.tim:id/photo_list_gv" ).child( index=0,
        #                                                               className="android.widget.RelativeLayout" ).click( )
        #     d( text='确定', resourceId='com.tencent.tim:id/name' ).click( )
        #     while d( text='正在识别' ).exists:
        #         time.sleep( 2 )
        z.sleep(2)
        while d(text="完成").exists:
            d(text="完成").click()
        z.sleep( 1 )
        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"]))
Пример #30
0
    def registerWithSlot(self,d,z,args):
        cateId = args['repo_cate_id']
        self.scode = smsCode(d.server.adb.device_serial())

        d.server.adb.cmd("shell", "pm clear com.tencent.tim").communicate()  # 清除缓存
        d.server.adb.cmd("shell","am start -n com.tencent.tim/com.tencent.mobileqq.activity.SplashActivity").communicate()  # 拉起来

        self.swipe(d)

        if d(className='android.widget.Button', text='新用户').exists:
            d(className='android.widget.Button', text='新用户').click()
        time.sleep(2)

        phoneNumber = self.scode.GetPhoneNumber(self.scode.QQ_REGISTER)
        print '手机号'
        print phoneNumber
        print '============'
        time.sleep(2)

        d(text='请输入你的手机号码', className='android.widget.EditText').set_text(phoneNumber)

        time.sleep(1)
        d(text='下一步', className='android.widget.Button').click()
        time.sleep(2)

        for j in range(0, 15):
            time.sleep(1)
            if d(text='请输入短信验证码', className='android.widget.EditText').exists:
                break
            if d(text='分享', className='android.widget.TextView').exists:
                d(text='填写手机号码', className='android.widget.TextView').click()
                d(text='下一步', className='android.widget.Button').click()
                continue

        if j == 14:
            d.server.adb.cmd("shell", "am broadcast -a com.zunyun.zime.toast --es msg \"TIM验证码跳转失败\"").communicate()
            return False

        time.sleep(1)
        while 1:
            if d(text='请输入短信验证码', className='android.widget.EditText').exists:
                break
            else:
                time.sleep(1)

        vertifyCode = self.scode.GetVertifyCode(phoneNumber, self.scode.QQ_REGISTER)  # 获取验证码

        if vertifyCode == "":
            if d(text='重新发送', className='android.widget.TextView').exists:
                d(text='重新发送', className='android.widget.TextView').click()
                time.sleep(2)
                print '重新发送'
                vertifyCode = self.scode.GetVertifyCode(phoneNumber, self.scode.QQ_REGISTER)

                if vertifyCode == '':
                    self.scode.ReleasePhone(phoneNumber, self.scode.QQ_REGISTER)
                    print '验证码获取失败'
                    return False

        print vertifyCode
        self.scode.defriendPhoneNumber(phoneNumber, self.scode.QQ_REGISTER)
        d(text='请输入短信验证码', className='android.widget.EditText').set_text(vertifyCode)

        time.sleep(1)
        for i in range(0,3):
            if d(text='下一步', className='android.widget.Button').exists:
                d(text='下一步', className='android.widget.Button').click()
            else:
                time.sleep(1)

        while 1:
            if d(text='绑定新QQ号码', className='android.widget.TextView').exists:
                d(text='绑定新QQ号码', className='android.widget.TextView').click()
                break
            elif d(text='设置昵称', className='android.widget.TextView').exists:
                break
            else:
                time.sleep(1)


        nickNameList = self.repo.GetMaterial(cateId, 0, 1)
        nickName = nickNameList[0]["content"]
        nickName = nickName.encode("utf-8")

        d(resourceId='com.tencent.tim:id/name', className='android.widget.EditText').click()
        z.input(nickName)
        d(text='完成', resourceId='com.tencent.tim:id/name').click()
        obj = d(resourceId='com.tencent.tim:id/name',className='android.widget.TextView',index=1).info
        info = obj['text']                             #要保存的qq号
        d(text='登录', resourceId='com.tencent.tim:id/name').click()
        time.sleep(2)

        return info