首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android GUI爬虫

Android GUI爬虫
EN

Stack Overflow用户
提问于 2013-06-28 00:24:05
回答 2查看 1.7K关注 0票数 3

有谁知道抓取android应用程序GUI的好工具吗?我找到了this,但不知道如何运行它...

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-28 00:43:17

就我个人而言,我认为用MonkeyRunnerAndroidViewClient制作一个简单的图形用户界面爬虫并不难。

此外,您可能希望研究一下uiautomatorUI Testing

“好”是一个相对的术语。我没有使用过Robotium,但在这些圈子里经常提到它。

编辑-根据评论请求添加示例。

使用MonkeyRunner和AndroidViewClient,您可以创建视图的层次结构。我认为AndroidViewClient有一个内置的机制来做这件事,但我自己写的。此代码尝试生成与Linux tree命令使用的布局类似的布局。spaceline变量用于设置每行前面的“前缀”。当然,这段代码使用了深度优先的递归遍历。

代码语言:javascript
运行
复制
def printViewListDepth(view, depth=0):
    space = '|' * int(not depth == 0) 
    space += (' ' * 2 * (depth-1)) + '|' * int(not depth-1 <= 0)
    line  = '_' * int(not depth == 0) * 2
    text = view.getText()
    text = text[:10] + int(len(text) > 10) * '...'
    print " [*] %s%s%s %s %s" % (
        space, line, view.getUniqueId(), 
        view.getClass().replace('android.widget.', ''), text)
    for ch in view.children:
        printViewListDepth(ch, depth+1)

使用AndroidViewClient返回的ViewClient调用printViewListDepth,如下所示:

代码语言:javascript
运行
复制
printViewListDepth(viewClient.root)

请注意,在上面的实现中,通过删除“android.widget”,View的类被截断。并且View的文本被截断为10个字符。您可以更改这些设置以满足您的需要。

编辑图形用户界面爬网

使用AndroidViewClient,你可以查询一个视图是否可点击,someView.isClickable()。如果它是可点击的,你可以在它上面调用一个触摸事件someView.touch()。假设大多数按钮单击都会打开一个不同的活动,那么您需要想出一种机制来返回到原来的位置来进行递归。

我认为这可以通过一些努力来完成,但您可能希望从调用BACK按钮按下device.press('KEYCODE_BACK', MonkeyDevice.DOWN_AND_UP)这样简单的事情开始。当特定于应用程序的特殊情况出现时,您可能需要处理它们,但这应该会让您有一个良好的开端。

票数 3
EN

Stack Overflow用户

发布于 2013-06-28 03:31:44

你可以看看Testdroid App Crawler,它在Testdroid Cloud中是可用的项目类型,你可以很容易地在15个免费设备上运行它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17348376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档