ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

oppo

2022-06-24 08:00:50  阅读:165  来源: 互联网

标签:ak pos sjh oppo print xx png


# -*- coding: utf-8 -*-
"""
手机屏幕截图的代码: screenshot.py
"""
import subprocess
import os
import sys,re
from PIL import Image
import os
import time,random
import cv2
import aircv as ac
import numpy as np

# SCREENSHOT_WAY 是截图方法,经过 check_screenshot 后,会自动递减,不需手动修改
SCREENSHOT_WAY = 1
def run_cmd( cmd_str='', echo_print=1):
    """
    执行cmd命令,不显示执行过程中弹出的黑框
    备注:subprocess.run()函数会将本来打印到cmd上的内容打印到python执行界面上,所以避免了出现cmd弹出框的问题
    :param cmd_str: 执行的cmd命令
    :return: 
    """
    from subprocess import run
    if echo_print == 1:
        print('\n执行cmd指令="{}"'.format(cmd_str))
    run(cmd_str, shell=True)

def run_cmd_Popen_fileno(cmd_string):
    """
    执行cmd命令,并得到执行后的返回值,python调试界面输出返回值
    :param cmd_string: cmd命令,如:'adb devices'
    :return:
    """
    import subprocess
    
    print('运行cmd指令:{}'.format(cmd_string))
    return subprocess.Popen(cmd_string, shell=True, stdout=None, stderr=None).wait()

def run_cmd_Popen_PIPE(cmd_string):
    """
    执行cmd命令,并得到执行后的返回值,python调试界面不输出返回值
    :param cmd_string: cmd命令,如:'adb devices"'
    :return:
    """
    import subprocess
    
    print('运行cmd指令:{}'.format(cmd_string))
    return subprocess.Popen(cmd_string, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='gbk').communicate()[0]

def pull_screenshot(xh,sjh,xx):
    """
    获取屏幕截图,目前有 0 1 2 3 四种方法,未来添加新的平台监测方法时,
    可根据效率及适用性由高到低排序
    """
    global SCREENSHOT_WAY
    SCREENSHOT_WAY=xh
    if 1 <= SCREENSHOT_WAY <= 3:
        process = subprocess.Popen(
            'adb -s {0} shell screencap -p'.format(sjh),
            shell=True, stdout=subprocess.PIPE)
        binary_screenshot = process.stdout.read()
        if SCREENSHOT_WAY == 2:
            binary_screenshot = binary_screenshot.replace(b'\r\n', b'\n')
        elif SCREENSHOT_WAY == 1:
            binary_screenshot = binary_screenshot.replace(b'\r\r\n', b'\n')
        au='tmall'+str(xx)+'.png'
        with open(au, 'wb') as fa:
                fa.write(binary_screenshot)
            
    elif SCREENSHOT_WAY == 0:
        os.system('adb -s {0} shell screencap -p /sdcard/tmall.png'.format(sjh))
        os.system('adb -s {0} pull /sdcard/tmall.png .'.format(sjh))


def check_screenshot(xh,sjh):
    """
    检查获取截图的方式
    """
    global SCREENSHOT_WAY
    if os.path.isfile('tmall.png'):
        try:
            os.remove('tmall.png')
        except Exception:
            pass
    if SCREENSHOT_WAY < 0:
        print('暂不支持当前设备')
        sys.exit()
    #xh=1
    pull_screenshot(xh,sjh)
    try:
        Image.open('./tmall.png').load()
        print('采用方式 {} 获取截图'.format(SCREENSHOT_WAY))
    except Exception:
        SCREENSHOT_WAY -= 1
        check_screenshot()
