安卓GUI爬虫

3

有人知道一个好的工具来爬取安卓应用程序的GUI吗?我发现了这个,但是不知道如何运行它...


1
尝试过Robotium吗?您可以在活动中获取一个视图的ArrayList并遍历它们。 - DevOfZot
嗨, @DevOfZot,我是Android的新手,你能帮我从哪里开始使用Robotium,比如提供一些示例代码之类的吗? - Ehsan
请问您能具体说明您想要实现什么吗? - Diego Torres Milano
开始使用Robotium:https://code.google.com/p/robotium/wiki/Getting_Started - DevOfZot
@dtmilano 我想从GUI中获得一棵树形结构。 - Ehsan
显示剩余2条评论
2个回答

3

个人认为使用MonkeyRunnerAndroidViewClient制作一个简单的GUI爬虫不会太难。

另外,您可能需要了解uiautomatorUI测试

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

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

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

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

printViewListDepth(viewClient.root)

请注意,在上述实现中,“View”的类被截断,即移除“android.widget.”,而“View”的文本被截断为10个字符。您可以更改这些内容以满足您的需要。
编辑:GUI爬取
使用AndroidViewClient,您可以查询View是否可点击,someView.isClickable()。如果它是可点击的,则可以在其上调用触摸事件,someView.touch()。假设大多数按钮点击会打开不同的Activity,则您需要想出一种机制来回到原来的位置进行递归。
我想这可以通过一些努力完成,但您可能希望从简单的事情开始,比如调用BACK按钮按下,device.press('KEYCODE_BACK', MonkeyDevice.DOWN_AND_UP)。您可能需要处理应用程序特定的特殊情况,但这应该能让您有一个不错的开端。

@Ehsan 是的,但目前还没有。明天会更新答案并附上代码示例。 - CatShoes
是的,我想你的回答正是我想要的,但问题是我不知道该如何运行这些脚本以及如何使用monkeyrunner和androidViewClient。我阅读了一些教程,但到现在为止还无法弄清楚,你有什么建议吗? - Ehsan
深度变量仅控制打印文本的缩进。此代码示例不会遍历可点击的项目。 - CatShoes
我接受了你的答案,因为它真的很好:) 谢谢你提供的好建议。你知道在哪里可以阅读有关ViewClient属性的信息吗? - Ehsan
@Ehsan 谢谢。以下是AndroidViewClient的一些链接:博客: http://dtmilano.blogspot.com/ Wiki: https://github.com/dtmilano/AndroidViewClient/wiki 源代码: https://github.com/dtmilano/AndroidViewClient/blob/master/AndroidViewClient/src/com/dtmilano/android/viewclient.py - CatShoes
显示剩余3条评论

0

您可以查看Testdroid App Crawler。这是在Testdroid Cloud中作为项目类型提供的,您可以轻松地在15个免费设备上运行它。


听起来很有趣。你有任何可以用来运行的链接吗? - Ehsan
你知道我是否可以通过Testdroid获取应用程序的GUI树吗? - Ehsan
你不能这样做,必须使用安卓工具——层次结构查看器或UIAutomator中的层次转储器。 - maszter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接