今天给大家分享一篇有趣的文章,灵感来自于前几天与室友的聊天,他告诉我抖音可以实时显示人的在线情况,如下图:
只需要进入抖音消息框,然后进入用户聊天窗口,就可以看到上述在线状态了。
然后我灵机一动,是不是用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点左右睡的,看起来作息还是比较规律的。
总结