def huadong(sjh):
    i = 0
    #每次操作的间隔时间取决于手机配置,配置越高时间越短
    sleep_time =int(random.uniform(10,15))
    aav=sleep_time
    while 1:
        #用popen设置shell=True不会弹出cmd框
        sleep_time =int(random.uniform(10,33))
        sleep_time1 =int(random.uniform(10,30))
        aaa=250+sleep_time
        aab=700+sleep_time
        
        aav=300-sleep_time
        aaa1=250+sleep_time1
        aab1=700+sleep_time1
        
        aav1=300-sleep_time1
        aak='adb -s {0} shell input swipe {1} {2} {3} {4}'.format(sjh,aaa1,aab,aaa1,aaa)
        print(aak)
        process = subprocess.Popen(aak,shell=True)
        
        time.sleep(int(random.uniform(1,2)))
        #print(aak)
        #aak='adb -s {0} shell input swipe {1} {2} {3} {4}'.format(sjh,aaa1,aab1,aaa1,aav1)
        #aak='adb -s c748555a7d23 shell input swipe {0} {1} {2} {3}'.format(aaa1,aab1,aaa1,aav1)
        #process = subprocess.Popen(aak,shell=True)
        #print(aak)
        #print(aav)
        #time.sleep(sleep_time)
      
      
        i+=1
        #print(str(i) + 'clicks have been completed')
        break
def opqrxza(sjh,xh):
    aak8='adb -s {0} shell input keyevent 4'.format(sjh)#返回
    aa2="adb -s {0} shell am start -n com.kuaishou.nebula/com.yxcorp.gifshow.HomeActivity".format(sjh)
    if sjjtjc(1,sjh,"./opxz.png",xh):
        process = subprocess.Popen(aak8,shell=True)
        time.sleep(3)
        process = subprocess.Popen(aak8,shell=True)
        print("oppo确认下载》》》》》》》》》》》》》》")
    else:
        print("oppo没有确认下载》》》》》》》》》》》》》")
        #pass
def xmqrxzaa(sjh,xh):
    aak8='adb -s {0} shell input keyevent 4'.format(sjh)#返回
    aa2="adb -s {0} shell am start -n com.kuaishou.nebula/com.yxcorp.gifshow.HomeActivity".format(sjh)
    if sjjtjcwza(2,sjh,"./xmqrxz.png",0,xh):
        process = subprocess.Popen(aak8,shell=True)
        time.sleep(3)
        process = subprocess.Popen(aak8,shell=True)
        print("XIAOMI确认下载》》》》》》》》》》》》》》")
    else:
        print("XIAOMI没有确认下载》》》》》》》》》》》》》")
        pass
def vivoqrxza(sjh,xh):
    aak8='adb -s {0} shell input keyevent 4'.format(sjh)#返回
    aa2="adb -s {0} shell am start -n com.kuaishou.nebula/com.yxcorp.gifshow.HomeActivity".format(sjh)
    if sjjtjc(2,sjh,"./voqrxz.png",xh):
        process = subprocess.Popen(aak8,shell=True)
        time.sleep(3)
        process = subprocess.Popen(aak8,shell=True)
        print("vivo确认下载》》》》》》》》》》》》》》")
    else:
        print("vivo没有确认下载》》》》》》》》》》》》》")
        #pass
def jiance(sjh):
    #sjh=sjh.replace(":5555","")
    aakk="adb -s {0} shell dumpsys activity activities".format(sjh)
    aak="adb -s {0} shell am start -n com.kuaishou.nebula/com.yxcorp.gifshow.HomeActivity".format(sjh)
    zh=[]
    lx=[]
    ap=0
    p = subprocess.Popen(aakk, shell=True, stdout=subprocess.PIPE)
    out, err = p.communicate()
    time.sleep(4)
    #print(out.splitlines()[24:27])
    for line in out.splitlines():
        aa=line.decode("utf-8")
        #print(len(aa))
        try:
            ab=re.findall('cmp=com.(.*?)/',aa)
            #al=ab[0]+'.HomeActivity'
            if len(ab)>0:
                break
        except:
            continue
    try:
        aa=ab[0]
    except:
        ap=1
    if ap==0:
        if aa=="kuaishou.nebula":
            print("已经运行")
            pass
        else:
            process = subprocess.Popen(aak,shell=True)
            time.sleep(2)
            print("已经重新打开了")
    else:
        print("没有得到ab")
        
