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

有人偷换概念

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

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

没想到有些人看不懂

这就算了

还来骂我

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

去他妈的996!

python之父就是牛逼

哎~

不过也好

洗掉一些无脑假粉丝

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

好了

进入正题

上次

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

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

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

相信你已经跃跃欲试

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

那么这次

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

接下来就是

学习 python 的正确姿势

友情提醒

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

ok

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

将你的 Android 鸡连接到电脑

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

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

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

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

接着

在你的手机里面打开微信

然后打开你的终端输入

adb shell

然后输入

dumpsys activity | grep mFocusedActivity

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

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

输入以下命令获取

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'

接下来

主要思路就是

自动开启微信

模拟登录微信

找到小帅b的朋友圈

把朋友圈的数据抓下来

想要模拟登录

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

如何获取呢?

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

有一个叫做 uiautomatorviewer 的工具

windows用户直接双击打开

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

用命令 ./uiautomatorviewer 行打开

~/android/tools/bin$ ./uiautomatorviewer 

打开之后是这个鸟样

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

这时候你就会发现

手机的屏幕被抓过来了

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

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

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

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

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

我们要切换到用邮箱登录

还是老样子

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

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

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

获取到账号和密码的 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!

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

这样

我们就成功登入微信了

接下来找到小帅b的微信

需要点击上方的搜索按钮

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

这时候会出现输入框

搜索小帅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

没错

点击头像进去

# 点击头像进入 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()

就这样点进去

进入朋友圈之后

我们来分析一下

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

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

可以使用 Appium 的 swipe 方法

再来

我们需要循环获取到数据

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

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

然后再进行遍历

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

可以看到

数据被放在了 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朋友圈数据: 刚点了外卖,小哥有点超时才送到。我倒不觉得有什么,可是小哥将餐物双手递给我后接下来的动作让我惊讶到了:
他对我深深地鞠了一躬……

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。的更多相关文章

  1. Python爬虫入门教程:豆瓣Top电影爬取

        基本开发环境 Python 3.6 Pycharm 相关模块的使用 requests parsel csv 安装Python并添加到环境变量,pip安装需要的相关模块即可. 爬虫基本思路 一. ...

  2. Python爬虫入门教程 2-100 妹子图网站爬取

    妹子图网站爬取---前言 从今天开始就要撸起袖子,直接写Python爬虫了,学习语言最好的办法就是有目的的进行,所以,接下来我将用10+篇的博客,写爬图片这一件事情.希望可以做好. 为了写好爬虫,我们 ...

  3. python爬虫11 | 这次,将带你爬取b站上的NBA形象大使蔡徐坤和他的球友们

    在上一篇中 python爬虫10 | 网站维护人员:真的求求你们了,不要再来爬取了!! 小帅b给大家透露了我们这篇要说的牛逼利器 selenium + phantomjs 如果你看了 python爬虫 ...

  4. Python爬虫:用BeautifulSoup进行NBA数据爬取

    爬虫主要就是要过滤掉网页中没用的信息.抓取网页中实用的信息 一般的爬虫架构为: 在python爬虫之前先要对网页的结构知识有一定的了解.如网页的标签,网页的语言等知识,推荐去W3School: W3s ...

  5. python爬虫实战(六)--------新浪微博(爬取微博帐号所发内容,不爬取历史内容)

    相关代码已经修改调试成功----2017-4-13 详情代码请移步我的github:https://github.com/pujinxiao/sina_spider 一.说明 1.目标网址:新浪微博 ...

  6. Python爬虫与一汽项目【二】爬取中国东方电气集中采购平台

    网站地址:https://srm.dongfang.com/bid_detail.screen 东方电气采购的页面看似很友好,实际上并不好爬取 在观察网页的审查元素之后发现,1处的网页响应只是单纯的一 ...

  7. Python爬虫与一汽项目【一】爬取中海油,邮政,国家电网问题总结

    项目介绍 中国海洋石油是爬取的第一个企业,之后依次爬取了,国家电网,中国邮政,这三家公司的源码并没有多大难度, 采购信息地址: 国家电网电子商务平台 http://ecp.sgcc.com.cn/pr ...

  8. python爬虫学习(三):使用re库爬取"淘宝商品",并把结果写进txt文件

    第二个例子是使用requests库+re库爬取淘宝搜索商品页面的商品信息 (1)分析网页源码 打开淘宝,输入关键字“python”,然后搜索,显示如下搜索结果 从url连接中可以得到搜索商品的关键字是 ...

  9. PYTHON 爬虫笔记九:利用Ajax+正则表达式+BeautifulSoup爬取今日头条街拍图集(实战项目二)

    利用Ajax+正则表达式+BeautifulSoup爬取今日头条街拍图集 目标站点分析 今日头条这类的网站制作,从数据形式,CSS样式都是通过数据接口的样式来决定的,所以它的抓取方法和其他网页的抓取方 ...

随机推荐

  1. 逻辑频道号---DVB NIT LCN

    先介绍NIT,NIT描述如下: 有一点要注意,NIT是对大网的描述,即NIT并不是描述当前的流,而是描述大网的某些或者全部流.如下图,TS流描述1-6共对6个频点不同的TS流进行了描述,具体对哪一个流 ...

  2. 通过CSS控制页面中的内容垂直居中的方法

    方法一:通过行高(line-height)定位 line-height通常是用于调节一段文字的行与行之间的距离,或者说两行文字之间的距离,如果行高是500px,那么每一行中的文字距离本行的顶部就是25 ...

  3. Linux进入单用户模式的两种方法

    单用户模式的作用 在使用Linux系统中,维护人员经常会碰到一个问题,就是在拥有root账号权限和密码的用户中,总是会出现忘记root密码的情况. 遇到这种情况,一般情况下,维护人员就会通过最常用的方 ...

  4. (DP)51NOD 1118 机器人走方格

    M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果. Input 第1行,2个数M,N,中间用空格隔开.( ...

  5. PowerDesigner 的使用教程

    PowerDesigner 的使用这两篇博客挺好,我也是跟着学习,就不再写了: 初步学习: http://www.cnblogs.com/huangcong/archive/2010/06/14/17 ...

  6. 流式套接字(SOCK_STREAM),数据报套接字 (SOCK_DGRAM) 的比较

    1.流式套接字 使用这种套接字时,数据在客户端是顺序发送的,并且到达的顺序是一致的.比如你在客户端先发送1,再发送2,那么在服务器端的接收顺序是先接收到1,再接收到2,流式套接字是可靠的,是面向连接的 ...

  7. [译]libcurl错误码

    CURLcode Almost all "easy" interface functions return a CURLcode error code. No matter wha ...

  8. CircuitBreaker design pattern---reference

    It's common for software systems to make remote calls to software running in different processes, pr ...

  9. C#基础 结构体 枚举类型

    结构体:就是一个自定义的集合,里面可以放各种类型的元素,用法大体跟集合一样. 一.定义的例子: struct student { public int nianling; public int fen ...

  10. Echarts和Quartz简介

    一.Echarts ​ ECharts 是由百度前端团队开发的一款开源的基于 js 图形报表组件,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大 ...