# -*- coding: utf-8 -*- # @Author: wangkun # @Time: 2023/2/10 import json import os import sys import time from appium import webdriver from selenium.webdriver.common.by import By sys.path.append(os.getcwd()) from common.common import Common from common.feishu import Feishu class Searchkey: @classmethod def start_wechat(cls, log_type, crawler): try: Common.logger(log_type, crawler).info('启动"微信"') # print('启动"微信"') desired_caps = {'app': r"C:\Program Files (x86)\Tencent\WeChat\WeChat.exe"} driver = webdriver.Remote( command_executor='http://127.0.0.1:4723', desired_capabilities=desired_caps) driver.implicitly_wait(10) # Common.logger(log_type).info('点击"聊天窗口"') # driver.find_element(By.NAME, '聊天').click() # # Common.logger(log_type).info('点击"爬虫群"') # driver.find_elements(By.NAME, '爬虫群')[0].click() Common.logger(log_type, crawler).info('点击微信指数') driver.find_elements(By.NAME, '消息')[-1].click() Common.logger(log_type, crawler).info('休眠 3 秒,退出微信') time.sleep(3) driver.quit() except Exception as e: Common.logger(log_type, crawler).error(f'start_wechat异常:{e}\n') @classmethod def get_search_key(cls, log_type, crawler): try: # charles 抓包文件保存目录 chlsfile_path = f"./{crawler}/{crawler}_chlsfiles/" # chlsfile_path = f"../weixinzhishu_chlsfiles/" all_file = os.listdir(chlsfile_path) chlsfile_list = [] if len(all_file) == 0: Common.logger(log_type, crawler).info("chlsfile文件夹为空,等待2s") time.sleep(2) cls.get_search_key(log_type, crawler) else: for file in all_file: if file.endswith("chlsj") is False: os.remove(f"./{crawler}/{crawler}_chlsfiles/{file}") else: chlsfile_list.append(file) if len(chlsfile_list) == 0: Common.logger(log_type, crawler).info('未找到chlsfile文件,重新获取') cls.get_search_key(log_type, crawler) else: # 获取最新的 chlsfile chlsfile = chlsfile_list[-1] # 分离文件名与扩展名 new_file = os.path.splitext(chlsfile) # 重命名文件后缀 os.rename(os.path.join(chlsfile_path, chlsfile), os.path.join(chlsfile_path, new_file[0] + ".txt")) with open(f"{chlsfile_path}{new_file[0]}.txt", encoding='utf-8-sig', errors='ignore') as f: contents = json.load(f, strict=False) if "search.weixin.qq.com" not in [text['host'] for text in contents]: return "未找到search_key" else: for content in contents: if content["host"] == "search.weixin.qq.com" and content["path"] == "/cgi-bin/wxaweb/wxindexgetusergroup": text = content['request']['body']['text'] search_key = json.loads(text)['search_key'] return search_key except Exception as e: Common.logger(log_type, crawler).exception(f"get_search_key异常:{e}\n") return None @classmethod def remove_file(cls, log_type, crawler): try: all_file_path = f"./{crawler}/{crawler}_chlsfiles/" if not os.path.exists(all_file_path): os.mkdir(all_file_path) all_file = os.listdir(f"./{crawler}/{crawler}_chlsfiles/") for file in all_file: os.remove(f"./{crawler}/{crawler}_chlsfiles/{file}") except Exception as e: Common.logger(log_type, crawler).error(f"remove_file异常:{e}\n") @classmethod def del_search_key_from_feishu(cls, log_type, crawler): try: sheet = Feishu.get_values_batch(log_type, crawler, 'sVL74k') print(len(sheet)) if len(sheet) <= 21: # print('<=20行') return else: Feishu.dimension_range(log_type, crawler, 'sVL74k', 'ROWS', 22, 22) cls.del_search_key_from_feishu(log_type, crawler) except Exception as e: Common.logger(log_type, crawler).error(f"del_search_key_from_feishu异常:{e}\n") @classmethod def write_search_key_to_feishu(cls, log_type, crawler): Common.logger(log_type, crawler).info('清除 chlsfiles 文件夹') cls.remove_file(log_type, crawler) Common.logger(log_type, crawler).info('启动微信指数小程序') cls.start_wechat(log_type, crawler) Common.logger(log_type, crawler).info('获取 search_key') while True: search_key = cls.get_search_key(log_type, crawler) if search_key is None or search_key == "未找到search_key": time.sleep(3) cls.start_wechat(log_type, crawler) cls.get_search_key(log_type, crawler) else: Feishu.insert_columns(log_type, crawler, 'sVL74k', 'ROWS', 1, 2) time.sleep(1) time_str = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(int(time.time()))) Feishu.update_values(log_type, crawler, 'sVL74k', 'A2:B2', [[time_str, search_key]]) cls.del_search_key_from_feishu(log_type, crawler) Common.logger(log_type, crawler).info(f"search_key:{search_key}写入飞书表成功\n") return if __name__ == '__main__': # Searchkey.start_wechat('searchkey', 'weixinzhishu') Searchkey.write_search_key_to_feishu('searchkey', 'weixinzhishu') pass