def wmhd(xh,sjh,aa,mubiao,xx):
    bzz0=0
    bzz1=0
    bzz2=0
    xxa=0
    yya=0
    xxb=0
    yyb=0
    #aa1=qutua.wmjc(2,sjh,"./xm1.png",14)
    aa2=""
    bbzz=0
    while 1:
        jiance(sjh)
        if aa=="oppo":
            opqrxza(sjh,xx)
        if aa=="xiaomi":
            xmqrxzaa(sjh,xx)
        if aa=="vivo":
            vivoqrxza(sjh,xx)
        if bzz1==1:
            aa1=wmjc(xh,sjh,mubiao,xx,xxb,yyb)
            bzz1=0
            print("0000aaaaaaaaaaaaaaaaaaa")
        else:
            aa1=wmjc(xh,sjh,mubiao,xx)
        if aa1[0]==0:
            huadong(sjh)
            bzz0=1
            xxa=aa1[1]
            yya=aa1[2]
        print("aa1",aa1)
        time.sleep(3)
        
        if bzz0==1:
            aa2=wmjc(xh,sjh,mubiao,xx,xxa,yya)
            bzz0=0
            print("00000bbbbbbbbbbbbbbbbbbbbbbbb")
        else:
            aa2=wmjc(xh,sjh,mubiao,xx)
        if aa2[0]==0:
            bzz1=1
            xxb=aa2[1]
            yyb=aa2[2]
            huadong(sjh)
            #continue
        if bbzz/10==int(bbzz/10):
            huadong(sjh)
        print("aa2",aa2)
        while abs(aa1[0]-aa2[0])<=4:
            huadong(sjh)
            #aa2=aa1
            time.sleep(3)
            break
        bbzz=bbzz+1
        
def wmhda(xh,sjh,aa,mubiao,xx):
    bzz0=0
    bzz1=0
    bzz2=0
    xxa=0
    yya=0
    xxb=0
    yyb=0
    #aa1=qutua.wmjc(2,sjh,"./xm1.png",14)
    aa2=""
    bbzz=0
    while 1:
        jiance(sjh)
        if aa=="oppo":
            opqrxza(sjh,xx)
        if aa=="xiaomi":
            xmqrxzaa(sjh,xx)
        if aa=="vivo":
            vivoqrxza(sjh,xx)
        if bzz1==1:
            aa1=wmjc(xh,sjh,mubiao,xx,xxb,yyb)
            bzz1=0
            print("0000aaaaaaaaaaaaaaaaaaa")
        else:
            aa1=wmjc(xh,sjh,mubiao,xx)
        if aa1[0]==0:
            huadong(sjh)
            bzz0=1
            xxa=aa1[1]
            yya=aa1[2]
        print("aa1",aa1)
        time.sleep(3)
        
        if bzz0==1:
            aa2=wmjc(xh,sjh,mubiao,xx,xxa,yya)
            bzz0=0
            print("00000bbbbbbbbbbbbbbbbbbbbbbbb")
        else:
            aa2=wmjc(xh,sjh,mubiao,xx)
        if aa2[0]==0:
            bzz1=1
            xxb=aa2[1]
            yyb=aa2[2]
            huadong(sjh)
            #continue
        if bbzz/10==int(bbzz/10):
            huadong(sjh)
        print("aa2",aa2)
        while abs(aa1[0]-aa2[0])<=4:
            huadong(sjh)
            #aa2=aa1
            time.sleep(3)
            break
        bbzz=bbzz+1
        print(bbzz)
        if bbzz>4:
            break
        
def find_button(target, template):
    """
    寻找target图片在template中的位置,返回应该点击的坐标。
    """
    theight,twidth = target.shape[:2]
    #print(theight,twidth)
    # 执行模板匹配,采用的匹配方式cv2.TM_SQDIFF_NORMED
    result = cv2.matchTemplate(target, template, cv2.TM_SQDIFF_NORMED)

    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
    # 如果匹配度小于99%,就认为没有找到。
    if min_val > 0.01:
        return None
    strmin_val = str(min_val)
    #print(strmin_val)
    # 绘制矩形边框,将匹配区域标注出来

    # cv2.rectangle(template, min_loc, (min_loc[0] + twidth, min_loc[1] + theight), (0, 0, 225), 2)
    # cv2.imshow("MatchResult----MatchingValue="+strmin_val, template)
    # cv2.imwrite('1.png', template, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])
    # cv2.waitKey()
    # cv2.destroyAllWindows()
    x = min_loc[0] + twidth//3
    y = min_loc[1] + theight//3
    return (x, y)

