您使用过云电话吗?
这是「进击的Coder」的第 458 篇技术分享
作者:崔庆才
云服务器大家肯定不陌生了,有了一台云服务器,我们可以通过 ssh 命令或者远程桌面即可连接并执行相应的命令对云服务器进行控制。
云服务器大多都是 Linux、Windows Server 系统,这些其实都是 PC。有的朋友可能就会好奇了:那既然有云 PC,那有没有云手机呢?
答案当然是有的。
所谓的云手机就是指一种搭建在云服务器上的虚拟手机,这些云手机的功能与真正的手机基本相同,只不过我们拿不到真机,云手机平台可以提供给我们一些控制面板或者 API 来操控手机或者执行相应的命令来满足我们的使用需求。
平台
目前云手机平台还是比较多的,个人比较推荐的是河马云手机平台,其官网为:http://www.longene.com.cn/,首页如图所示:
在河马云手机平台上,我们可以选购相应的云手机并开通相应的服务。
购买云手机之后,我们就可以在河马云手机平台的网页中控制相应的云手机,其功能非常丰富,包括基础控制、应用管理、IP 切换、数据备份、日志调试、实时直播、adb 调试、远程虚拟相机等功能,其官网也有如图所示的介绍:
接下来我们就来使用河马云来演示下云手机的申请、使用过程。
购买云手机
首先我们需要注册河马云手机平台的账号,登录之后点击右上角的订购入口,即可进入订购页面,如图所示:
这里我们可以选择多个套餐,如基础版、标准版、高级版、荣耀版,不同的版本都会显示云主机的基本配置,如屏幕分辨率、内存、CPU、安卓版本等信息。这里我们为了测试,先购买了试用 1 天的荣耀版套餐。
管理云手机
支付之后我们便可以看到控制台就出现了一部云手机,呈现了手机的屏幕状态,同时在菜单栏中还有很多配置,如应用管理、云机同步、实时直播等功能,如图所示:
我们可以点击该云主机打卡其控制面板,如图所示。
这里我们可以对手机屏幕做任何的控制操作,如点击打卡某个 App、滑动下拉查看通知栏等,和平常我们用的手机操作基本一致。另外在右侧栏还有一系列基本控制,如音量控制、回到首页、返回等等。
接下来我们想尝试在云手机上装一个 App,在此之前,我们需要对云手机进行分组操作,这里我们直接在控制面板进行操作即可,如图所示。
分区完成之后,我们就可以点击“应用安装/卸载”按钮来安装一个应用了。
这里我们首先下载下我们需要测试的应用,从 https://app5.scrape.center 下载即可,保存为 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 就自动启动然后执行了数据爬取操作,运行界面如图所示:
其最终运行效果就是爬虫控制手机点击了一个个电影条目信息并爬取到了每部电影的详情信息,最后将信息保存了下来。
总结
以上我们了解了云手机的申请和使用方法,云手机和正常的真机没有太大差别,甚至还在真机的基础上提供了增值服务,这在一定程度上为我们的开发、数据爬取提供了一定的便利。
End
「进击的Coder」专属学习群已正式成立,搜索「CQCcqc4」添加崔庆才的个人微信或者扫描下方二维码拉您入群交流学习。
看完记得关注@进击的Coder
及时收看更多好文
↓↓↓
崔庆才的「进击的Coder」知识星球已正式成立,感兴趣的可以查看《我创办了一个知识星球》了解更多内容,欢迎您的加入:
好文和朋友一起看~
上一篇: 关闭网易云音乐 iOS 手机版的暗色模式
下一篇: iOS 云手机 iOS 云手机下载
推荐阅读
-
您使用过这些有趣的 API 吗?
-
您使用过云电话吗?
-
什么是云电话?有免费的云电话吗?
-
iCloud 切换区域,中国区保留 appStore(更新)--自 2018 年 2 月 28 日起,中国区 iCloud 由云上贵州管理 苹果公司发布的公告 https://support.apple.com/zh-cn/HT208352 关键词 关键部分 受影响的 iCloud 账户:国家或地区设置为 "中国 "的 Apple ID。 iCloud 包含的服务照片、邮件、通讯录、日历、提醒事项、备忘、书签、钱包、钥匙串、云备份、云驱动器、应用程序数据 新条款和条件: 同意仅出于本协议允许的目的并在中国法律允许的范围内使用服务。 云桂洲在提供服务时应使用合理的技能并尽职尽责,但在适用法律允许的最大范围内,我们不保证或担保您通过本服务存储或访问的任何内容不会意外损坏、崩溃、丢失或根据本协议的条款被删除,如果发生此类损坏、崩溃、丢失或删除,我们不承担任何责任。您应自行负责维护您的信息和数据的适当备份。 Apple 和云上贵州有权访问您存储在服务中的所有数据,包括有权根据适用法律相互之间共享、交换和披露所有用户数据(包括内容)。 本协议的解释、效力和履行应适用*法律。对于因本协议引起的或与本协议有关的任何争议,云桂洲和您同意提交中国国际经济贸易仲裁委员会(CIETAC)根据提交仲裁时有效的法律在北京进行具有约束力的仲裁。 由云桂洲管理,用户选择: 停用; ID 到地区; 受 iCloud(由云桂洲运营)条款和条件约束 首先,我想说说我对数据安全的看法。 当我在朋友圈发布通知时,有些朋友回复说国外的操作并没有多安全,或者国外的安全只是相对于国外而言的等等。首先,我非常感谢这些朋友,这让我反思什么是数据安全。以下观点均属个人观点: 国外的月亮一定比国内圆? 这是一个根深蒂固的问题,只要有人说国外的东西比国内好,就会有人嘲笑崇洋媚外。我觉得我们在某些方面应该向国外学习,比如搜索引擎和版权问题。打开百度搜索 "数据安全",第一行肯定是广告。打开谷歌搜索 "数据安全",第一条就是 "数据安全_百度百科" .....各种版权问题大家都明白,支持正版,但不仅客户一心想找免费破解,就连作者也往往没有保护自己劳动成果或产品的想法。但从另一个层面来说,国内的发展和安全,甩国外几条街。没有说哪里好,哪里不好,辩证地去学习更好。 国外也有别有用心的数据泄露,谈何安全? 从加密解密的角度看,自古以来就没有绝对安全的加密,只有相对安全的做法。苹果的棱镜门、微软的 cpu 漏洞,各种参差不齐的被破解案例 ....是的,这的确是一个很好的论据,但凡事都不能只看一面,当年苹果面对FBI破解手机的要求,几经论证,苹果还是拒绝破解。这点拿到国内,只要上面的文件传达下去,还有企业敢说不吗?还敢说不吗? 关于这次iCloud数据迁移个人看法? 把数据迁移到贵州的云端,相当于把手机的所有数据都存储在贵州的云端服务器上。也许访问数据的速度会快很多,但我会把我的iCloud区放到美国,因为我不想数据存在云上贵州后经常接到莫名其妙的电话或短信,更不想因为乱用国外服务器而被请去喝茶。iCloud一个ID,即从中国账号转到美国区,主要用于数据存在美国服务器上。appStore一个ID,除了注册一个中国ID外,专门用来下载应用用,因为国外ID不支持酷狗和网易云等应用。麻烦的是,用了新的 appStore ID 后,当前的应用还得重新下载安装,因为旧的应用 ID 与新的应用 ID 不兼容,安装不了。最后,iCloud迁移后,国内用户使用美国服务器,估计要 "扶墙 "了。 专业步骤: 首先,进行appleID设置,这是前提条件,否则无法选择转移区域! 取消 appleID 的双重认证 取消家庭共享选项 二、窗口下载并安装 icloud 3.0 版
-
什么是华为云计算机系统,您了解什么是华为云计算机吗?
-
趣谈留言队列,搞清楚留言队列到底是什么!-说到消息队列,洪觉大概能猜到人们听到消息队列的反应,大致可以分为以下几类人。 第一类人,懵懵懂懂,刚上大学接触编程,还没用过消息队列,甚至还以为消息队列就是代码里面要新建一个List之类的;第二类人,听过消息队列,了解消息队列,但具体是什么还不是太明白,只知道一说到消息队列,脑海里马上出现了三组词,削峰、异步、解耦;第三类人,用过消息队列,对它有一定了解,但不知道为什么要这样设计,消息队列有什么样的前世今生,是如何演化到现在的模式的?**第四类人,已经对消息队列有了足够的了解,可以阅读本帖作为复习和温习。**你属于哪一类?无论你对消息队列了解多少,读完这篇文章后,我相信你都会有所收获。 什么是消息队列?我们为什么要使用消息队列?真的只是因为它看起来很勉强、很常用吗?当然不是,一项技术的出现往往是为了解决某种痛点,我们就从这个痛点出发,看看消息队列到底是为了解决什么问题而诞生的。 相信大家在工作之前,或者工作中接触单片机的次数会多一点,不管什么业务都一股脑塞进一个系统里,这种情况下接触消息队列的场景会比较少。但随着业务的增长,量上去了,单机系统就很难维护了,也扛不住并发量的增长,就需要把原来的单体应用拆分成多个服务。例如,牛奇网采用分布式架构,将原来的单体系统拆分成用户服务、题库服务、求职服务、论坛服务等,每个分布式节点都有一个集群,保证高可用性。 那虽然在这样的微服务架构下,如果某个核心业务并发量过大,系统就扛不住了。比如淘宝、淘票票、拼多多、京东等电商场景中的支付场景,你在某宝下单并支付后,调用支付服务,完成支付后,还需要更新订单的状态,这个时候就需要调用订单服务,那我们平时也下单,除了简单完成这些操作外,还会给你相应的积分;商家也会收到订单消息,并给您发送旺旺消息,确认订单无误;同时,也会给您发送消息,确认订单无误。确认订单无误;同时您还可以查看您的物流状态;还有系统为了给您推荐更适合您的商品,会根据您的订单做类似的推荐等等,我说的这些都是当我们下单后,肉眼可以感知到系统所做的动作。 **一个支付动作如果还需要调用那么多服务,等他们响应成功,最后再告诉用户你支付成功了,用户在系统中的整个体验会非常糟糕。**设想一下,假设请求服务+处理请求+响应总共需要 50ms,我们上面列出的场景:支付服务、订单服务、积分服务、商家服务、物流服务、推荐服务,总共需要 300ms。
-
北斗系统如此强大,您使用过北斗系统吗?我告诉你,试一试吧。
-
在您使用过Vue的服务器端渲染(SSR)吗?让我们探讨一下SSR。