手机屏幕用户点击划线区域热力图

  fiddler的使用      

HeatMap热力图的包

        基于用户误触误杀频次在新项目上变高。需要在抓取到用户的点击数据后生成点击图与热力图便于修改手机防误触防误杀算法

由于公司内网此处有些内容后期制作

一.数据获取

        在公司有内部手机产品体验用户的beta问题网站和问题打点网站,这里采用python爬虫的方式去爬取网站用户提交的inputlog作为原始数据

1.使用Fiddler抓包工具分析网站内容

        刚开始抓包只用了正常的session登录后发现无法正常抓取也没有重定向,然后使用selenium抓取发现速度跳转网页的速度太慢。 

通过Fiddler抓包清洗网站后发现网站登录后获取的session格式与后续响应的cookies格式不同
查看fiddler后发现多了一条参数通过中间用一个链接重新设置了cookies的一个参数,重新设置再次访问后就可得到正常的数据

2.抓取数据

        通过抓包工具分析后抓取数据,下面是抓取一个提交的问题log

import requests
import json


# 都不用,直接格式正确就ok,直接用session不行?
# 登录后获取的session格式与后续响应的cookies格式不同
# 查看fiddler后发现多了一条参数hwssot3  把字典获取下来后重新拼接

# https://xxxxx/login   post  登录url
#     登陆后会出现setcookie

# http://xxxxxx/2102292844  响应
#     响应对象['data']['downloadPath'] = 下载链接
#     响应对象['data']['fileName'] = 文件名

# 参数为session对象  用途:在登录url获取cookie格式的cookie
def getcookies(session):
    login_url = 'https://auth.hihonor.com/login1/rest/hwidcenter/login'

    formData = {
        # 'cid': "",
        # 'device': "36aff3e36780f2539de476e988127f6c",
        # 'lang': "zh_CN",
        'username': "xxxx",
        'password': "xxx",
        'targetUrl': "httpxxxxxxxx",
        'uid': "xxxxx"
    }

    login_headers = {
        'Accept': 'application/json, text/plain, */*',
        'Accept-Encoding': 'gzip, deflate, br',
        'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
        'Connection': 'keep-alive',
        'Content-Length': '240',
        'Content-Type': 'application/json; charset=UTF-8',
        'Host': 'xxxxxx.com',
        'Origin': 'https://xxxxxxx.com',
        # 'Referer': https://xxxxxx.com/login1/?redirect=http%3A%2F%2Fbetaclub.hihonor.com%2Fflight%2Fplatform%2F%23%2FdataCenter%2FquestionAll
        'sec-ch-ua': '" Not;A Brand";v="99", "Microsoft Edge";v="103", "Chromium";v="103"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': 'Windows',
        'Sec-Fetch-Dest': 'empty',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Site': 'same-origin',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.62'
    }

    session.post(url=login_url, data=json.dumps(formData), headers=login_headers)
    cookies_dict = requests.utils.dict_from_cookiejar(session.cookies)
    del cookies_dict['auth__sticky']
    del cookies_dict['auth_login1_sticky']
    del cookies_dict['JSESSIONID']
    cookies_dict['hwssot3'] = cookies_dict['hwssotinter3']
    # cookies = json.dumps(cookies_dict)
    # print(cookies)
    cookies_1 = ""
    for key in cookies_dict:
        cookies_1 = cookies_1 + key + '=' + cookies_dict[key] + ';'
    return cookies_1


#
# url_mudi =
# url1 = 

# response = session.get(url1,headers=headers)
# aaa = response.headers['Set-Cookie']
#
# print(type(aaa))
# print(aaa)
#
# print(aaa.split(',')[-1].split(';')[0])
# print(aaa.split(';')[0])
# cookies_dict['hwssot3'] = aaa.split(';')[0].split('=')[-1]

