通知设置 新通知
最近用appium写自动化撸羊毛撸得有点多
李魔佛 发表了文章 • 0 个评论 • 2385 次浏览 • 2020-11-22 02:03
前阵子用autojs写,用的js开发语言,写完在手机上运行,无论稳定性,还是业务逻辑,还和在python上开发差太远,无论是功能,还是代码。
撸支付宝基金红包,就挂着等红包吧。
查看全部
appium xpath获取属性clickable=true的空间
李魔佛 发表了文章 • 0 个评论 • 1971 次浏览 • 2020-11-21 19:51
在找不到id,text等情况下,刚好有2个textview可以点击的,那么我们就选择这两个按钮
answer_list = self.driver.find_elements_by_xpath('//android.view.View[@clickable="true"]') 查看全部
在找不到id,text等情况下,刚好有2个textview可以点击的,那么我们就选择这两个按钮
answer_list = self.driver.find_elements_by_xpath('//android.view.View[@clickable="true"]')
autojs基础教程 入门篇
李魔佛 发表了文章 • 0 个评论 • 9118 次浏览 • 2020-10-30 11:09
像下面笔者自己封装的一个模块:
function Helper(packageName) {
this.packageName = packageName;
if (packageName && !getAppName(packageName)) {
toast("找不到此应用, 无法提供服务");
this.sleep(1000);
exit();
}
this.click = function (x, y) {
return click(x, y);
};
this.clickCenter = function (widget) {
if (!widget) {
toast('找不到控件');
return false;
}
let rect = widget.bounds();
return click(rect.centerX(), rect.centerY());
};
this.clickSelectorCenter = function (selector) {
if (!selector) {
toast('找不到控件');
return false;
}
let widget = selector.findOne(2000);
return this.clickCenter(widget);
};
this.clickMulti = function (points, interval) {
points.forEach(function (point) {
this.click(point[0], point[1]);
this.sleep(interval);
}.bind(this));
};
this.clickMultiCenter = function (widgets) {
if (!widgets || widgets.length == 0)
return;
var points = ;
widgets.forEach(function (widget) {
var rect = widget.bounds();
points.push([rect.centerX(), rect.centerY()]);
});
this.clickMulti(points);
};
this.clickIdCenter = function (idStr) {
if (!idStr) {
toast('找不到控件');
return false;
}
return this.clickSelectorCenter(id(idStr));
};
this.clickTextCenter = function (str) {
if (!str) {
toast('找不到控件');
return false;
}
return this.clickSelectorCenter(text(str));
};
this.clickRegTextCenter = function (str) {
if (!str) {
toast('找不到控件');
return false;
}
return this.clickSelectorCenter(textMatches(str));
};
this.clickDescCenter = function (str) {
if (!str) {
toast('找不到控件');
return false;
}
return this.clickSelectorCenter(desc(str));
};
this.clickRegDescCenter = function (str) {
if (!str) {
toast('找不到控件');
return false;
}
return this.clickSelectorCenter(descMatches(str));
};
this.clickClassCenter = function (classNameStr) {
if (!className) {
toast('找不到控件');
return false;
}
return this.clickSelectorCenter(className(classNameStr));
};
// index表示第几个文字, 从1开始
this.clickNTextCenter = function (str, index) {
if (!str)
return false;
let widgets = text(str).find();
if (!widgets)
return false;
index--
for (let i = 0; i < widgets.length; i++) {
let widget = widgets[i];
if (i == index)
return this.clickCenter(widget);
else
continue;
}
return false;
};
this.pageUp = (counter, time) => {
if (counter && time) {
for (let i = 0; i < counter; i++) {
scrollUp();
this.sleep(time);
}
} else {
scrollUp();
}
};
this.pageDown = (counter, time) => {
if (counter && time) {
for (let i = 0; i < counter; i++) {
scrollDown();
this.sleep(time);
}
} else {
scrollDown();
}
};
this.swipe = function (x1, y1, x2, y2, duration) {
swipe(x1, y1, x2, y2, duration);
};
this.sleep = (second) => {
sleep(second * 1000);
};
this.back = function () {
back();
};
this.home = function () {
home();
};
this.shell = function (command) {
shell(command, true);
};
this.launch = function () {
launch(this.packageName);
};
this.waitForActivity = function (activityName) {
waitForActivity(activityName);
};
this.launchActivity = function (activityName) {
shell("am start -n " + this.packageName + "/" + activityName, true);
waitForActivity(activityName);
};
this.kill = function () {
shell("am force-stop " + this.packageName, true);
};
this.before = function (ignoreSleep) {
let source = engines.myEngine().source.toString();
source = source.replace("/storage/emulated/0/脚本/", "");
toast("开始执行[" + source + "]...");
const WIDTH = Math.min(device.width, device.height);
const HEIGHT = Math.max(device.width, device.height);
setScreenMetrics(WIDTH, HEIGHT);
if (!ignoreSleep)
this.sleep(random() * 10); //随机睡眠[0-10]秒, 使签到\打卡时间不固定
};
this.after = function () {
let source = engines.myEngine().source.toString();
source = source.replace("/storage/emulated/0/脚本", "");
toast("结束执行[" + source + "]...");
exit();
};
this.getCaptureImg = () => {
var img = captureScreen();
if (!img || typeof (img) == "undifined") {
console.log("截图失败,退出脚本");
exit();
} else {
return img;
}
}
}
module.exports = Helper;[/i]
可以把文件保存为Helper.js, 然后要放到 手机的 "脚本" 文件夹下
然后在其他文件中,如果要调用
[i]var Helper = require("Helper.js");
var helper = new Helper("com.galaxy.stock");[/i]
然后后续可以用helper来正常操作,比如上面我要自动启动 银河证券[i]helper.launch()[/i] 就可以了
华宝油气自动化申购脚本 AutoJS
更新待续。。。。
查看全部
"/storage/emulated/0/脚本/"2. 对于一些封装的模块的调用
像下面笔者自己封装的一个模块:
function Helper(packageName) {
this.packageName = packageName;
if (packageName && !getAppName(packageName)) {
toast("找不到此应用, 无法提供服务");
this.sleep(1000);
exit();
}
this.click = function (x, y) {
return click(x, y);
};
this.clickCenter = function (widget) {
if (!widget) {
toast('找不到控件');
return false;
}
let rect = widget.bounds();
return click(rect.centerX(), rect.centerY());
};
this.clickSelectorCenter = function (selector) {
if (!selector) {
toast('找不到控件');
return false;
}
let widget = selector.findOne(2000);
return this.clickCenter(widget);
};
this.clickMulti = function (points, interval) {
points.forEach(function (point) {
this.click(point[0], point[1]);
this.sleep(interval);
}.bind(this));
};
this.clickMultiCenter = function (widgets) {
if (!widgets || widgets.length == 0)
return;
var points = ;
widgets.forEach(function (widget) {
var rect = widget.bounds();
points.push([rect.centerX(), rect.centerY()]);
});
this.clickMulti(points);
};
this.clickIdCenter = function (idStr) {
if (!idStr) {
toast('找不到控件');
return false;
}
return this.clickSelectorCenter(id(idStr));
};
this.clickTextCenter = function (str) {
if (!str) {
toast('找不到控件');
return false;
}
return this.clickSelectorCenter(text(str));
};
this.clickRegTextCenter = function (str) {
if (!str) {
toast('找不到控件');
return false;
}
return this.clickSelectorCenter(textMatches(str));
};
this.clickDescCenter = function (str) {
if (!str) {
toast('找不到控件');
return false;
}
return this.clickSelectorCenter(desc(str));
};
this.clickRegDescCenter = function (str) {
if (!str) {
toast('找不到控件');
return false;
}
return this.clickSelectorCenter(descMatches(str));
};
this.clickClassCenter = function (classNameStr) {
if (!className) {
toast('找不到控件');
return false;
}
return this.clickSelectorCenter(className(classNameStr));
};
// index表示第几个文字, 从1开始
this.clickNTextCenter = function (str, index) {
if (!str)
return false;
let widgets = text(str).find();
if (!widgets)
return false;
index--
for (let i = 0; i < widgets.length; i++) {
let widget = widgets[i];
if (i == index)
return this.clickCenter(widget);
else
continue;
}
return false;
};
this.pageUp = (counter, time) => {
if (counter && time) {
for (let i = 0; i < counter; i++) {
scrollUp();
this.sleep(time);
}
} else {
scrollUp();
}
};
this.pageDown = (counter, time) => {
if (counter && time) {
for (let i = 0; i < counter; i++) {
scrollDown();
this.sleep(time);
}
} else {
scrollDown();
}
};
this.swipe = function (x1, y1, x2, y2, duration) {
swipe(x1, y1, x2, y2, duration);
};
this.sleep = (second) => {
sleep(second * 1000);
};
this.back = function () {
back();
};
this.home = function () {
home();
};
this.shell = function (command) {
shell(command, true);
};
this.launch = function () {
launch(this.packageName);
};
this.waitForActivity = function (activityName) {
waitForActivity(activityName);
};
this.launchActivity = function (activityName) {
shell("am start -n " + this.packageName + "/" + activityName, true);
waitForActivity(activityName);
};
this.kill = function () {
shell("am force-stop " + this.packageName, true);
};
this.before = function (ignoreSleep) {
let source = engines.myEngine().source.toString();
source = source.replace("/storage/emulated/0/脚本/", "");
toast("开始执行[" + source + "]...");
const WIDTH = Math.min(device.width, device.height);
const HEIGHT = Math.max(device.width, device.height);
setScreenMetrics(WIDTH, HEIGHT);
if (!ignoreSleep)
this.sleep(random() * 10); //随机睡眠[0-10]秒, 使签到\打卡时间不固定
};
this.after = function () {
let source = engines.myEngine().source.toString();
source = source.replace("/storage/emulated/0/脚本", "");
toast("结束执行[" + source + "]...");
exit();
};
this.getCaptureImg = () => {
var img = captureScreen();
if (!img || typeof (img) == "undifined") {
console.log("截图失败,退出脚本");
exit();
} else {
return img;
}
}
}
module.exports = Helper;[/i]
可以把文件保存为Helper.js, 然后要放到 手机的 "脚本" 文件夹下
然后在其他文件中,如果要调用
[i]var Helper = require("Helper.js");
var helper = new Helper("com.galaxy.stock");[/i]
然后后续可以用helper来正常操作,比如上面我要自动启动 银河证券
[i]helper.launch()[/i]就可以了
华宝油气自动化申购脚本 AutoJS
更新待续。。。。
android monitor 系统找不到文件 lib\monitor-Could。
李魔佛 发表了文章 • 0 个评论 • 3212 次浏览 • 2019-10-17 09:53
但我觉得这是一个很好用的监控日志工具。
在sdk的tool目录底下启动
monitor.bat
然后就可以看到报错:
系统找不到文件 lib\monitor-Could
解决办法:
使用android-studio的sdk管理工具下载一个android-19的API,最新的api少了部分jar文件。
查看全部
但我觉得这是一个很好用的监控日志工具。
在sdk的tool目录底下启动
monitor.bat
然后就可以看到报错:
系统找不到文件 lib\monitor-Could
解决办法:
使用android-studio的sdk管理工具下载一个android-19的API,最新的api少了部分jar文件。
删除MIUI ROM里面的内置软件
李魔佛 发表了文章 • 0 个评论 • 7655 次浏览 • 2018-04-29 15:44
于是下载了小米的MIUI7的ROM, 根据官方的教程刷好了小米的ROM。
刚开始还是很流畅的。 可是后面发现越来越多的广告和app弹窗。太烦了,有豌豆荚,今日头条,搜狗浏览器,搜狗助手,而且还有一些不知道是什么app来的,经常在通知栏里面弹出来,屏保的时候整个画面都是广告。 烦不胜烦,在设置里面,看到这些app都没有可以选择卸载的地方。 把它们的服务停止了,问题依然存在,广告弹个不停,最大的问题是整个手机一直处于下载广告状态, 网速栏里面一直看到网速800-900,后台某些程序在一直联网。
忍无可忍后,把数据线接入手机,使用adb把这些流氓软件给删除掉。 打开手机的root权限。
然后运行
adb root
adb remount
然后你就可以对手机为所欲为了。
首先进入如下的目录:ls一下
看到了这些软件的包名,然后不客气,直接rm -f *
删除之。
然后还可以把小米的一些无用的app也删除,像自带的百度输入法(定制版,经常有广告,屏保也有广告)。
同样rm xxx.apk
删除你不想要的app名字。
最后重启下手机就可以,手机顿时清净很多。
查看全部
于是下载了小米的MIUI7的ROM, 根据官方的教程刷好了小米的ROM。
刚开始还是很流畅的。 可是后面发现越来越多的广告和app弹窗。太烦了,有豌豆荚,今日头条,搜狗浏览器,搜狗助手,而且还有一些不知道是什么app来的,经常在通知栏里面弹出来,屏保的时候整个画面都是广告。 烦不胜烦,在设置里面,看到这些app都没有可以选择卸载的地方。 把它们的服务停止了,问题依然存在,广告弹个不停,最大的问题是整个手机一直处于下载广告状态, 网速栏里面一直看到网速800-900,后台某些程序在一直联网。
忍无可忍后,把数据线接入手机,使用adb把这些流氓软件给删除掉。 打开手机的root权限。
然后运行
adb root
adb remount
然后你就可以对手机为所欲为了。
首先进入如下的目录:ls一下
看到了这些软件的包名,然后不客气,直接rm -f *
删除之。
然后还可以把小米的一些无用的app也删除,像自带的百度输入法(定制版,经常有广告,屏保也有广告)。
同样rm xxx.apk
删除你不想要的app名字。
最后重启下手机就可以,手机顿时清净很多。
在英伟达 神盾tv shield TV 游戏盒子上用手柄玩王者荣耀?
绫波丽 发表了文章 • 0 个评论 • 31350 次浏览 • 2017-04-11 22:42
对于游戏性能,目前最强悍的莫过于英伟达的shield TV , 中文翻译暂且叫做神盾tv吧, 有pro版和非pro版。 在操作上区别不大。
如果你在小米电视上打算玩王者荣耀, 会非常的卡。 而且点击后要等10多秒才会有反应,不过大部分时候程序会直接崩溃,退出。 所以在小米电视上大部分的大型游戏都不具备可玩性。(体积大于100MB的游戏都算大型游戏)
一下均为本人在英伟达shield TV上亲测。
首先如果刷的是官方的rom,默认自带google的应用商场,国内的话等于装饰。 所以需要手工安装一个国内的应用商场,下面我安装的是沙发管家。 那么要怎么安装呢?
有2种方法:
1. 你有sd卡的话,可以把沙发管家的安装程序拷贝到sd卡上,然后插入shield TV中。 在shield TV中使用ES文件管理器安装
2.
原创地址:http://www.30daydo.com/article/164
欢迎转载,请注明出处。
查看全部
对于游戏性能,目前最强悍的莫过于英伟达的shield TV , 中文翻译暂且叫做神盾tv吧, 有pro版和非pro版。 在操作上区别不大。
如果你在小米电视上打算玩王者荣耀, 会非常的卡。 而且点击后要等10多秒才会有反应,不过大部分时候程序会直接崩溃,退出。 所以在小米电视上大部分的大型游戏都不具备可玩性。(体积大于100MB的游戏都算大型游戏)
一下均为本人在英伟达shield TV上亲测。
首先如果刷的是官方的rom,默认自带google的应用商场,国内的话等于装饰。 所以需要手工安装一个国内的应用商场,下面我安装的是沙发管家。 那么要怎么安装呢?
有2种方法:
1. 你有sd卡的话,可以把沙发管家的安装程序拷贝到sd卡上,然后插入shield TV中。 在shield TV中使用ES文件管理器安装
2.
原创地址:http://www.30daydo.com/article/164
欢迎转载,请注明出处。
怎样获取android某个包的包名和activity的启动名字?
李魔佛 发表了文章 • 0 个评论 • 5493 次浏览 • 2017-01-18 22:35
首先安装好eclipse或者android studio,实在没有直接用adb命令也可以搞定,裸手操作。
打开android studio,连接上手机,确保adb的驱动能用。 (如果驱动不能用,就可以安装一个豌豆荚或者91助手之类的,然后连上手机,这时它会自动帮你安装驱动的,好用!用完就把豌豆荚或者91助手删掉。)
然后在底部找到android Monitor
看到了吗? 好多log日志输出。
然后进行过滤。 这里以中国移动手机客户端为例。
先把所有的log清空,然后在手机上点击 中国移动的手机客户端
然后就看到很多log即时输出来。
这个时候你就需要过滤
ActivityManager: Start proc
这句话,它是显示启动一个app时输出的信息。
这这里就可以看到打出的包名和activity名字
然后你需要怎样自动启动这个中国移动的客户端app吗?
只需要执行
adb shell am start -n com.kingpoint.gmcchh/.ui.home.StartUpActivity
就可以了。
查看全部
首先安装好eclipse或者android studio,实在没有直接用adb命令也可以搞定,裸手操作。
打开android studio,连接上手机,确保adb的驱动能用。 (如果驱动不能用,就可以安装一个豌豆荚或者91助手之类的,然后连上手机,这时它会自动帮你安装驱动的,好用!用完就把豌豆荚或者91助手删掉。)
然后在底部找到android Monitor
看到了吗? 好多log日志输出。
然后进行过滤。 这里以中国移动手机客户端为例。
先把所有的log清空,然后在手机上点击 中国移动的手机客户端
然后就看到很多log即时输出来。
这个时候你就需要过滤
ActivityManager: Start proc
这句话,它是显示启动一个app时输出的信息。
这这里就可以看到打出的包名和activity名字
然后你需要怎样自动启动这个中国移动的客户端app吗?
只需要执行
adb shell am start -n com.kingpoint.gmcchh/.ui.home.StartUpActivity
就可以了。
锤子手机T2 屏幕录像文件保存在哪里?
绫波丽 发表了文章 • 0 个评论 • 7828 次浏览 • 2016-11-26 16:54
android TV版 wifi 压力测试
李魔佛 发表了文章 • 0 个评论 • 5335 次浏览 • 2016-11-03 20:34
1.重启设备
2.等待设备adb
3.移动到wifi设置菜单
4.连接wifi
5.检测网络是否连通
6.抓取log和截图,并把log文件压缩。
7.忘记wifi密码
8.重启设备,重复步骤1.
#-*-coding=utf-8-*-
__author__ = 'rocky chen'
from uiautomator import device as d
import time,subprocess,re,os
def zip_log(filename):
filename="count_%d.log" %filename
cmd='zip %s.zip %s' %(filename,filename)
p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
p.wait()
os.remove(filename)
def move_operation(action_key):
cmd='adb shell input keyevent %s' %action_key
p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
p.wait()
print out,err
def basic_info():
for k, v in d.info.items():
print k,v
#print info
def check_connect():
cmd='adb shell ping www.qq.com'
p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
p.wait()
print out,err
def wifi_connect(count):
print "WIFI connect in LOOP %d" %count
d.press.home()
#move_operation('KEYCODE_HOME')
d.press.down()
#move_operation('KEYCODE_DPAD_DOWN')
d.press.down()
#move_operation('KEYCODE_DPAD_DOWN')
d.press.down()
#move_operation('KEYCODE_DPAD_DOWN')
d.press.right()
#move_operation('KEYCODE_DPAD_RIGHT')
d.press.enter()
#move_operation('KEYCODE_ENTER')
d.press.enter()
#move_operation('KEYCODE_ENTER')
d.press.down()
#move_operation('KEYCODE_DPAD_DOWN')
d.press.down()
#move_operation('KEYCODE_DPAD_DOWN')
d.press.down()
#move_operation('KEYCODE_DPAD_DOWN')
d.press.down()
#move_operation('KEYCODE_DPAD_DOWN')
d.press.down()
#move_operation('KEYCODE_DPAD_DOWN')
d.press.enter()
#move_operation('KEYCODE_ENTER')
cmd='adb shell input text xiaomi2g'
p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
cmd='adb shell input keyevent KEYCODE_ESCAPE'
p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
cmd='adb shell input keyevent KEYCODE_ENTER'
p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
d.press.down()
d.press.down()
#move_operation('KEYCODE_DPAD_DOWN')
#d.press.down()
d.press.enter()
#move_operation('KEYCODE_ENTER')
cmd='adb shell input text test1234'
p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
p.wait()
cmd='adb shell input keyevent KEYCODE_ENTER'
p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
p.wait()
time.sleep(25)
def check_wifi_list(count):
print "check wifi list in loop %d" %count
d.press.up()
d.press.up()
d.press.up()
d.press.up()
d.press.up()
d.press.enter()
d.press.enter()
time.sleep(3)
print "########### IN LOOP %d #################" %count
cmd='adb shell screencap -p /sdcard/%d.png' %count
p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
p.wait()
cmd='adb pull /sdcard/%d.png .' %count
p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
p.wait()
def check_connection(count):
print "check connection %d" %count
fp=open("capture.log",'w')
fp.write('\n')
cmd='adb shell ping -c 4 www.baidu.com'
p=subprocess.Popen(cmd,stdout=fp,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
print out
print err
p.wait()
fp.flush()
fp.close()
fp=open("capture.log",'r')
return_data=fp.read()
#print return_data
pettern=re.compile(r'100\% packet loss')
t=pettern.search(return_data)
#print t
if t:
print "Failed"
else:
print "Passed"
try:
os.remove("capture.log")
except:
print "Delete capture.log failed"
def reboot_device(count):
print "reboot device in loop %d" %count
cmd='adb reboot'
p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
print out,err
p.wait()
cmd='adb wait-for-device'
p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
print out,err
p.wait()
print "Reboot done"
time.sleep(60)
def forget_password(count):
print "Forget wifi in loop %d" %count
d.press.home()
d.press.down()
d.press.down()
d.press.down()
d.press.right()
d.press.enter()
d.press.enter()
d.press.enter()
d.press.down()
d.press.down()
d.press.enter()
d.press.enter()
time.sleep(1)
def get_log(count):
cmd="adb logcat -v time >count_%d.log &" %count
'''p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
print out,err
'''
os.system(cmd)
if __name__=="__main__":
#check_connection()
#get_log(2)
#basic_info()
for i in range(3000):
reboot_device(i)
wifi_connect(i)
get_log(i)
check_wifi_list(i)
check_connection(i)
forget_password(i)
zip_log(i)
#move_operation('KEYCODE_HOME')
#move_operation('KEYCODE_DPAD_DOWN') 查看全部
1.重启设备
2.等待设备adb
3.移动到wifi设置菜单
4.连接wifi
5.检测网络是否连通
6.抓取log和截图,并把log文件压缩。
7.忘记wifi密码
8.重启设备,重复步骤1.
#-*-coding=utf-8-*-
__author__ = 'rocky chen'
from uiautomator import device as d
import time,subprocess,re,os
def zip_log(filename):
filename="count_%d.log" %filename
cmd='zip %s.zip %s' %(filename,filename)
p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
p.wait()
os.remove(filename)
def move_operation(action_key):
cmd='adb shell input keyevent %s' %action_key
p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
p.wait()
print out,err
def basic_info():
for k, v in d.info.items():
print k,v
#print info
def check_connect():
cmd='adb shell ping www.qq.com'
p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
p.wait()
print out,err
def wifi_connect(count):
print "WIFI connect in LOOP %d" %count
d.press.home()
#move_operation('KEYCODE_HOME')
d.press.down()
#move_operation('KEYCODE_DPAD_DOWN')
d.press.down()
#move_operation('KEYCODE_DPAD_DOWN')
d.press.down()
#move_operation('KEYCODE_DPAD_DOWN')
d.press.right()
#move_operation('KEYCODE_DPAD_RIGHT')
d.press.enter()
#move_operation('KEYCODE_ENTER')
d.press.enter()
#move_operation('KEYCODE_ENTER')
d.press.down()
#move_operation('KEYCODE_DPAD_DOWN')
d.press.down()
#move_operation('KEYCODE_DPAD_DOWN')
d.press.down()
#move_operation('KEYCODE_DPAD_DOWN')
d.press.down()
#move_operation('KEYCODE_DPAD_DOWN')
d.press.down()
#move_operation('KEYCODE_DPAD_DOWN')
d.press.enter()
#move_operation('KEYCODE_ENTER')
cmd='adb shell input text xiaomi2g'
p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
cmd='adb shell input keyevent KEYCODE_ESCAPE'
p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
cmd='adb shell input keyevent KEYCODE_ENTER'
p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
d.press.down()
d.press.down()
#move_operation('KEYCODE_DPAD_DOWN')
#d.press.down()
d.press.enter()
#move_operation('KEYCODE_ENTER')
cmd='adb shell input text test1234'
p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
p.wait()
cmd='adb shell input keyevent KEYCODE_ENTER'
p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
p.wait()
time.sleep(25)
def check_wifi_list(count):
print "check wifi list in loop %d" %count
d.press.up()
d.press.up()
d.press.up()
d.press.up()
d.press.up()
d.press.enter()
d.press.enter()
time.sleep(3)
print "########### IN LOOP %d #################" %count
cmd='adb shell screencap -p /sdcard/%d.png' %count
p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
p.wait()
cmd='adb pull /sdcard/%d.png .' %count
p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
p.wait()
def check_connection(count):
print "check connection %d" %count
fp=open("capture.log",'w')
fp.write('\n')
cmd='adb shell ping -c 4 www.baidu.com'
p=subprocess.Popen(cmd,stdout=fp,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
print out
print err
p.wait()
fp.flush()
fp.close()
fp=open("capture.log",'r')
return_data=fp.read()
#print return_data
pettern=re.compile(r'100\% packet loss')
t=pettern.search(return_data)
#print t
if t:
print "Failed"
else:
print "Passed"
try:
os.remove("capture.log")
except:
print "Delete capture.log failed"
def reboot_device(count):
print "reboot device in loop %d" %count
cmd='adb reboot'
p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
print out,err
p.wait()
cmd='adb wait-for-device'
p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
print out,err
p.wait()
print "Reboot done"
time.sleep(60)
def forget_password(count):
print "Forget wifi in loop %d" %count
d.press.home()
d.press.down()
d.press.down()
d.press.down()
d.press.right()
d.press.enter()
d.press.enter()
d.press.enter()
d.press.down()
d.press.down()
d.press.enter()
d.press.enter()
time.sleep(1)
def get_log(count):
cmd="adb logcat -v time >count_%d.log &" %count
'''p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out,err=p.communicate()
print out,err
'''
os.system(cmd)
if __name__=="__main__":
#check_connection()
#get_log(2)
#basic_info()
for i in range(3000):
reboot_device(i)
wifi_connect(i)
get_log(i)
check_wifi_list(i)
check_connection(i)
forget_password(i)
zip_log(i)
#move_operation('KEYCODE_HOME')
#move_operation('KEYCODE_DPAD_DOWN')
android adb 捕获屏幕截图的命令
李魔佛 发表了文章 • 0 个评论 • 10951 次浏览 • 2016-10-19 12:16
把当前的截图保存在目录 sdcard下,名字为 1.png
然后 adb pull /sdcard/1.png .
就可以图片传到电脑上了
adb shell screencap -p /sdcard/1.png
把当前的截图保存在目录 sdcard下,名字为 1.png
然后 adb pull /sdcard/1.png .
就可以图片传到电脑上了
安卓系统常用命令 adb shell
李魔佛 发表了文章 • 0 个评论 • 3749 次浏览 • 2016-07-16 16:44
1. 安卓关机(非重启): adb shell svc power shutdown
2. android开机的时候跳过初始化设置 (setup wizard): adb shell input text 1396611460
3.
1. 安卓关机(非重启): adb shell svc power shutdown
2. android开机的时候跳过初始化设置 (setup wizard): adb shell input text 1396611460
3.