get_signature.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. # -*- coding: utf-8 -*-
  2. # @Author: wangkun
  3. # @Time: 2022/9/21
  4. import json
  5. import os
  6. import sys
  7. import time
  8. from selenium import webdriver
  9. from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
  10. sys.path.append(os.getcwd())
  11. from main.common import Common
  12. from main.feishu import Feishu
  13. proxies = {'http': None, 'https': None}
  14. class GetSignature:
  15. @classmethod
  16. def get_signature(cls, log_type):
  17. try:
  18. # 打印请求配置
  19. ca = DesiredCapabilities.CHROME
  20. ca["goog:loggingPrefs"] = {"performance": "ALL"}
  21. # 不打开浏览器运行
  22. chrome_options = webdriver.ChromeOptions()
  23. chrome_options.add_argument("headless")
  24. chrome_options.add_argument(f'user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36')
  25. # driver初始化
  26. Common.logger(log_type).info('初始化 webdriver')
  27. # driver = webdriver.Chrome(desired_capabilities=ca)
  28. driver = webdriver.Chrome(desired_capabilities=ca, options=chrome_options)
  29. driver.implicitly_wait(10)
  30. Common.logger(log_type).info('打开『北京旅游等着瞧』个人主页')
  31. driver.get('https://www.ixigua.com/home/2176672314697038')
  32. time.sleep(5)
  33. # 向上滑动 1000 个像素
  34. Common.logger(log_type).info('向上滑动页面')
  35. driver.execute_script('window.scrollBy(0, 2000)')
  36. Common.logger(log_type).info('休眠 5s')
  37. time.sleep(5)
  38. Common.logger(log_type).info('刷新页面')
  39. driver.refresh()
  40. Common.logger(log_type).info('休眠 1s')
  41. time.sleep(1)
  42. Common.logger(log_type).info('解析signature')
  43. logs = driver.get_log("performance")
  44. # Common.logger(log_type).info('已获取logs:{}\n', logs)
  45. Common.logger(log_type).info('退出浏览器')
  46. driver.quit()
  47. for line in logs:
  48. msg = json.loads(line['message'])
  49. if 'params' not in msg['message']:
  50. pass
  51. elif 'documentURL' not in msg['message']['params']:
  52. pass
  53. elif 'www.ixigua.com/home/2176672314697038' not in msg['message']['params']['documentURL']:
  54. pass
  55. elif 'url' not in msg['message']['params']['request']:
  56. pass
  57. elif '_signature' not in msg['message']['params']['request']['url']:
  58. pass
  59. elif 'web/user/settings' not in msg['message']['params']['request']['url']:
  60. pass
  61. else:
  62. url = msg['message']['params']['request']['url']
  63. signature = url.split('_signature=')[-1].split('&')[0]
  64. Common.logger(log_type).info('url:{}\n', url)
  65. Common.logger(log_type).info('signature:{}\n', signature)
  66. get_signature_time = time.strftime('%Y/%m/%d %H:%M:%S', time.localtime(time.time()))
  67. values = [[get_signature_time, signature]]
  68. Feishu.insert_columns(log_type, 'xigua', '6tZHhs', 'ROWS', 1, 2)
  69. time.sleep(0.5)
  70. Feishu.update_values(log_type, 'xigua', '6tZHhs', 'A2:B2', values)
  71. Common.logger(log_type).info('signature写入飞书成功:{}\n', signature)
  72. cls.del_signature(log_type)
  73. # if 'message' in line \
  74. # and 'message' in json.loads(line['message'])\
  75. # and 'params' in json.loads(line['message'])['message']\
  76. # and 'response' in json.loads(line['message'])['message']['params']\
  77. # and 'url' in json.loads(line['message'])['message']['params']['response']\
  78. # and '_signature' in json.loads(line['message'])['message']['params']['response']['url']\
  79. # and 'web/user/settings' in json.loads(line['message'])['message']['params']['response']['url']:
  80. # url = json.loads(line['message'])['message']['params']['response']['url']
  81. # signature = url.split('_signature=')[-1]
  82. # if len(signature) < 50:
  83. # pass
  84. # else:
  85. # get_signature_time = time.strftime('%Y/%m/%d %H:%M:%S', time.localtime(time.time()))
  86. # values = [[get_signature_time, signature]]
  87. # Feishu.update_values(log_type, 'xigua', '6tZHhs', 'A2:B2', values)
  88. # Common.logger(log_type).info('signature写入飞书成功:{}\n', signature)
  89. # cls.del_signature(log_type)
  90. # else:
  91. # Common.logger(log_type).info('未获取到signature:{}\n', line)
  92. except Exception as e:
  93. Common.logger(log_type).error('get_signature异常:{}', e)
  94. @classmethod
  95. def del_signature(cls, log_type):
  96. try:
  97. while True:
  98. signature_sht = Feishu.get_values_batch(log_type, 'xigua', '6tZHhs')
  99. if len(signature_sht) <= 25:
  100. break
  101. else:
  102. Feishu.dimension_range(log_type, 'xigua', '6tZHhs', 'ROWS', 26, 26)
  103. Common.logger(log_type).info('删除signature完成\n')
  104. except Exception as e:
  105. Common.logger(log_type).error('del_signature异常:{}', e)
  106. if __name__ == '__main__':
  107. GetSignature.get_signature('follow')
  108. # GetSignature.del_signature('follow')
  109. pass