人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

python編寫adb截圖工具的實(shí)現(xiàn)源碼

發(fā)布日期:2022-02-07 16:45 | 文章來源:源碼中國

一、 功能

Android端或者Android終端的遠(yuǎn)程截圖至本地電腦中

二、使用說明

1.adb截圖工具可用于Android手機(jī)及Android終端
2.使用數(shù)據(jù)線連接前提:電腦與Android終端/手機(jī)已連接
Android終端/手機(jī)已打開開發(fā)者模式
3.生成的圖片格式為png

三、實(shí)現(xiàn)

1.初始源碼

import time
import os,sys
#截圖
def screencap_cmd(filePath,devices=None):
 if filePath==None:
  filePath='D:/png/'
 if not os.path.exists(filePath):
  os.makedirs(filePath)
 filename=time.strftime("%Y%m%d%H%M%S",time.localtime())+".png"
 if devices==None:
  cmd_screencap='adb shell screencap -p sdcard/'+filename
  cmd_pull='adb pull sdcard/'+filename+' '+filePath+filename
  cmd_delete='adb shell rm sdcard/'+filename
 else:
  cmd_screencap='adb -s '+devices+' shell screencap -p sdcard/'+filename
  cmd_pull='adb -s '+devices+' pull sdcard/'+filename+' '+filePath+filename
  cmd_delete='adb -s '+devices+' shell rm sdcard/'+filename
 os.system(cmd_screencap)
 os.system(cmd_pull)
 os.system(cmd_delete)
#保存地址判斷及設(shè)備信息分類調(diào)用
def screencap_info(devices=None,filePath=None):
 if filePath==None:
  filePath='D:/png/'
 if not os.path.exists(filePath):
  os.makedirs(filePath)
 if devices==None:
  screencap_cmd(filePath)
  adb_device_none(filePath)
 else:
  screencap_cmd(filePath,devices)
  adb_info(devices,filePath)
#更換設(shè)備
def change_devices():
 r=os.popen("adb devices")
 lines=r.readlines()
 lines=lines[1:-1]
 n=len(lines)
 for i in lines:
  print(i.split("\t")[0])
 devices=input("請輸入指定設(shè)備:\n")
 for i in lines:
  if devices in i:
return devices
 print("未找到改設(shè)備請重新輸入!")
 change_devices()
#截圖命令判斷,電腦連接多個設(shè)備或使用IP截圖時
def adb_info(lines,filePath=None): 
 s=input("是否截圖(T/F/N)?\n")
 if s=='t' or s=='T':
  if filePath==None:
screencap_info(lines)
  else:
screencap_info(lines,filePath)
 elif s=='N' or s=='n' or s=='exit':
  sys.exit()
 elif s=='F' or s=='f':
  devices=change_devices()
  if filePath==None:
adb_info(devices)
  else:
adb_info(devices,filePath) 
 #截圖命令判斷,電腦連接僅連接一個設(shè)備時  
def adb_device_none(filePath=None):
 s=input("是否截圖(T/F/N)?\n")
 if s=='t' or s=='T':
  if filePath==None:
screencap_info()
  else:
screencap_info(None,filePath)
 elif s=='N' or s=='n' or s=='exit':
  sys.exit()
 elif s=='F' or s=='f':
  devices=change_devices()
  if filePath==None:
adb_info(devices)
  else:
adb_info(devices,filePath)
#使用設(shè)備判斷
def adb_devices(n,lines,filePath=None):
 if n==0:
  print("請檢查是否已接連或啟動調(diào)試模式或安裝adb環(huán)境")
  s=input("再次啟動(T/F)?\n")
  if s=='t' or s=='T':
r=os.popen("adb devices")
lines=r.readlines()
lines=lines[1:-1]
n=len(lines)
adb_devices(n,r.readlines())
  else:
sys.exit()
 elif ":5555" in lines:
  print("T:截圖  F:更換設(shè)備 exit|N:退出 ")
  if filePath==None:
adb_info(lines)
  else:
adb_info(lines,filePath)
 elif n==1:
  print("T:截圖  F:更換設(shè)備  exit|N:退出")
  if filePath==None:
adb_device_none()
  else:
adb_device_none(filePath) 
 elif n>1:
  for i in lines:
print(i.split("\t")[0])
  devices=input("請輸入指定設(shè)備:\n")
  for i in lines:
if devices in i:
 print("T:截圖  F:更換設(shè)備  exit|N:退出")
 if filePath==None:
  adb_info(devices)
 else:
  adb_info(devices,filePath)  
  print("未找到改設(shè)備請重新輸入!")
  if filePath==None:
adb_devices(n,lines)
  else:  
adb_devices(n,lines,filePath)
#輸入IP
def ip_info():
 ipPath=input("請輸入IP:(不輸入enter跳過默認(rèn)使用數(shù)據(jù)線連接)\n")
 if len(ipPath)>0:
  try:
cnd='adb connect '+ipPath
os.system(cnd)
return ipPath
  except:
print("ADB調(diào)試模式為USB,需要切換到無線調(diào)試模式\n")
print("切換方法:\n第一步:Android設(shè)備開啟USB調(diào)試,并且通過USB線連接到電腦\n第二步:在終端執(zhí)行以下命令”adb tcpip 5555“\n第三步:在終端執(zhí)行以下命令”adb connect ip“。此時拔出USB線,應(yīng)該就可以adb通過wifi調(diào)試設(shè)備\n")
return ip_info()
if  __name__ == '__main__':
 ipPath=ip_info()
 filePath=input("請輸入保存地址:(不輸入enter跳過,默認(rèn)保存至D:\png\)\n")
 #查詢當(dāng)前連接的設(shè)備
 r=os.popen("adb devices")
 lines=r.readlines()
 lines=lines[1:-1]
 n=len(lines)
 ip_add=0
 if ipPath!=None:
  for i in lines:
if ipPath in i:
 ip_add=i.split("\t")[0]
 if len(filePath)>0:
  if ":\\" in filePath:
if ip_add!=0:
 adb_devices(n,ip_add,filePath)
else:
 adb_devices(n,lines,filePath)
  else:
print("地址輸入非法,使用默認(rèn)地址\n")
if ip_add!=0:
 adb_devices(n,ip_add)
else:
 adb_devices(n,lines)
 else:
  if ip_add!=0:
adb_devices(n,ip_add) 
  else:
adb_devices(n,lines) 

2.優(yōu)化:增加ip連接斷開重連處理

在輸入ip函數(shù)ip_info()增加ip連接判斷,將os.system替換成os.popen函數(shù)執(zhí)行cmd命令:

r=os.popen(cnd)
#讀取執(zhí)行結(jié)果
lines=r.readlines()[0]
if 'unable' in lines:
 print("連接失敗\n")
 return ip_info()
else:
 return ipPath
  1. os.system函數(shù)無法獲取執(zhí)行結(jié)果,只能獲取執(zhí)行成功或失敗的結(jié)果,成功返回0,失敗返回1,且會執(zhí)行的結(jié)果打印在終端上,相當(dāng)于調(diào)起dos執(zhí)行命令
  2. os.popen函數(shù)可獲取執(zhí)行的結(jié)果內(nèi)容,但獲取的結(jié)果要進(jìn)行readlines讀取,執(zhí)行的結(jié)果不會打印在終端上

在輸入ip函數(shù)ip_info()增加ip連接判斷,將os.system替換成os.popen函數(shù)執(zhí)行cmd命令:

a=os.system(cmd_screencap)
if a==0:
os.system(cmd_pull)
os.system(cmd_delete)
else:
if ":5555" in devices:
print("連接斷開,請重新連接\n")
ipPath=ip_info()
if ipPath==None:
 ipPath=ip_info()
else:
 device=ipPath+":5555"
 adb_info(device,filePath)
  else:
print("設(shè)備連接斷開,請更換設(shè)備\n")
device=change_devices()
adb_info(device,filePath)

3.最終源碼

import time
import os,sys
#輸入IP
def ip_info():
 ipPath=input("請輸入IP:(不輸入enter跳過默認(rèn)使用數(shù)據(jù)線連接)\n")
 if len(ipPath)>0:
  try:
cnd='adb connect '+ipPath
r=os.popen(cnd)
lines=r.readlines()[0]
if 'unable' in lines:
 print("連接失敗\n")
 return ip_info()
else:
 return ipPath
  except:
print("ADB調(diào)試模式為USB,需要切換到無線調(diào)試模式\n")
print("切換方法:\n第一步:Android設(shè)備開啟USB調(diào)試,并且通過USB線連接到電腦\n第二步:在終端執(zhí)行以下命令”adb tcpip 5555“\n第三步:在終端執(zhí)行以下命令”adb connect ip“。此時拔出USB線,應(yīng)該就可以adb通過wifi調(diào)試設(shè)備\n")
return ip_info()
#保存地址判斷及設(shè)備信息分類調(diào)用
def screencap_info(devices=None,filePath=None):
 if filePath==None:
  filePath='D:/png/'
 if not os.path.exists(filePath):
  os.makedirs(filePath)
 if devices==None:
  screencap_cmd(filePath)
  adb_device_none(filePath)
 else:
  screencap_cmd(filePath,devices)
  adb_info(devices,filePath)
#更換設(shè)備
def change_devices():
 r=os.popen("adb devices")
 lines=r.readlines()
 lines=lines[1:-1]
 n=len(lines)
 for i in lines:
  print(i.split("\t")[0])
 devices=input("請輸入指定設(shè)備:\n")
 for i in lines:
  if devices in i:
return devices
 print("未找到改設(shè)備請重新輸入!\n")
 change_devices()
