最近用appium写自动化撸羊毛撸得有点多

李魔佛 发表了文章 • 0 个评论 • 2385 次浏览 • 2020-11-22 02:03 • 来自相关话题

还是用python写代码方便。
前阵子用autojs写,用的js开发语言,写完在手机上运行,无论稳定性,还是业务逻辑,还和在python上开发差太远,无论是功能,还是代码。
 







撸支付宝基金红包,就挂着等红包吧。
 





 
  查看全部
还是用python写代码方便。
前阵子用autojs写,用的js开发语言,写完在手机上运行,无论稳定性,还是业务逻辑,还和在python上开发差太远,无论是功能,还是代码。
 


捕获.PNG


撸支付宝基金红包,就挂着等红包吧。
 

微信图片_20201122155958.jpg

 
 

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 • 来自相关话题

1. 脚本存放路径:内部存储设置(内置存储卡)根目录 /storage/脚本"/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
 

更新待续。。。。
  查看全部
1. 脚本存放路径:内部存储设置(内置存储卡)根目录 /storage/脚本
"/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 • 来自相关话题

最新的android studio删除了android monitor 
但我觉得这是一个很好用的监控日志工具。
 
在sdk的tool目录底下启动
 
monitor.bat
 
然后就可以看到报错:
 
系统找不到文件 lib\monitor-Could
 
解决办法:
使用android-studio的sdk管理工具下载一个android-19的API,最新的api少了部分jar文件。
  查看全部
最新的android studio删除了android monitor 
但我觉得这是一个很好用的监控日志工具。
 
在sdk的tool目录底下启动
 
monitor.bat
 
然后就可以看到报错:
 
系统找不到文件 lib\monitor-Could
 
解决办法:
使用android-studio的sdk管理工具下载一个android-19的API,最新的api少了部分jar文件。
 

删除MIUI ROM里面的内置软件

李魔佛 发表了文章 • 0 个评论 • 7655 次浏览 • 2018-04-29 15:44 • 来自相关话题

抽屉利的三星S4手机,打算拿来做接收邮件专用的。 但是系统很久,旧到无法安装微信。
于是下载了小米的MIUI7的ROM, 根据官方的教程刷好了小米的ROM。
 
刚开始还是很流畅的。 可是后面发现越来越多的广告和app弹窗。太烦了,有豌豆荚,今日头条,搜狗浏览器,搜狗助手,而且还有一些不知道是什么app来的,经常在通知栏里面弹出来,屏保的时候整个画面都是广告。 烦不胜烦,在设置里面,看到这些app都没有可以选择卸载的地方。 把它们的服务停止了,问题依然存在,广告弹个不停,最大的问题是整个手机一直处于下载广告状态, 网速栏里面一直看到网速800-900,后台某些程序在一直联网。
 
忍无可忍后,把数据线接入手机,使用adb把这些流氓软件给删除掉。 打开手机的root权限。
 
然后运行
adb root
adb remount
然后你就可以对手机为所欲为了。
 
首先进入如下的目录:ls一下




看到了这些软件的包名,然后不客气,直接rm -f *
删除之。
 
然后还可以把小米的一些无用的app也删除,像自带的百度输入法(定制版,经常有广告,屏保也有广告)。




同样rm xxx.apk
删除你不想要的app名字。
 
最后重启下手机就可以,手机顿时清净很多。
 
  查看全部
抽屉利的三星S4手机,打算拿来做接收邮件专用的。 但是系统很久,旧到无法安装微信。
于是下载了小米的MIUI7的ROM, 根据官方的教程刷好了小米的ROM。
 
刚开始还是很流畅的。 可是后面发现越来越多的广告和app弹窗。太烦了,有豌豆荚,今日头条,搜狗浏览器,搜狗助手,而且还有一些不知道是什么app来的,经常在通知栏里面弹出来,屏保的时候整个画面都是广告。 烦不胜烦,在设置里面,看到这些app都没有可以选择卸载的地方。 把它们的服务停止了,问题依然存在,广告弹个不停,最大的问题是整个手机一直处于下载广告状态, 网速栏里面一直看到网速800-900,后台某些程序在一直联网。
 
忍无可忍后,把数据线接入手机,使用adb把这些流氓软件给删除掉。 打开手机的root权限。
 
然后运行
adb root
adb remount
然后你就可以对手机为所欲为了。
 
