def run(self): while True: cache.set("ztask_virtual_active_time", datetime.datetime.now()) try: devicelist = self.finddevices() for device in devicelist: deviceid = device["serial"] taskid = device["task_id"] if taskid: task = dbapi.GetTask(taskid) if task and task.get("status") and task["status"] == "running": if deviceid not in self.processDict: # 进程从未启动 self.startProcess(deviceid) else: p = self.processDict[deviceid] if not p.is_alive(): # 进程已退出,从新启动进程 self.startProcess(deviceid) else: # 检查进程心跳是否超过3分钟 key = 'timeout_%s' % deviceid activeTime = cache.get(key) if activeTime: checkTime = (datetime.datetime.now() - datetime.datetime(2017, 1, 1)).seconds if (checkTime - int(activeTime)) > 180: # 进程心跳时间超过3分种,重启进程 self.processDict[deviceid].terminate() self.startProcess(deviceid) else: if self.processDict.has_key(deviceid) and self.processDict.get(deviceid).is_alive(): self.processDict[deviceid].terminate() del self.processDict[deviceid] elif deviceid in self.processDict: self.processDict[device].terminate() del self.processDict[deviceid] except Exception: logger.error(traceback.format_exc()) time.sleep(10)
def action(self,d,z,args): z.toast("开始执行:检测手机IP模块") while True: # 开关飞行模式 d.server.adb.cmd( "shell", "settings put global airplane_mode_on 1" ).communicate( ) d.server.adb.cmd( "shell", "am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true" ).communicate( ) z.sleep( 6 ) d.server.adb.cmd( "shell", "settings put global airplane_mode_on 0" ).communicate( ) d.server.adb.cmd( "shell", "am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false" ).communicate( ) while True: ping = d.server.adb.cmd("shell", "ping -c 3 baidu.com").communicate() print(ping) if 'icmp_seq'and 'bytes from'and'time' in ping[0]: break z.sleep(2) # 获取手机IP IPList = d.server.adb.cmd( "shell", "curl http://ipecho.net/plain" ).communicate( ) IP = IPList[0] print( IP ) # IP添加到缓存 ip = cache.get( IP ) print(ip) if ip is None: timeoutStr = args['time_out'] timeout = int( timeoutStr ) * 60 cache.set( IP, IP, timeout ) break else: continue
def IPCheckRepitition(self, z, d, args): z.toast("正在检测IP...") while True: # 开关飞行模式 d.server.adb.cmd( "shell", "settings put global airplane_mode_on 1").communicate() d.server.adb.cmd( "shell", "am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true" ).communicate() z.sleep(3) d.server.adb.cmd( "shell", "settings put global airplane_mode_on 0").communicate() d.server.adb.cmd( "shell", "am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false" ).communicate() t = 0 while t < 6: ping = d.server.adb.cmd("shell", "ping -c 3 baidu.com").communicate() print(ping) if 'icmp_seq' and 'bytes from' and 'time' in ping[0]: break z.sleep(10) z.heartbeat() z.sleep(10) t = t + 1 if t >= 6: z.toast("网络无法ping通,重新开关飞行模式") continue # 获取手机IP IPList = d.server.adb.cmd( "shell", "curl http://ipecho.net/plain").communicate() IP = IPList[0] print(IP) # IP添加到缓存 ip = cache.get(IP) print(ip) if ip is None: timeoutStr = args['time_out'] timeout = int(timeoutStr) * 60 cache.set(IP, IP, timeout) z.toast("IP检测完成") break else: continue
def handler(self, signum, frame): key = 'timeout_%s' % self.serial activeTime = cache.get(key) if (activeTime is None): self.z.heartbeat() return checkTime = (datetime.datetime.now() - datetime.datetime(2017, 1 ,1)).seconds #print checkTime - int(activeTime) if (checkTime - int(activeTime)) > 120 : raise AssertionError signal.signal(signal.SIGALRM, self.handler) signal.alarm(60)
def __init__(self, serial): self.platform = dbapi.GetSetting("sms_platform") # self.platform = "xunma" if self.platform == 'xunma': self.platform = "xunma"; elif self.platform == 'hellotrue': #爱乐赞 self.platform = "hellotrue"; else: self.platform = "jyzszp"; #玉米 self.username = dbapi.GetSetting("%s_user"%self.platform); self.password = dbapi.GetSetting("%s_password" % self.platform); if self.username is None or self.password is None: if not cache.get("EMPTY_SMS_CODE_USER_PASS"): cache.set("EMPTY_SMS_CODE_USER_PASS", True) dbapi.log_error("", "没有设置接码帐号密码","没有设置接码帐号密码") return self.WECHAT_REGISTER = "wechat_register"; self.QQ_CONTACT_BIND = "qq_contact_bind"; self.QQ_REGISTER = "qq_register"; self.QQ_TOKEN_BIND = "qq_token_bind"; self.ALIPAY_REGISTER = "alipay_register"; self.WECHAT_MAIL_BIND = "wechat_mail_bind"; self.im_type_list={} self.im_type_list[self.WECHAT_REGISTER] = dbapi.GetSetting("%s_%s" % (self.platform,self.WECHAT_REGISTER)); self.im_type_list[self.QQ_CONTACT_BIND] = dbapi.GetSetting("%s_%s" % (self.platform,self.QQ_CONTACT_BIND)); self.im_type_list[self.QQ_REGISTER] = dbapi.GetSetting("%s_%s" % (self.platform,self.QQ_REGISTER)); self.im_type_list[self.QQ_TOKEN_BIND] = dbapi.GetSetting("%s_%s" % (self.platform,self.QQ_TOKEN_BIND)); self.im_type_list[self.ALIPAY_REGISTER] = dbapi.GetSetting("%s_%s" % (self.platform,self.ALIPAY_REGISTER)); self.im_type_list[self.WECHAT_MAIL_BIND] = dbapi.GetSetting( "%s_%s" % (self.platform, self.WECHAT_MAIL_BIND) ); if self.platform == 'xunma': self.client = client_xunma(serial, self.username, self.password,self.im_type_list) elif self.platform == 'hellotrue': #爱乐赞 self.client = client_hellotrue(serial , self.username, self.password,self.im_type_list) else: self.client = client_jyzszp(serial, self.username, self.password,self.im_type_list) #玉米
def __init__(self): self.platform = dbapi.GetSetting("image_platform") if self.platform == 'lianzong': self.platform = "lianzong" else: self.platform = "ruokuai" self.username = dbapi.GetSetting("%s_user" % self.platform) self.password = dbapi.GetSetting("%s_password" % self.platform) if self.username is None or self.password is None: if not cache.get("EMPTY_IMAGE_CODE_USER_PASS"): cache.set("EMPTY_IMAGE_CODE_USER_PASS", True) dbapi.log_error("", "没有设置打码帐号密码", "没有设置打码帐号密码") return if self.platform == 'lianzong': self.client = client_lianzong(self.username, self.password) else: self.client = client_ruokuai(self.username, self.password) self.CODE_TYPE_4_NUMBER_CHAR = "4_number_char"
def getModuleRunInterval_new(self, mid): key = '%s_%s' % (self.server.adb.device_serial(), mid) lasttime = cache.get(key) return lasttime
def getModuleRunInterval(self, mid): key = '%s_%s' % (self.server.adb.device_serial(), mid) lasttime = cache.get(key) if lasttime is None: return None return (int(time.time()) - int(lasttime)) / 60
def getCode(self, im, im_type, timeout=60): import base64 #f = open(r'c:\jb51.gif', 'rb') # 二进制方式打开图文件 if isinstance(im, str): ls_f = base64.b64encode(im) else: ls_f = base64.b64encode(im.read()) # 读取文件内容,转换为base64编码 im.close() #f.close() params = { "ts": int(time.time()), "softwareId": self.soft_id, "software": self.soft_name, "sdk": "PYTHON/1.0", "username": self.username, "userPassword": self.password, "captchaData": ls_f, "captchaType": 1, "captchaMinLength": 4, "captchaMaxLength": 8 } params = json.dumps(params) sign = params + "|" + self.soft_secret import hashlib m2 = hashlib.md5() m2.update(sign) sign = m2.hexdigest() headers = {'L-Request-Signature': sign} headers.update(self.headers) requests.adapters.DEFAULT_RETRIES = 5 request = urllib2.Request(url='https://api.jsdama.com/upload', headers=headers, data=params) response = urllib2.urlopen(request) r = response.read() #r = requests.post('https://api.jsdama.com/upload', data=params, headers=self.headers) result = json.loads(r) if result["errorCode"] == 0: params = { "ts": int(time.time()), "softwareId": self.soft_id, "software": self.soft_name, "sdk": "PYTHON/1.0", "username": self.username, "userPassword": self.password, "captchaId": result["data"]["captchaId"] } params = json.dumps(params) sign = params + "|" + self.soft_secret import hashlib m2 = hashlib.md5() m2.update(sign) sign = m2.hexdigest() headers = {'L-Request-Signature': sign} headers.update(self.headers) requests.adapters.DEFAULT_RETRIES = 5 request = urllib2.Request(url='https://api.jsdama.com/recognition', headers=headers, data=params) response = urllib2.urlopen(request) r = response.read() result = json.loads(r) if result["errorCode"] == 0: return { "Result": result["data"]["recognition"], "Id": result["data"]["captchaId"] } else: if not cache.get("LIANZONG_CODE_ERROR"): cache.set("LIANZONG_CODE_ERROR", True) dbapi.log_error("", "联众打码异常", result["errorMessage"]) return