一、解析过程

本人使用锤子手机做测试,型号是YQ601,首先打开开发者模式确保手机能与mac相连,打开Appium客户端,配置参数如图

可以理解为Appuim继承自web端的selenium,同样可以执行一些自动化操作。Appium自带了一个XPATH选择器,给用户提供了选择结果,如图

这个选择器给出的结果太繁琐,所以可以改成通过查找ID的方式来构造爬虫程序。但是这里要注意,估计微信提升了自己的反爬能力,在测试时发现,每次重新连接手机,对应特定节点的ID都会发生变化,保险起见,每次重新连接手机,都要对节点ID作更新。

这里把程序分为三部分:(1)模拟登陆(2)进入朋友圈(3)抓取动态(4)存入数据库

二、代码

import os
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from pymongo import MongoClient
from time import sleep
from processor import Processor
from config import *class Moments():def __init__(self):"""初始化"""# 驱动配置self.desired_caps = {'platformName': PLATFORM,'deviceName': DEVICE_NAME,'appPackage': APP_PACKAGE,'appActivity': APP_ACTIVITY}self.driver = webdriver.Remote(DRIVER_SERVER, self.desired_caps)self.wait = WebDriverWait(self.driver, TIMEOUT)self.client = MongoClient(MONGO_URL)self.db = self.client[MONGO_DB]self.collection = self.db[MONGO_COLLECTION]# 处理器self.processor = Processor()def login(self):"""登录微信:return:"""# 登录按钮login = self.wait.until(EC.presence_of_element_located((By.ID, 'com.tencent.mm:id/d75')))login.click()# 手机输入phone = self.wait.until(EC.presence_of_element_located((By.ID, 'com.tencent.mm:id/hz')))phone.set_text(USERNAME)# 下一步next = self.wait.until(EC.element_to_be_clickable((By.ID, 'com.tencent.mm:id/alr')))next.click()# 密码password = self.wait.until(EC.presence_of_element_located((By.XPATH, '//*[@resource-id="com.tencent.mm:id/hz"][1]')))password.set_text(PASSWORD)# 提交submit = self.wait.until(EC.element_to_be_clickable((By.ID, 'com.tencent.mm:id/alr')))submit.click()# 是否查看通讯录yesORnot = self.wait.until(EC.element_to_be_clickable((By.ID, 'com.tencent.mm:id/an2')))yesORnot.click()def enter(self):"""进入朋友圈:return:"""# 选项卡tab = self.wait.until(EC.presence_of_element_located((By.XPATH, '//*[@resource-id="com.tencent.mm:id/b0w"][3]')))tab.click()# 朋友圈moments = self.wait.until(EC.presence_of_element_located((By.ID, 'com.tencent.mm:id/a7f')))moments.click()def crawl(self):"""爬取:return:"""while True:# 当前页面显示的所有状态items = self.wait.until(EC.presence_of_all_elements_located((By.XPATH, '//*[@resource-id="com.tencent.mm:id/d58"]//android.widget.FrameLayout')))# 上滑self.driver.swipe(FLICK_START_X, FLICK_START_Y + FLICK_DISTANCE, FLICK_START_X, FLICK_START_Y)# 遍历每条状态for item in items:try:# 昵称nickname = item.find_element_by_id('com.tencent.mm:id/as6').get_attribute('text')# 正文content = item.find_element_by_id('com.tencent.mm:id/ib').get_attribute('text')# 日期date = item.find_element_by_id('com.tencent.mm:id/dfw').get_attribute('text')# 处理日期date = self.processor.date(date)print(nickname, content, date)data = {'nickname': nickname,'content': content,'date': date,}# 插入MongoDBself.collection.update({'nickname': nickname, 'content': content}, {'$set': data}, True)sleep(SCROLL_SLEEP_TIME)except NoSuchElementException:passdef main(self):"""入口:return:"""# 登录self.login()# 进入朋友圈self.enter()# 爬取self.crawl()if __name__ == '__main__':moments = Moments()moments.main()
import time
import reclass Processor():def date(self, datetime):"""处理时间,转化成发布时间的时间戳:param datetime: 原始时间:return: 处理后时间"""if re.match('\d+分钟前', datetime):minute = re.match('(\d+)', datetime).group(1)datetime = time.strftime('%Y-%m-%d', time.localtime(time.time() - float(minute) * 60))if re.match('\d+小时前', datetime):hour = re.match('(\d+)', datetime).group(1)datetime = time.strftime('%Y-%m-%d', time.localtime(time.time() - float(hour) * 60 * 60))if re.match('昨天', datetime):datetime = time.strftime('%Y-%m-%d', time.localtime(time.time() - 24 * 60 * 60))if re.match('\d+天前', datetime):day = re.match('(\d+)', datetime).group(1)datetime = time.strftime('%Y-%m-%d', time.localtime(time.time()) - float(day) * 24 * 60 * 60)return datetime