def fun1():
    os.system("adb nodaemon server") # 如果adb服务器不能正常启动,可以开另一个线程调用该函数。

def jiancha(yuantu,beitu): #检查yuantu中是否有beitu,
    #qutu.pull_screenshot(sjh) # 截图
    temp = cv2.imread(yuantu)
    pos = find_button(beitu,temp)
    if pos:
        return True
    else:
        return False

def sjjtjc(xh,sjh,beitu,xha): #手机截图检查是否有指定对象,有则返回True,否则返回False
    #xh=1
    pos=False
    try:
        pull_screenshot(xh,sjh,xha) # 截图
        au='./tmall'+str(xha)+'.png'
        temp = cv2.imread(au)
        target = cv2.imread(beitu)
        pos = find_button(target,temp)
    except:
        pass
    if pos:
        return True
    else:
        return False
def wmjc(xha,sjh,mubiao,xxa,xx=0,yy=0):
    pull_screenshot(xha,sjh,xxa) # 截图
    temp='./tmall'+str(xxa)+'.png'
    imsrc = ac.imread(temp) # 原始图像
    imsch = ac.imread(mubiao) # 带查找的部分
    aa=ac.find_template(imsrc, imsch)#
    #aa={'result': (90.0, 429.0), 'rectangle': ((73, 413), (73, 445), (107, 413), (107, 445)), 'confidence': 0.9999932646751404}
    #result为找到目标的中心坐标,
    #rectangle为找到目标的左上,左下,右上,右下坐标
    #confidence:相似度
    if (aa!=None):
        xx=aa['result'][0]
        yy=aa['result'][1]
        print(xx-70,yy-69,xx+80,yy+79)
        img=Image.open(temp)
        img1=img.crop((xx-70,yy-69,xx+80,yy+79))
        #im=np.array(Image.open(img).convert('RGB'))
        im=np.array(img1.convert('RGB'))
        sought = [255,80,0]#红色颜色的特征
        result = np.count_nonzero(np.all(im==sought,axis=2))#统计图形中红色的比例
        print(result)
        #plt.imshow(img1)
        #plt.show()#前后二行结合显示指定图片
        return result,xx,yy
    else:
        print(xx-70,yy-69,xx+80,yy+79)
        img=Image.open(temp)
        img1=img.crop((xx-70,yy-69,xx+80,yy+79))
        #im=np.array(Image.open(img).convert('RGB'))
        im=np.array(img1.convert('RGB'))
        sought = [255,80,0]#红色颜色的特征
        result = np.count_nonzero(np.all(im==sought,axis=2))#统计图形中红色的比例
        print(result)
        #plt.imshow(img1)
        #plt.show()#前后二行结合显示指定图片
        return result,xx,yy

def sjjtjcwza(xh,sjh,beitu,jl,xx): #手机利用已经存在的图查找目标并点击
    
    pull_screenshot(xh,sjh,xx) # 截图
    au='./tmall'+str(xx)+'.png'
    temp = cv2.imread(au)
    
    target = cv2.imread(beitu)
    pos = find_button(target,temp)
    if pos:
        print(pos[0],pos[1])
        ak="adb -s adudd shell input tap {:d} {:d}".format(pos[0]+jl,pos[1])
        ak=ak.replace("adudd",sjh)
        print(ak)
        #time.sleep(2)
        process = subprocess.Popen(ak,shell=True)   
        time.sleep(2)
        print("点了呀")
        return True
    else:
        return False
def sjjtjcwz(sjh,beitu,jl,xx): #手机利用已经存在的图查找目标并点击
    
    pull_screenshot(2,sjh,xx) # 截图
    au='./tmall'+str(xx)+'.png'
    temp = cv2.imread(au)
    
    target = cv2.imread(beitu)
    pos = find_button(target,temp)
    if pos:
        print(pos[0],pos[1])
        ak="adb -s adudd shell input tap {:d} {:d}".format(pos[0]+jl,pos[1])
        ak=ak.replace("adudd",sjh)
        print(ak)
        #time.sleep(2)
        process = subprocess.Popen(ak,shell=True)   
        time.sleep(2)
        print("点了呀")
        return True
    else:
        return False

