前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者:小dull鸟

今天给大家分享一篇有趣的文章,灵感来自于前几天与室友的聊天,他告诉我抖音可以实时显示人的在线情况,如下图:

只需要进入抖音消息框,然后进入用户聊天窗口,就可以看到上述在线状态了。

然后我灵机一动,是不是用python可以实时监测一个人全天的在线情况?

说干就干,决定先拿我室友“开刀”

1.逻辑分析

俗话说,磨刀不误砍柴工,做任何事之前,都要先把逻辑分析清楚,要不然只会事倍功半。
起初本来想用手机模拟器来操作,但是不幸的是手机模拟器不显示在线状态,没办法,只能把自己的心爱的手机贡献出来了。

首先用appium客户端打开抖音(关于appium的安装和使用,请参考之前的文章),配置如图:

点击start session:

点击“消息”元素:

再点击进入聊天窗口:

显示在线状态元素的id为:

com.ss.android.ugc.aweme:id/blc

那么,我们只需要在当前页面一直请求获取该元素的值就可以获取该好友的在线状态了,如果返回“在线”,则判该用户在线;否则,判为不在线。

2.Python代码撸起来

1.appium模块操控打开抖音

desired_caps = {
"platformName": "Android",
"deviceName": "MHA_AL00",
"appPackage": "com.ss.android.ugc.aweme",
"appActivity": ".main.MainActivity",
"noReset": "true",
"fullReset": "false"
}
server = 'http://localhost:4723/wd/hub'
driver = webdriver.Remote(server, desired_caps)

2.依次点击进入消息列表、用户聊天窗

driver.find_element_by_xpath('//android.widget.TextView[contains(@text,"消息")]').click()
time.sleep(1)
driver.find_element_by_xpath('//android.widget.TextView[contains(@text,"女神的昵称")]').click()

3.获取在线状态和时间并保存

while True:
status=driver.find_element_by_id('com.ss.android.ugc.aweme:id/blc').text
strtime = time.strftime("%H:%M:%S", time.localtime(time.time()))
if status=='在线':
status='在线'
else:
status='不在线'
wb = xlrd.open_workbook('1.xls')
tabsheet = wb.sheets()[0]
k = tabsheet.nrows #表格已有的行数
worksheet.write(k , 0, i['name']) # 酒店名字
worksheet.write(k , 1, i['addr']) # 酒店地址
time.sleep(60)

4.根据在线状态画出折线图

df = pd.read_excel('1.xls', encoding='gbk', usecols=['时间', '状态'])
line = Line("折线图")
line.add("在线状态", df['时间'], df['状态'], xaxis_rotate=45)
line.render('折线图.html')

根据当代“恶臭”青年的生活习惯,睡前醒后十有八九是在刷抖音,所以可以推断出,室友今天是在9点20分左右醒的、23点左右睡的,看起来作息还是比较规律的。

最新文章

  1. shell (check return of each line)and sudoer
  2. Node.js Express 框架
  3. acm数学(转)
  4. javascript中bind函数的作用
  5. 如何修改 EM12c 中 SYSMAN 用户的密码?
  6. struts2拦截器与过滤器
  7. Linux 下增大tomcat内存
  8. python dict{}和set([])
  9. 运行在TQ2440开发板上以及X86平台上的linux内核编译
  10. linux上发布网站遇到的问题
  11. 使用mescroll来实现移动端页面上拉刷新, 下拉加载更多功能
  12. [八]JavaIO之FileInputStream 与 FileOutputStream
  13. c++ std 最小堆的使用 (用于实现top100之类的功能)
  14. tomcat优化,java查看
  15. java awt 中文乱码 显示为 方块
  16. 官方Canvas API文档
  17. Java变成思想总结
  18. 关于元素设置margin-top能够改变body位置的原因及解决(子元素设置margin-top改变父元素定位)
  19. ThinkPHP 5 insertall 只插入最后一条数据的问题
  20. EF code first:列名 'Discriminator' 无效

热门文章

  1. [Unity2d系列教程] 001.引用外部DLL - C#
  2. 微信小程序入门与实战(最新完整版)教程
  3. 抽象类(abstract class)与抽象方法
  4. 一、React初体验之NodeJS环境搭建
  5. idea本地Maven仓库不能下载依赖jar包的解决方案
  6. Maven_setting文件/解释
  7. JAVASE(十三) 异常处理
  8. Java实现 蓝桥杯 算法训练 寻找数组中最大值
  9. Java实现 LeetCode 415 字符串相加
  10. Java实现 LeetCode 207 课程表