谁偷偷删了你的微信?用Python分分钟揪出来( 三 )

需要注意的是,数据库中 rcontact 表的数据比较杂乱,除了正常的好友数据,黑名单好友、已删除好友、公众号、微信群等数据也包含在内,需要我们通过 type 和 verifyFlag 字段进行筛选 。

谁偷偷删了你的微信?用Python分分钟揪出来

文章插图
 
为了便于 Python 操作,最后将查询的好友数据写入到 csv 文件中 。
/*** * 写入数据到csv中 * @param output_path * @param contacts */public static void writeCsvFile(String output_path, List<Contact> contacts){    try    {        File file = new File(output_path);        //删除之前保存的文件        if (file.exists())        {             file.delete();        }        BufferedWriter bw = new BufferedWriter(new FileWriter(file, true));        // 添加头部名称        bw.write("userName" + "," + "alias" + "," + "nickName");        bw.newLine();        for (int i = 0; i < contacts.size(); i++)        {            bw.write(contacts.get(i).getUserName() + "," + contacts.get(i).getAlias() + "," + contacts.get(i).getNickName());            bw.newLine();        }        bw.close();     } catch (IOException e)     {         e.printStackTrace();     }}第 2 步,我们需要模拟给好友转账,来判断这个好友关系是否正常 。
首先,我们需要初始化 Airtest,然后利用 adb 把第 1 步生成的数据从手机里导出到本地 。
def __init_airtest(self):        """        初始化Airtest        :return:        """        device_1 = Android('822QEDTL225T7')        # device_1 = Android('emulator-5554')        connect_device("android:///")        self.poco = AndroidUiautomationPoco(device_1, screenshot_each_action=False)        auto_setup(__file__)def export_wx_db_from_phone(target_path):    """    从手机中导出通信录数据    :param target_path:    :return:    """    # 微信通信录数据    wx_db_source_path = "/data/data/com.xingag.crack_wx/wx_data.csv"    # 导出到本地    os.popen('adb pull %s %s' % (wx_db_source_path, target_path))然后就是一系列自动化操作 。
打开微信,遍历好友列表,拿到每一个好友的微信号去搜索好友,跳转到好友的聊天界面 。
def __to_friend_chat_page(self, weixin_id):        """        点击到一个好友的聊天界面        :param weixin_id:        :param weixin_name:        :return:        """        # 1、点击搜索        element_search = self.__wait_for_element_exists(self.id_search)        element_search.click()        print('点击搜索')        # 2、搜索框        element_search_input = self.__wait_for_element_exists(self.id_search_input)        element_search_input.set_text(weixin_id)        # 3、搜索列表        element_search_result_list = self.__wait_for_element_exists(self.id_search_result_list)        # 3.1 是否存在对应的联系人,如果存在就在第一个子View布局下        # 注意:可能出现最常用的聊天列表,这里需要进行判断        index_tips = 0        for index, element_search_result in enumerate(element_search_result_list.children()):            # 联系人的Tips            # if element_search_result_list.children()[0].offspring(self.id_contact_tips).exists():            if element_search_result.offspring(text=self.text_contact_tips).exists():                index_tips = index                break        # 4、点击第一个联系人进入聊天界面        element_search_result_list.children()[index_tips + 1].click()


推荐阅读