#截圖命令判斷,電腦連接多個設(shè)備或使用IP截圖時
def adb_info(lines,filePath=None): 
 s=input("是否截圖(T/F/N)?\n")
 if s=='t' or s=='T':
  if filePath==None:
screencap_info(lines)
  else:
screencap_info(lines,filePath)
 elif s=='N' or s=='n' or s=='exit':
  sys.exit()
 elif s=='F' or s=='f':
  devices=change_devices()
  if filePath==None:
adb_info(devices)
  else:
adb_info(devices,filePath) 
#截圖命令判斷,電腦連接僅連接一個設(shè)備時  
def adb_device_none(filePath=None):
 s=input("是否截圖(T/F/N)?\n")
 if s=='t' or s=='T':
  if filePath==None:
screencap_info()
  else:
screencap_info(None,filePath)
 elif s=='N' or s=='n' or s=='exit':
  sys.exit()
 elif s=='F' or s=='f':
  devices=change_devices()
  if filePath==None:
adb_info(devices)
  else:
adb_info(devices,filePath)
#使用設(shè)備判斷
def adb_devices(n,lines,filePath=None):
 if n==0:
  print("請檢查是否已接連或啟動調(diào)試模式或安裝adb環(huán)境\n")
  s=input("再次啟動(T/F)?\n")
  if s=='t' or s=='T':
r=os.popen("adb devices")
lines=r.readlines()
lines=lines[1:-1]
n=len(lines)
adb_devices(n,r.readlines())
  else:
sys.exit()
 elif ":5555" in lines:
  print("T:截圖  F:更換設(shè)備 exit|N:退出\n")
  if filePath==None:
adb_info(lines)
  else:
adb_info(lines,filePath)
 elif n==1:
  print("T:截圖  F:更換設(shè)備  exit|N:退出\n")
  if filePath==None:
adb_device_none()
  else:
adb_device_none(filePath) 
 elif n>1:
  for i in lines:
print(i.split("\t")[0])
  devices=input("請輸入指定設(shè)備:\n")
  for i in lines:
if devices in i:
 print("T:截圖  F:更換設(shè)備  exit|N:退出")
 if filePath==None:
  adb_info(devices)
 else:
  adb_info(devices,filePath)  
  print("未找到改設(shè)備請重新輸入!")
  if filePath==None:
adb_devices(n,lines)
  else:  
adb_devices(n,lines,filePath)
#截圖
def screencap_cmd(filePath,devices=None):
 if filePath==None:
  filePath='D:/png/'
 if not os.path.exists(filePath):
  os.makedirs(filePath)
 filename=time.strftime("%Y%m%d%H%M%S",time.localtime())+".png"
 if devices==None:
  cmd_screencap='adb shell screencap -p sdcard/'+filename
  cmd_pull='adb pull sdcard/'+filename+' '+filePath+filename
  cmd_delete='adb shell rm sdcard/'+filename
 else:
  cmd_screencap='adb -s '+devices+' shell screencap -p sdcard/'+filename
  cmd_pull='adb -s '+devices+' pull sdcard/'+filename+' '+filePath+filename
  cmd_delete='adb -s '+devices+' shell rm sdcard/'+filename
 a=os.system(cmd_screencap)
 if a==0:
  os.system(cmd_pull)
  os.system(cmd_delete)
 else:
  if ":5555" in devices:
print("連接斷開,請重新連接\n")
ipPath=ip_info()
if ipPath==None:
 ipPath=ip_info()
else:
 device=ipPath+":5555"
 adb_info(device,filePath)
  else:
print("設(shè)備連接斷開,請更換設(shè)備\n")
device=change_devices()
adb_info(device,filePath)
if  __name__ == '__main__': 
 ipPath=ip_info()
 filePath=input("請輸入保存地址:(不輸入enter跳過,默認(rèn)保存至D:\png\)\n")
 #查詢當(dāng)前連接的設(shè)備
 r=os.popen("adb devices")
 lines=r.readlines()
 lines=lines[1:-1]
 n=len(lines)
 ip_add=0
 if ipPath!=None:
  for i in lines:
if ipPath in i:
 ip_add=i.split("\t")[0]
 if len(filePath)>0:
  if ":\\" in filePath:
if ip_add!=0:
 adb_devices(n,ip_add,filePath)
else:
 adb_devices(n,lines,filePath)
  else:
print("地址輸入非法,使用默認(rèn)地址\n")
if ip_add!=0:
 adb_devices(n,ip_add)
else:
 adb_devices(n,lines)
 else:
  if ip_add!=0:
adb_devices(n,ip_add) 
  else:
adb_devices(n,lines) 

到此這篇關(guān)于python編寫adb截圖工具的文章就介紹到這了,更多相關(guān)python adb截圖工具內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

香港服務(wù)器租用

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時開通

自選配置、實(shí)時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部