def downloadfile(cookie):
    url2 = 'http://xxxxxx.com/flight/operaserver/attach/getQuesAttachProcess/2102296088'

    # cookies_1 = ""
    # for key in cookies_dict:
    #     cookies_1 = cookies_1 + key + '=' +cookies_dict[key] + ';'
    headers = {
        'Accept': 'application/json, text/plain, */*',
        'Accept-Encoding': 'gzip, deflate',
        'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
        'Connection': 'keep-alive',
        'Cookie': cookies,
        'Host': 'xxxxxx.com',
        'Referer': 'http://xxxxxxx.com/flight/platform/',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36 Edg/103.0.1264.37'
    }

    response = session.get(url2, headers=headers)
    print(response.text)
    bbb = json.loads(response.text)
    response3 = session.get(bbb['data'][0]['downloadPath'], headers=headers)

    with open(bbb['data'][0]['fileName'], 'wb')as fp:
        fp.write(response3.content)
        fp.close()


session = requests.session()
cookies = getcookies(session)
downloadfile(cookies)

二.图像展示

        数据的压缩包获取后对压缩包进行解压后把关于点击划线动作的inputlog 坐标用数组的方式清晰出来用HeatMap画图

import os
import rarfile
import pandas as pd
from pyheatmap.heatmap import HeatMap

path = r'C:\Users\.\Downloads\adb1.0.32\adb/'



#解压该目录下所有文件
def dealfile(path):
    for filepath, dirnames, filenames in os.walk(path):
        for filename in filenames:
            print(filename)
            if '.rar' in filename:
                print(os.path.join(filepath, filename))
                rar = rarfile.RarFile(os.path.join(filepath, filename))
                # 解压缩到指定目录
                rar.extractall(path + filename.replace('.rar', ''))
                os.remove(os.path.join(filepath, filename))
                path = filepath + filename.replace('.rar', '')
                dealfile(path)

#处理log文件为数组
def dealfile2(log):
    read_csv = pd.read_csv(log)
    dian = []
    aa = 0
    for i in read_csv[read_csv.columns[0]]:
        if i.find("ABS_MT_POSITION_X") != -1 or i.find("ABS_MT_POSITION_Y") != -1:
            if i.find("ABS_MT_POSITION_X") != -1:
                dian.append([0,0])
                # print(dian)
                dian[aa][0] = int(i[71:79], 16)
                print("X", i[71:79], int(i[71:79], 16))
            if i.find("ABS_MT_POSITION_Y") != -1:
                dian[aa][1] = int(i[71:79], 16)
                print("Y", i[71:79], int(i[71:79], 16))
                aa = aa + 1
    return dian


shuju = []
dealfile(path)
for filepath, dirnames, filenames in os.walk(path):
    for filename in filenames:
        if '.log' in filename:
            for i in dealfile2(os.path.join(filepath, filename)):
                shuju.append(i)

hm = HeatMap(shuju)
hm.clickmap(save_as="hit100.png")
hm.heatmap(save_as="heat100.png",r=30)

结果如下。可以看到用户所点击的位置和热区

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
安卓屏幕划线工具app是一种可以在安卓手机屏幕上进行划线和标记的应用程序。这种工具可以方便地进行屏幕录制、教学演示、游戏直播等操作。 首先,安卓屏幕划线工具app可以通过在屏幕上绘制线条、箭头和标记等来直观地指导和引导用户。比如,在教学演示中,教师可以通过划线和标记来突出重点、引导学生注意,使教学内容更加生动和易于理解。而在游戏直播中,玩家可以利用划线工具来展示游戏技巧、指导玩法,与观众互动,提升游戏直播的观赏性。 其次,安卓屏幕划线工具app还可以进行屏幕录制和编辑。用户可以使用该工具在手机屏幕划线和标记,同时进行屏幕录制,将操作过程和注释完美结合在一起。录制完成后,用户还可以对录制视频进行剪辑和编辑,添加音频、字幕等元素,制作出专业水平的教程视频或游戏攻略。 此外,安卓屏幕划线工具app还可以具备屏幕功能,用户可以在屏幕划线并截保存,方便随时记录和分享。这对于用户在浏览网页时需要标注重点、收集参考资料等场景非常实用。 总的来说,安卓屏幕划线工具app是一种非常实用的应用程序,提供了方便快捷的屏幕划线和标记功能,使用户能够更加直观地指导、展示和记录操作过程。无论是教学、游戏还是工作中的演示,都能够发挥出重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值