↑↑↑关注后"星标"简说Python
人人都可以简单入门Python、爬虫、数据分析 简说Python推荐
来源:进击的Coder作者:崔庆才
云服务器大家肯定不陌生了,有了一台云服务器,我们可以通过 ssh 命令或者远程桌面即可连接并执行相应的命令对云服务器进行控制。
云服务器大多都是 Linux、Windows Server 系统,这些其实都是 PC。有的朋友可能就会好奇了:那既然有云 PC,那有没有云手机呢?
答案当然是有的。
所谓的云手机就是指一种搭建在云服务器上的虚拟手机,这些云手机的功能与真正的手机基本相同,只不过我们拿不到真机,云手机平台可以提供给我们一些控制面板或者 API 来操控手机或者执行相应的命令来满足我们的使用需求。
平台
目前云手机平台还是比较多的,个人比较推荐的是河马云手机平台,其官网为:,首页如图所示:
在河马云手机平台上,我们可以选购相应的云手机并开通相应的服务。
购买云手机之后,我们就可以在河马云手机平台的网页中控制相应的云手机,其功能非常丰富,包括基础控制、应用管理、IP 切换、数据备份、日志调试、实时直播、adb 调试、远程虚拟相机等功能,其官网也有如图所示的介绍:
接下来我们就来使用河马云来演示下云手机的申请、使用过程。
购买云手机
首先我们需要注册河马云手机平台的账号,登录之后点击右上角的订购入口,即可进入订购页面,如图所示:
这里我们可以选择多个套餐,如基础版、标准版、高级版、荣耀版,不同的版本都会显示云主机的基本配置,如屏幕分辨率、内存、CPU、安卓版本等信息。这里我们为了测试,先购买了试用 1 天的荣耀版套餐。
管理云手机
支付之后我们便可以看到控制台就出现了一部云手机,呈现了手机的屏幕状态,同时在菜单栏中还有很多配置,如应用管理、云机同步、实时直播等功能,如图所示:
我们可以点击该云主机打卡其控制面板,如图所示。
这里我们可以对手机屏幕做任何的控制操作,如点击打卡某个 App、滑动下拉查看通知栏等,和平常我们用的手机操作基本一致。另外在右侧栏还有一系列基本控制,如音量控制、回到首页、返回等等。
接下来我们想尝试在云手机上装一个 App,在此之前,我们需要对云手机进行分组操作,这里我们直接在控制面板进行操作即可,如图所示。
分区完成之后,我们就可以点击“应用安装/卸载”按钮来安装一个应用了。
这里我们首先下载下我们需要测试的应用,从 下载即可,保存为 scrape-app5.apk,然后上传,如图所示:
上传之后,即可看到云主机提示“应用同步中”,如图所示。稍等片刻,应用就可以安装好了。
我们可以在云手机上查看其运行效果,如图所示:
这样我们就成功实现了应用的安装和启动。
高级服务
另外云手机还有很多高级服务,如切换 IP、远程相机、消息转发、adb 调试等等,我们点击配套服务即可查看,如图所示:
我们可以在操作菜单中看到一些基本操作,如图所示:
比如对于 IP 服务来说,我们可以点击对应的地区并确定,即可切换到对应区域的 IP,如图所示:
对于云机扫码功能,我们可以选择扫码云机开始扫码,被扫码云机点击进入二维码页面,点击扫码按钮即可开始扫描另一台云机的二维码,扫码成功之后便会执行相应的扫码处理流程,如图所示:
ADB 调试
另外云手机还有 ADB 调试功能,该功能是单独需要付费购买的,购买之后我们可以通过云机菜单中的“调试ADB”来获取 adb 远程连接信息,如图所示:
点击之后,页面就会提示一个远程连接的 IP 和端口,其 IP 是 183.220.196.75,端口是 15998,如图所示:
那怎么连接呢?
我们使用 adb connect 命令即可:
adb connect 183.220.196.75:15988
如果顺利的话,运行结果会提示 connected to 字样,如图所示:
连接成功之后,我们重新运行 adb devices 命令,运行结果的列表中就可以看到一台远程的手机了,如图所示:
这时候我们再尝试用 Airtest 来实现远程数据爬取,主要将手机的连接信息修改为该远程主机即可,代码实现如下:
from re import T
from main import PACKAGE_NAME
from airtest.core.api import *
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
import adbutils
from multiprocessing import Process
class Controller(object):
def __init__(self, device_uri, package_name, apk_path, need_reinstall=False, need_restart=False):
self.device_uri = device_uri
self.package_name = package_name
self.apk_path = apk_path
self.need_reintall = need_reinstall
self.need_restart = need_restart
def connect_device(self):
self.device = connect_device(self.device_uri)
def install_app(self):
if self.device.check_app(self.package_name) and not self.need_reintall:
return
self.device.uninstall_app(self.package_name)
self.device.install_app(self.apk_path)
def start_app(self):
if self.need_restart:
self.device.stop_app(self.package_name)
self.device.start_app(self.package_name)
def init_device(self):
self.connect_device()
self.poco = AndroidUiautomationPoco(self.device)
self.window_width, self.window_height = self.poco.get_screen_size()
self.install_app()
self.start_app()
def scroll_up(self):
self.device.swipe((self.window_width * 0.5, self.window_height * 0.8),
(self.window_width * 0.5, self.window_height * 0.3), duration=1)
def run(self):
for _ in range(10):
self.scroll_up()
PACKAGE_NAME = 'com.goldze.mvvmhabit'
APK_PATH = 'scrape-app5.apk'
def run(device_uri):
controller = Controller(device_uri=device_uri,
package_name=PACKAGE_NAME,
apk_path=APK_PATH,
need_reinstall=False,
need_restart=True)
controller.init_device()
controller.run()
if __name__ == '__main__':
device_uri = 'Android://183.220.196.75:15998'
run(device_uri)
运行之后即可发现 Airtest 进行了一系列初始化操作,在手机上安装了一些 Airtest 相关 App,如图所示:
运行代码之后可以发现,App 就自动启动然后执行了数据爬取操作,运行界面如图所示:
其最终运行效果就是爬虫控制手机点击了一个个电影条目信息并爬取到了每部电影的详情信息,最后将信息保存了下来。
总结
以上我们了解了云手机的申请和使用方法,云手机和正常的真机没有太大差别,甚至还在真机的基础上提供了增值服务,这在一定程度上为我们的开发、数据爬取提供了一定的便利。