cookies.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. import asyncio
  2. import os
  3. import random
  4. import re
  5. import time
  6. import os
  7. import sys
  8. sys.path.append(os.path.dirname(os.path.dirname(__file__)))
  9. from DrissionPage import ChromiumPage
  10. from DrissionPage import ChromiumOptions
  11. from conf.config import logger,PAGE_OUTPUT,INI_PATH,chrome_options,db,USER_DATA,OUTPUT
  12. from DrissionPage import ChromiumOptions
  13. from DrissionPage.common import Settings
  14. from faker import Faker
  15. import DrissionPage
  16. from fake_useragent import UserAgent
  17. from dataset import Table
  18. from collections import OrderedDict
  19. table:Table = db['cookie']
  20. def get_browser_fake_info():
  21. # https://github.com/joke2k/faker/wiki
  22. fake = Faker()
  23. while True:
  24. user_agent = fake.user_agent()
  25. mac_platform_token = fake.mac_platform_token()
  26. if "Windows" in user_agent:
  27. break
  28. return user_agent
  29. page = None
  30. # https://dataset.readthedocs.io/en/latest/api.html
  31. def create_ua_header():
  32. ua = UserAgent(os=["windows", "macos"])
  33. res = ua.getRandom
  34. logger.info(f"{ua}")
  35. version = res['version']
  36. vnum = int(version)
  37. header = {
  38. "Sec-Ch-Ua": f'";Not A Brand";v="99", "Chromium";v="{vnum}"',
  39. "Sec-Ch-Ua-Platform": "Windows" if 'win' in res['os'] else "macOS",
  40. "User-Agent": res['useragent'],
  41. }
  42. # logger.info(f"{res}")
  43. # logger.info(f"{header}")
  44. return header
  45. def gen_douyin_cookies():
  46. # header = {'Sec-Ch-Ua': '";Not A Brand";v="99", "Chromium";v="122"', 'Sec-Ch-Ua-Platform': 'Windows', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Config/92.2.2788.20'}
  47. header = create_ua_header()
  48. logger.info(f"header {header}")
  49. chrome_options.set_user_data_path(USER_DATA + '1')
  50. page = ChromiumPage(chrome_options)
  51. try:
  52. page.set.cookies.clear()
  53. except Exception as e:
  54. logger.exception(f"{e}")
  55. page.quit()
  56. return
  57. page.set.load_mode.normal()
  58. page.set.headers(headers=header)
  59. logger.info(f"address {chrome_options.address}")
  60. logger.info(f"user_data_path {chrome_options.user_data_path}")
  61. logger.info(f"start '{page._chromium_options._browser_path}'")
  62. logger.info(f"process_id {page.process_id}")
  63. # page.get("edge://version/")
  64. url="https://www.douyin.com/"
  65. # tab = page.new_tab()
  66. tab = page
  67. retry = 3
  68. while retry:
  69. try:
  70. logger.info(f"start listen")
  71. tab.listen.start("www.douyin.com", method="GET")
  72. tab.get(url)
  73. i = 0
  74. for packet in tab.listen.steps(timeout=5):
  75. if not packet.url.startswith('https'):
  76. continue
  77. # logger.info(f"{packet.url} {packet.request.headers}")
  78. cookie = packet.request.extra_info.headers["cookie"]
  79. logger.debug(f"cookie {cookie}")
  80. # page.quit()
  81. if len(cookie) > 1600:
  82. ret = {
  83. "cookies": cookie,
  84. "user_agent": header['User-Agent'],
  85. "update_time": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())),
  86. "create_time": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())),
  87. }
  88. logger.debug(f"ret {ret}")
  89. page.quit()
  90. return ret
  91. i += 1
  92. if i == 5:
  93. break
  94. # res = tab.listen.wait(1, timeout=5, raise_err=True)
  95. # logger.debug(f"res {res.request.headers}")
  96. # logger.debug(f"res.request.extra_info.headers {res.request.extra_info.headers}")
  97. except DrissionPage.errors.WaitTimeoutError as e:
  98. logger.error(f"{e}")
  99. except Exception as e:
  100. logger.exception(e)
  101. tab.listen.clear()
  102. retry -= 1
  103. logger.info(f"retry {retry}")
  104. page.quit()
  105. def save_to_db(data):
  106. table = db['cookie']
  107. table.insert(data)
  108. def try_gen_douyin_cookies():
  109. while True:
  110. try:
  111. ret = gen_douyin_cookies()
  112. # logger.info(f"ret {ret}")
  113. save_to_db(ret)
  114. break
  115. # Ctrl+c cancel_error
  116. except KeyboardInterrupt:
  117. logger.info("KeyboardInterrupt")
  118. page.quit()
  119. sys.exit(0)
  120. except DrissionPage.errors.WaitTimeoutError as e:
  121. logger.error(f"{e}")
  122. except Exception as e:
  123. logger.exception(e)
  124. def get_from_table(id=None):
  125. count = table.count()
  126. # random choise
  127. if count > 0:
  128. if id:
  129. row = table.find_one(id=id)
  130. else:
  131. index = random.randint(0, count-1)
  132. row = table.find_one(id=index)
  133. # logger.info(f"{row['id']}")
  134. # logger.info(f"row {row}")
  135. return row
  136. else:
  137. logger.info("no cookie")
  138. return None
  139. def delete_old_and_create_new(row:OrderedDict):
  140. res = try_gen_douyin_cookies()
  141. if res:
  142. res['id'] = row['id']
  143. id = table.upsert(res, ['id'])
  144. logger.info(f"upsert {id}")
  145. return table.find_one(id=row['id'])
  146. def main():
  147. # delete_old_and_create_new()
  148. # ua = create_ua_header()
  149. # gen_douyin_cookies()
  150. try_gen_douyin_cookies()
  151. # get_from_table()
  152. # table.create_column('key')
  153. # table.delete(id=6)
  154. if __name__ == "__main__":
  155. main()