def sjjtjcwzxm(sjh,beitua,jl,xx): #手机利用已经存在的图查找目标并点击
    
    pull_screenshot(1,sjh,xx) # 截图
    au='./tmall'+str(xx)+'.png'
    temp = cv2.imread(au)
    bz=0
    for beitu in beitua:
        target = cv2.imread(beitu)
        pos = find_button(target,temp)
        if pos:
            print(pos[0],pos[1])
            ak="adb -s adudd shell input tap {:d} {:d}".format(pos[0]+jl,pos[1])
            ak=ak.replace("adudd",sjh)
            #print(ak)
            #time.sleep(2)
            process = subprocess.Popen(ak,shell=True)   
            time.sleep(2)
            print("点了呀")
            bz=1
        else:
            pass
    if bz==1:
        return True
    else:
        return False
def sjjtjcwzopa(sjh,beitu,jl,xx): #手机利用已经存在的图查找目标并点击
    
    pull_screenshot(1,sjh,xx) # 截图
    au='./tmall'+str(xx)+'.png'
    temp = cv2.imread(au)
    bz=0
    target = cv2.imread(beitu)
    pos = find_button(target,temp)
    if pos:
        print(pos[0],pos[1])
        ak="adb -s adudd shell input tap {:d} {:d}".format(pos[0]+jl,pos[1])
        ak=ak.replace("adudd",sjh)
        #print(ak)
        #time.sleep(2)
        #process = subprocess.Popen(ak,shell=True)
        run_cmd(ak)
        time.sleep(2)
        print("点了呀")
        return True
    else:
        return False

    
    

def sjjtjcwzop(sjh,beitua,jl,xx): #手机利用已经存在的图查找目标并点击
    
    pull_screenshot(1,sjh,xx) # 截图
    au='./tmall'+str(xx)+'.png'
    temp = cv2.imread(au)
    bz=0
    for beitu in beitua:
        target = cv2.imread(beitu)
        pos = find_button(target,temp)
        if pos:
            print(pos[0],pos[1])
            ak="adb -s adudd shell input tap {:d} {:d}".format(pos[0]+jl,pos[1])
            ak=ak.replace("adudd",sjh)
            #print(ak)
            #time.sleep(2)
            process = subprocess.Popen(ak,shell=True)   
            time.sleep(2)
            print("点了呀")
            time.sleep(2)
            if sjjtjcwzopa(sjh,"./opspzg.png",0,35):
                time.sleep(30)
            #sjjtjcwzopa(sjh,"./opspzg.png",0,35)
            bz=1
        else:
            pass
    if bz==1:
        return True
    else:
        return False
    
    
def sjjtjcwzdj(xha,sjh,beitu,jl,xx): #手机截图检查是否有指定对象,有则点击其坐标位置,否则返回False;xha取图方式,sjh手机序列号,beitu查找的对象,jl查找到的位置与实际位置间的水平距离
    #xh=2
    pull_screenshot(xha,sjh,xx) # 截图
    time.sleep(1)
    au='./tmall'+str(xx)+'.png'
    temp = cv2.imread(au)
    pos=None
    try:
        target = cv2.imread(beitu)
        #print(target)
    except:
        pass
    try:
        pos = find_button(target,temp)
    except:
        pass
    if pos:
        print(pos[0],pos[1])
        ak="adb -s adudd shell input tap {:d} {:d}".format(pos[0]+jl,pos[1])
        ak=ak.replace("adudd",sjh)
        print(ak)
        #time.sleep(2)
        process = subprocess.Popen(ak,shell=True)   
        time.sleep(2)
        print("点了呀")
        return True
    else:
        return False
