python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

昨天小帅b看到一些事情不顺眼

有人偷换概念

忍不住就写了一篇反讽 996 的

看不下去了,我支持996,年轻人就该996!

没想到有些人看不懂

这就算了

还来骂我

早些时候关注我的小伙伴应该知道我第一时间就发过反对 996 的文章

去他妈的996!

python之父就是牛逼

哎~

不过也好

洗掉一些无脑粉丝

“你个假粉丝,小帅b不是蔡徐坤”

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

好了

进入正题

上次

小帅b跟你说了如何安装 Appium 的相关环境

以及让它自动打开了手机上的微信App

python爬虫23 | 手机,这次要让你上来自己动了。这就是 Appium+Python 的牛x之处

相信你已经跃跃欲试

想要来爬取一些手机上的 APP 数据了

那么这次

小帅b就带你爬取微信朋友圈的数据

接下来就是

学习 python 的正确姿势

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

友情提醒

本篇需要你先安装好 Appium 相关环境才可以哟,如果你还没安装的话快点出门左转,安装完之后再来这里玩耍。

ok

首先我们要知道微信这个 apk 的包名和启动页的 Activity

将你的 Android 鸡连接到电脑

在终端输入 adb devices 确保你已经将你的鸡连接到电脑

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

如果像上面这样出现设备名称就说明你连接上你的电脑了

如果你插进电脑之后还没发现有任何设备名称显示

那就记得打开 USB 调试,多拔插几次,总会连上的,这是过来人经验

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

接着

在你的手机里面打开微信

然后打开你的终端输入

adb shell

然后输入

dumpsys activity | grep mFocusedActivity

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

这时候我们就获取到微信的包名和启动页面的名称了

我们还要知道我们的手机是什么版本的

输入以下命令获取

adb shell getprop ro.build.version.release

那么现在我们就知道了这些必要的信息了

   desired_caps = {}
   desired_caps['platformName'] = 'Android'
   desired_caps['platformVersion'] = '5.1'
   desired_caps['deviceName'] = '88CKBM622PAM'
   desired_caps['appPackage'] = 'com.tencent.mm'
   desired_caps['appActivity'] = '.ui.LauncherUI'

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

接下来

主要思路就是

自动开启微信

模拟登录微信

找到小帅b的朋友圈

把朋友圈的数据抓下来

 

想要模拟登录

我们就需要获取到微信的登录按钮这个元素

如何获取呢?

在你安装好的 sdkmanager 的 tool 目录下

有一个叫做 uiautomatorviewer 的工具

windows用户直接双击打开

ubuntu的话可以进入相应的目录

用命令 ./uiautomatorviewer 行打开

~/android/tools/bin

nbsp;./uiautomatorviewer 

打开之后是这个鸟样

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

我们点击菜单栏的第二个图标按钮

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

 

这时候你就会发现

手机的屏幕被抓过来了

用鼠标点一下登录按钮你会看到

相应的资源信息都被定位到了

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

 

那么要让它自动点击登录按钮就简单了

# 获取到登录按钮后点击
 login_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/e4g")))
 login_btn.click()

点击登录之后页面是这样的

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

我们要切换到用邮箱登录

还是老样子

我们获取到按钮,然后让它点击

 # 获取使用微信号登录按钮
  change_login_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/cou")))
  change_login_btn.click()

那么接下来就输入账号密码了

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

获取到账号和密码的 EditText 和 登录按钮

然后自动输入账号密码

最后点一下登录

 # 获取输入账号元素并输入
 account = self.wait.until(EC.presence_of_element_located((By.XPATH, '//*[@resource-id="com.tencent.mm:id/cos"]/android.widget.EditText')))
 account.send_keys("你的微信账号")
 # 获取密码元素并输入
 password = self.wait.until(EC.presence_of_element_located((By.XPATH,  '//*[@resource-id="com.tencent.mm:id/cot"]/android.widget.EditText')))
 password.send_keys("你的微信密码")
 # 登录
 login = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/cov")))
 login.click()

登录之后会弹出一个界面

你愿意把你的通讯录授权给我吗?

呵呵

no!

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

# 点击去掉通讯录提示框
no_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/az9")))
no_btn.click()

这样

我们就成功登入微信了

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

接下来找到小帅b的微信

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

需要点击上方的搜索按钮

 # 获取到搜索按钮后点击
 search_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/iq")))
 search_btn.click()

这时候会出现输入框

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

搜索小帅b本b

