- 本节先来初步尝试手机模拟操作,为之后爬取微信朋友圈的实战演练做铺垫。
4.2.1 用Android Studio 连接夜神模拟器
- 要操控手机App,得先连接到手机。前面安装的夜神模拟器就是用来模拟Android系统手机的,因此,先打开夜神模拟器,然后在如右图所示的搜索栏中搜索微信,并进行安装。
1.打开手机的开发者模式
- 对于Android 系统手机,还需要打开其开发者模式,之后才能进行模拟操作。单击设置–关于手机–连续单击“版本号”5次–,会使手机进行开发者模式。同时记住显示的版本号,4.2.2节中编写代码时会用到。
2.连接夜神模拟器
- 在命令行中输入并执行命令“adb connect 127.0.0.1:62001”,如果显示“connected to 127.0.0.1:62001”,便表示连接成功,如下图所示。如果第一次连接失败,可重复输入上述命令进行连接。如果一直连接失败,则注意检查4.1节的各软件是否安装正确。
- “adb connect 127.0.0.1:62001”中的adb 是 Android Studio中用来调试Android App 的应用程序,全称为Android Debug Bridge(Android 系统调试桥)。因为在4.1.4节配置好了Android Studio 的环境变量,所以在这里能直接调用adb。connect是“连接”的意思。
- 127.0.0.1:62001指要连接的夜神模拟器的地址,127.0.0.1是本机地址,62001是夜神模拟器的默认端口。如果打开了多个夜神模拟器,那么新打开的夜神模拟器的端口便不是62001。4.5 节会讲解如何多开夜神模拟器,并查看不同模拟器的端口。
3. 验证是否连接成功
- 在命令行窗口中输入并执行命令“adb devices”,如果显示“List of devices attached”(连接的设备列表)及相关地址,则表示连接成功,如下图所示。
4.用adb查看App信息
-
adb的操作有很多,不过在手机App爬虫中,我们只需要了解如何用它查看手机App信息(主要是包名和活动名)。在夜神模拟器中打开微信,单击“登录”按钮进入登录页面,建议先手动登录一遍,体验一下在计算机模拟App操作的效果,之后再次登录,进入微信就会看到如下图所示的页面。 -
然后在之前的命令行窗口中输入并执行命令 -
“dumpsys | grep mFocusedActivity ”,按enter键,结果如下图所示。 -
在命令的执行结果中,‘u0’后的“com.tencent.mm”是微信App的包名(对应之后要讲的Appium中的appPackage);“/”号后的“.plugin.account.ui.LoginPasswordUI”则是对应的活动名(对应之后要讲的Appium中的appActivity,注意不要遗漏开头的“.”号),即登录页面,一个App中不同页面(如登录页、找回密码页等)的活动名也会不同。
4.2.2 用Python连接微信App
- 获得了包名和活动名之后,注意不要关闭命令行窗口,因为需要通过tab保持Android Studio和夜神模拟器的连接。然后开始进行用Python连接手机App的操作。
- 打开Appium,然后单击界面右上角的开始按钮启动服务,可以看到该Appium的地址为127.0.0.1(本机地址),对应的端口为4723,如下图所示。后续会用到这两个参数。
- 然后就可以通过如下Python代码连接夜神模拟器了,连接成功的同时,会在夜神模拟器中自动安装一个名为Appium-Settings的App。
from appium import webdriver
desires_caps = {
'newCommandTimeout':3600,
'platformName':'Android',
'deviceName':'127.0.0.1:62001',
'platformVersion':'2.0.0',
'udid':'127.0.0.1:62001',
'appPackage':'com.tencent.mm',
'appActivity':'.plugin.account.ui.LoginPasswordUI'
}
browser = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desires_caps)
- 为了避免下面获取的是夜神首页的源代码而不是登录页面的源代码,我在jup运行网上述代码后,手动点击“微信”,进入微信登录页面后,在运行获取源代码的代码。
- 接着通过如下代码获取登录页面的源代码:
data = browser.page_source
data
- 运行上面代码时需要保持打开登录页面。如果遇到闪退,可以用time库的sleep()函数等待一段时间,手动打开登录页面,或者在jup中分区块运行代码。
- 打印输出的部分内容如下图所示,可以看到其中有“用短信验证码登录”和“登录”等字样,说明成功地获取了微信App登录页面的源代码。
|