def xmjiancezong(sjh):
    #继续观看 确认下载 
    xmlb=["./xmcs.png","./xmjxck.png","./xmqrxz.png","./xmjx.png","./xmjxgksp.png"]
    aak8='adb -s {0} shell input keyevent 4'.format(sjh)#返回
    pull_screenshot(2,sjh,119)
    au='./tmall119.png'
    temp = cv2.imread(au)
    for i in xmlb:
        target = cv2.imread(i)
        pos = find_button(target,temp)
        if pos:
            ak="adb -s adudd shell input tap {:d} {:d}".format(pos[0],pos[1])
            ak=ak.replace("adudd",sjh)
            print(ak)
            #time.sleep(2)
            process = subprocess.Popen(ak,shell=True)   
            time.sleep(2)
            print("点了呀")
            time.sleep(2)
            process = subprocess.Popen(aak8,shell=True)
            time.sleep(2)
            process = subprocess.Popen(aak8,shell=True)
            break
def dj():
    for ii in range(1,10):
        if sjjtjcwzopa(sjh,"./opgztc.png",0,31):
            break
        time.sleep(1)
sjh="2249f564"
ak='adb -s {0} shell input keyevent 4'.format(sjh)#返回
aka='adb -s {0} shell input swipe 400 500 400 200'.format(sjh)#滑动
akb="adb -s {0} shell input tap 500 70".format(sjh)#退出直播
akc="adb -s {0} shell input tap 270 560".format(sjh)#关注退出直播
akd="adb -s {0} shell input tap 270 640".format(sjh)#不关注退出直播
ake="adb -s {0} shell input tap 250 690".format(sjh)#开宝箱
akf="adb -s {0} shell input tap 90 310".format(sjh)#开宝箱
#pull_screenshot(1,sjh,31)
#huadong(sjh)
#dj()
#sys.exit(0)
while 1:
    sleep_time1 =int(random.uniform(3,8))
    beitua=["./oppoksljqd.png","./opfl.png","./oplfl.png","./opkbx.png","./opzq.png","./opgztc.png","./oppoyq.png","./oppozq.png","./oppoksp.png"]
    #beitua=["./oplfl.png"]
    ci=0
    for beitu in beitua:
        ci=ci+1
        if sjjtjcwzopa(sjh,beitu,0,39) and beitu=="./opfl.png":
            time.sleep(30+sleep_time1)
            process = subprocess.Popen(ak,shell=True)
            dj()
        elif sjjtjcwzopa(sjh,beitu,0,39) and beitu==".oplfl.png":
            time.sleep(70)
            process = subprocess.Popen(ak,shell=True)  
            time.sleep(sleep_time1)
            if sjjtjcwzopa(sjh,"./opgztc.png",0,31):
                pass
            else:
                process = subprocess.Popen(ak,shell=True)
        elif sjjtjcwzopa(sjh,beitu,0,39) and beitu=="./opkbx.png":
            time.sleep(4)
            process = subprocess.Popen(ake,shell=True)
            time.sleep(65)
            process = subprocess.Popen(ak,shell=True)  
            time.sleep(4)
        elif sjjtjcwzopa(sjh,beitu,0,39) and  beitu=="./opgztc.png":
            time.sleep(5)
        elif sjjtjcwzopa(sjh,beitu,0,39) and  beitu=="./oppoyq.png":
            time.sleep(1)
            process = subprocess.Popen(ak,shell=True)
        elif sjjtjcwzopa(sjh,beitu,0,39) and  beitu=="./oppozq.png":
            time.sleep(1)
        time.sleep(4)
        huadong(sjh)
##    time.sleep(sleep_time1)
#sjh="192.168.0.103:5555"
#sjh="pvq4nrx4kzemw4ca"
#sjh="2249f564"adb
#sjjtjcwzxm(sjh,"./oplfl.png",0,31)
#sjjtjcwzopa(sjh,"./oplfl.png",0,31)
#pull_screenshot(1,sjh,31) # 截图
#sjjtjcwzopa(sjh,"./opgztc.png",0,31)
#sjjtjcwzdj(2,sjh,"./gk.png",0,35)
#sjjtjcwz(sjh,"./gk.png",0,35)
#qutuzijia.jiancejx(sjh)
#sjjtjc(2,sjh,"./xmqrxz.png",14)

 

标签:ak,pos,sjh,oppo,print,xx,png
来源: https://www.cnblogs.com/xkdn/p/16407432.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有