首先进入如下的目录:ls一下
Screenshot_from_2018-04-29_15-39-52.png

看到了这些软件的包名,然后不客气,直接rm -f *
删除之。
 
然后还可以把小米的一些无用的app也删除,像自带的百度输入法(定制版,经常有广告,屏保也有广告)。
Screenshot_from_2018-04-29_15-43-08.png

同样rm xxx.apk
删除你不想要的app名字。
 
最后重启下手机就可以,手机顿时清净很多。
 
 

在英伟达 神盾tv shield TV 游戏盒子上用手柄玩王者荣耀?

绫波丽 发表了文章 • 0 个评论 • 31350 次浏览 • 2017-04-11 22:42 • 来自相关话题

最近不少人都在玩王者荣耀这个游戏。 而且部分发烧友希望在55寸甚至更大的尺寸的屏幕上畅玩这个游戏。
 
对于游戏性能,目前最强悍的莫过于英伟达的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 
欢迎转载,请注明出处。
  查看全部
最近不少人都在玩王者荣耀这个游戏。 而且部分发烧友希望在55寸甚至更大的尺寸的屏幕上畅玩这个游戏。
 
对于游戏性能,目前最强悍的莫过于英伟达的shield TV , 中文翻译暂且叫做神盾tv吧, 有pro版和非pro版。 在操作上区别不大。
 
如果你在小米电视上打算玩王者荣耀, 会非常的卡。 而且点击后要等10多秒才会有反应,不过大部分时候程序会直接崩溃,退出。 所以在小米电视上大部分的大型游戏都不具备可玩性。(体积大于100MB的游戏都算大型游戏)
 
一下均为本人在英伟达shield TV上亲测。
 
首先如果刷的是官方的rom,默认自带google的应用商场,国内的话等于装饰。 所以需要手工安装一个国内的应用商场,下面我安装的是沙发管家。 那么要怎么安装呢? 
有2种方法:
 
1. 你有sd卡的话,可以把沙发管家的安装程序拷贝到sd卡上,然后插入shield TV中。 在shield TV中使用ES文件管理器安装
 
2.
 

1491921108207.jpg


1491921116332.jpg


1491921123964.jpg


1491921129157.jpg


1491921134717.jpg


1491921139890.jpg

 
 
 
原创地址:http://www.30daydo.com/article/164 
欢迎转载,请注明出处。
 

怎样获取android某个包的包名和activity的启动名字?

李魔佛 发表了文章 • 0 个评论 • 5493 次浏览 • 2017-01-18 22:35 • 来自相关话题

不需要对原apk进行反编译然后读取Manifest.xml 文件就可以获取android的某个包的包名和activity启动名字。
 
首先安装好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
就可以了。
  查看全部
不需要对原apk进行反编译然后读取Manifest.xml 文件就可以获取android的某个包的包名和activity启动名字。
 
首先安装好eclipse或者android studio,实在没有直接用adb命令也可以搞定,裸手操作。
 
打开android studio,连接上手机,确保adb的驱动能用。 (如果驱动不能用,就可以安装一个豌豆荚或者91助手之类的,然后连上手机,这时它会自动帮你安装驱动的,好用!用完就把豌豆荚或者91助手删掉。)
然后在底部找到android Monitor
 

android_monitor.PNG

 
看到了吗? 好多log日志输出。
 
然后进行过滤。 这里以中国移动手机客户端为例。
先把所有的log清空,然后在手机上点击 中国移动的手机客户端
然后就看到很多log即时输出来。
这个时候你就需要过滤
ActivityManager: Start proc
这句话,它是显示启动一个app时输出的信息。
 
这这里就可以看到打出的包名和activity名字

activity.PNG

 
然后你需要怎样自动启动这个中国移动的客户端app吗?
 
只需要执行
adb shell am start -n com.kingpoint.gmcchh/.ui.home.StartUpActivity
就可以了。
 

锤子手机T2 屏幕录像文件保存在哪里?

绫波丽 发表了文章 • 0 个评论 • 7828 次浏览 • 2016-11-26 16:54 • 来自相关话题

在根目录下的 /Video/ScreenRecorder 下面
在根目录下的 /Video/ScreenRecorder 下面

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 • 来自相关话题

adb shell screencap -p /sdcard/1.png


把当前的截图保存在目录 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.