|
@@ -1,27 +1,137 @@
|
|
|
# -*- 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_weixinzhishu(cls):
|
|
|
- desired_caps = {'app': 'Root', 'deviceName': 'windowsPC', 'platformName': 'Windows'}
|
|
|
- driver = webdriver.Remote(
|
|
|
- command_executor='http://127.0.0.1:4723',
|
|
|
- desired_capabilities=desired_caps)
|
|
|
-
|
|
|
- main_win = driver.find_element(By.NAME, '微信指数')
|
|
|
- print(main_win)
|
|
|
- hd = hex(int(main_win.get_attribute("NativeWindowHandle")))
|
|
|
- print(hd)
|
|
|
- caps = {'appTopLevelWindow': str(hd)}
|
|
|
- driver = webdriver.Remote(
|
|
|
- command_executor='http://127.0.0.1:4723',
|
|
|
- desired_capabilities=caps)
|
|
|
-
|
|
|
-
|
|
|
-if __name__ == "__main__":
|
|
|
- Searchkey.start_weixinzhishu()
|
|
|
+ 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'click_video异常:{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.write_search_key_to_feishu('searchkey', 'weixinzhishu')
|
|
|
+ pass
|