NO.15——使用Appium自动化测试爬取微信朋友圈数据相关推荐

  1. Python爬虫爬取微信朋友圈的方法,感兴趣的朋友可以了解下

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 小雨 | 作者 python教程 | 来源 接下来,我们将实现微信朋友圈的 ...

  2. Python爬虫爬取微信朋友圈

    更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接: 高州阳光论坛https://www.hnthzk.com/ 人人影视http://www.op-kg.com/ ...

  3. Python爬虫实战项目案例——爬取微信朋友圈

    项目实战   Appium爬取微信朋友圈   自动化爬取App数据 基于移动端的自动化测试工具Appium的自动化爬取程序. 步骤 1.JDK - Download JDK,Appium要求用户必须配 ...

  4. python抓取朋友圈动态_如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)...

    原标题:如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下) 前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往 ...

  5. Python爬取微信朋友圈 ! 让屏蔽你的女神无处可躲 ?

    接下来,我们将实现微信朋友圈的爬取. 如果直接用 Charles 或 mitmproxy 来监听微信朋友圈的接口数据,这是无法实现爬取的,因为数据都是被加密的.而 Appium 不同,Appium 作 ...

  6. 如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

    前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...

  7. python朋友圈动态_如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

    前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...

  8. appium爬取微信朋友圈 安卓模拟器版

    环境: 安卓7,夜神模拟器,微信7.0.7 代码: import os import time from appium import webdriver from appium.webdriver.c ...

  9. 使用Appinum爬取微信朋友圈

    文章目录 环境配置 安装Android SDK 安装Appium Server 安装Python Appium Client 爬取过程 使用Appium打开微信 问题及解决 使用uiautomator ...

最新文章

  1. 方法的重载与重写_java基础知识之重载和重写
  2. 【VS开发】【编程开发】【C/C++开发】结构体中的数组与指针的内存分配情况说明...
  3. 你必须具有权限才能读取此对象_win10中随心所欲设置文件/文件夹访问权限,可以轻松做到,并不难...
  4. java.lang包【Object类】
  5. TAR命令参数详解[转]
  6. 关于android 自定义TitleBar 会遇到的问题
  7. Maven仓库理解、如何引入本地包、Maven多种方式打可执行jar包
  8. MSHFlexGrid控件
  9. Java实现求二叉树的路径和
  10. 第1章 神经网络的思想
  11. tomcat是什么_为什么开发者放弃了Tomcat,选择了Undertow?
  12. cookie和session基础以及在Django中应用
  13. 深入理解Servlet原理
  14. 微信小程序 异步加载f2图表
  15. LCD1602液晶显示屏驱动文件
  16. python刷博客点击量
  17. 笔记本电脑拔掉电源屏幕会黑一下怎么办
  18. Windows键和Delete键不能用解决方法
  19. 为什么说python是世界上最好的语言-《权力的游戏》告诉你,为啥 Python 是世上最好的语言...
  20. 互联网审判中区块链存证技术的应用进路

热门文章

  1. [QT][问题]关于QT语言家使用失败的原因之一
  2. jupyter notebook 的 hinterland 插件 设置 代码提示但是默认不选中
  3. Error: keywords ‘java|openjdk version‘ not found in ‘picked up java_tool_options: -df‘
  4. 使用Java将阿拉伯数字转换为中文数字(适配小数转换)
  5. jsp 和 servlet 有什么区别?
  6. SuperMap iDesktop常见问题解答集锦(五)
  7. 前端学习-使用JS库Leaflet.js生成世界地图并获取标注地址经纬度。
  8. 周志明论架构之道:从SOA时代到微服务时代
  9. 职称计算机作弊后果,千万别轻忽考试作弊后果,别让它成为你学术生涯中最大的污点!...
  10. JavaSE基础知识(附上代码实现)1