# 获取搜索框并输入
search_input = self.wait.until(EC.presence_of_element_located((By.ID, "com.tencent.mm:id/kh")))
search_input.send_keys("wistbean")

这时候会出现一个 item

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

没错

点击头像进去

# 点击头像进入
 xiaoshuaib_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/py")))
 xiaoshuaib_btn.click()

接下来几步都是一个道理

主要是进入小帅b的朋友圈

# 点击右上角...进入
menu_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/jy")))
menu_btn.click()
# 再点击头像
icon_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/e0c")))
icon_btn.click()
# 点击朋友圈
moment_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/d86")))
moment_btn.click()

就这样点进去

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

进入朋友圈之后

我们来分析一下

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

可以看到小帅b的朋友圈是这样的

我们需要滑动获取到更多内容

可以使用 Appium 的 swipe 方法

再来

我们需要循环获取到数据

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

可以看到每条朋友圈都被封装到 ListView 这个容器里面

所以我们要从这里面获取所有数据

然后再进行遍历

那么每一个具体的条目呢?

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

可以看到

数据被放在了 LinearLayout 的具体容器里面了

所以我们可以根据 id 获取相应的内容

 # 获取 FrameLayout
 items = self.wait.until(EC.presence_of_all_elements_located((By.ID, 'com.tencent.mm:id/eew')))
 # 滑动
 self.driver.swipe(self.start_x, self.start_y, self.end_x, self.end_y, 2000)
 #遍历获取
 for item in items:
     moment_text = item.find_element_by_id('com.tencent.mm:id/kt').text
     day_text = item.find_element_by_id('com.tencent.mm:id/eke').text
     month_text = item.find_element_by_id('com.tencent.mm:id/ekf').text
     print('抓取到小帅b朋友圈数据: %s' % moment_text)
     print('抓取到小帅b发布时间: %s月%s' % (month_text, day_text))

至此

我们的代码写完了

来运行一下吧

首先打开 Appium

[Appium] Welcome to Appium v1.12.1[Appium] Appium REST http interface listener started on 0.0.0.0:4723

接着运行爬取朋友圈的代码

截取部分结果

微信启动...
登录成功...
搜索小帅b...
进入朋友圈...
抓取到小帅b朋友圈数据: 那天马云说:我从来没碰过钱,我对钱没兴趣。

最近马云说:能 996 是一种福气,我每天都 1212。

果然,有钱爸爸说话就是好听。
抓取到小帅b发布时间: 4月月12
抓取到小帅b朋友圈数据: 有本事双击我头像
抓取到小帅b发布时间: 4月月10
抓取到小帅b朋友圈数据: 刚点了外卖,小哥有点超时才送到。我倒不觉得有什么,可是小哥将餐物双手递给我后接下来的动作让我惊讶到了:

他对我深深地鞠了一躬……?
抓取到小帅b发布时间: 4月月01
抓取到小帅b朋友圈数据: 有人抱怨现在的互联网产品太霸道,微信不能打开淘宝链接,头条不能放微信二维码,百度搜不到知乎高质量问题……
但其实出门看一下,好像也没有哪家麦当劳可以直接开在肯德基里面卖全家桶的。抓取到小帅b发布时间: 3月月29
抓取到小帅b朋友圈数据: 有人抱怨现在的互联网产品太霸道,微信不能打开淘宝链接,头条不能放微信二维码,百度搜不到知乎高质量问题……
但其实出门看一下,好像也没有哪家麦当劳可以直接开在肯德基里面卖全家桶的。
抓取到小帅b发布时间: 3月月28
抓取到小帅b朋友圈数据: 这两天听到最多的一句话就是:帅b老仙,法力无边。

ok

拿到数据还可以进一步存储

小帅b就不说了

因为从下一篇开始

小帅b会说说爬取下来的数据存储相关的

这一篇

主要让你知道如何爬取 app 的数据

如果你想去抓包爬取朋友圈的数据

是很难的

微信做了限制

所以用 Appium 相对来说就简单好多啦

本篇涉及到的源代码一样放在了公众号

在后台发送 「朋友圈」获取

下次见

peace

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

帅b老仙

法力无边

 

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

相关文章

1、对于b站这样的滑动验证码,不好意思,照样自动识别

2、手机,这次要让你上来自己动了。这就是 Appium+Python 的牛x之处

3、上来,自己动 !这就是 selenium 的牛逼之处

右下角

发功+1

原文始发于微信公众号(学习python的正确姿势):python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

发表回复