get_signature.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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.chrome.service import Service
  10. from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
  11. sys.path.append(os.getcwd())
  12. from main.common import Common
  13. from main.feishu import Feishu
  14. proxies = {'http': None, 'https': None}
  15. class GetSignature:
  16. @classmethod
  17. def get_signature(cls, log_type):
  18. try:
  19. # 打印请求配置
  20. ca = DesiredCapabilities.CHROME
  21. ca["goog:loggingPrefs"] = {"performance": "ALL"}
  22. # 不打开浏览器运行
  23. chrome_options = webdriver.ChromeOptions()
  24. chrome_options.add_argument("headless")
  25. 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')
  26. chrome_options.add_argument("--no-sandbox")
  27. # driver初始化
  28. Common.logger(log_type).info('初始化 webdriver')
  29. # driver = webdriver.Chrome(desired_capabilities=ca, options=chrome_options)
  30. # driver = webdriver.Chrome(desired_capabilities=ca, options=chrome_options, service=Service('/Users/wangkun/Downloads/chromedriver_v107/chromedriver'))
  31. # driver = webdriver.Chrome(desired_capabilities=ca, options=chrome_options, service=Service('/Users/lieyunye/Downloads/chromedriver_v107/chromedriver'))
  32. driver = webdriver.Chrome(desired_capabilities=ca, options=chrome_options, service=Service('/Users/piaoquan/Downloads/chromedriver_v108/chromedriver'))
  33. driver.implicitly_wait(10)
  34. Common.logger(log_type).info('打开个人主页')
  35. driver.get('https://www.ixigua.com/home/100909070373/')
  36. time.sleep(5)
  37. # 向上滑动 1000 个像素
  38. Common.logger(log_type).info('向上滑动页面')
  39. driver.execute_script('window.scrollBy(0, 2000)')
  40. Common.logger(log_type).info('休眠 5s')
  41. time.sleep(5)
  42. Common.logger(log_type).info('刷新页面')
  43. driver.refresh()
  44. Common.logger(log_type).info('休眠 1s')
  45. time.sleep(1)
  46. Common.logger(log_type).info('解析signature')
  47. logs = driver.get_log("performance")
  48. # Common.logger(log_type).info('已获取logs:{}\n', logs)
  49. Common.logger(log_type).info('退出浏览器')
  50. driver.quit()
  51. for line in logs:
  52. msg = json.loads(line['message'])
  53. if 'params' not in msg['message']:
  54. pass
  55. elif 'documentURL' not in msg['message']['params']:
  56. pass
  57. elif 'www.ixigua.com/home/100909070373' not in msg['message']['params']['documentURL']:
  58. pass
  59. elif 'url' not in msg['message']['params']['request']:
  60. pass
  61. elif '_signature' not in msg['message']['params']['request']['url']:
  62. pass
  63. elif 'web/user/settings' not in msg['message']['params']['request']['url']:
  64. pass
  65. else:
  66. url = msg['message']['params']['request']['url']
  67. signature = url.split('_signature=')[-1].split('&')[0]
  68. Common.logger(log_type).info(f'url:{url}\n')
  69. Common.logger(log_type).info(f'signature:{signature}\n')
  70. get_signature_time = time.strftime('%Y/%m/%d %H:%M:%S', time.localtime(time.time()))
  71. values = [[get_signature_time, signature]]
  72. Feishu.insert_columns(log_type, 'xigua', '6tZHhs', 'ROWS', 1, 2)
  73. time.sleep(0.5)
  74. Feishu.update_values(log_type, 'xigua', '6tZHhs', 'A2:B2', values)
  75. Common.logger(log_type).info(f'signature写入飞书成功:{signature}\n')
  76. cls.del_signature(log_type)
  77. except Exception as e:
  78. Common.logger(log_type).error(f'get_signature异常:{e}\n')
  79. @classmethod
  80. def del_signature(cls, log_type):
  81. try:
  82. while True:
  83. signature_sht = Feishu.get_values_batch(log_type, 'xigua', '6tZHhs')
  84. if len(signature_sht) <= 25:
  85. break
  86. else:
  87. Feishu.dimension_range(log_type, 'xigua', '6tZHhs', 'ROWS', 26, 26)
  88. Common.logger(log_type).info('删除signature完成\n')
  89. except Exception as e:
  90. Common.logger(log_type).error(f'del_signature异常:{e}\n')
  91. if __name__ == '__main__':
  92. GetSignature.get_signature('follow')
  93. pass