browser.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. from genericpath import exists
  2. from importlib.resources import path
  3. import os,sys,re,logging
  4. from selenium import webdriver
  5. from selenium.webdriver.chrome.options import Options
  6. import requests
  7. from selenium.webdriver.chrome.service import Service
  8. class Browser(object):
  9. '''浏览器基类,Edge,Chrome,Firefox'''
  10. def __init__(self):
  11. os.makedirs("data") if not os.path.exists("data") else False
  12. os.makedirs("data/driver") if not os.path.exists("data/driver") else False
  13. os.makedirs("data/browser-profiles") if not os.path.exists("data/browser-profiles") else False
  14. # 下载驱动
  15. self.sess=requests.Session()
  16. self.downloadDriver()
  17. def downloadDriver(self):
  18. '''需要之类实现'''
  19. pass
  20. def getWebdriver(self):
  21. pass
  22. def close(self,driver:webdriver.Chrome):
  23. driver.close()
  24. def options(self, i=None, proxy=False, headless=False, browser_profile=None, proxy_address=None):
  25. '''配置'''
  26. chrome_options = Options()
  27. if proxy_address is not None and len(proxy_address.split(":")) == 2:
  28. chrome_options.add_argument("--proxy-server="+proxy_address)
  29. if proxy_address is not None and len(proxy_address.split(":")) == 4:
  30. i=random.randint(1000, 9999999)
  31. proxy = Proxy(*proxy_address.split(":"), i); time.sleep(1.5)
  32. chrome_options.add_extension(proxy)
  33. # chrome_options.add_argument(f'--load-extension='+proxy)
  34. if browser_profile is not None:
  35. os.makedirs("data/browser-profiles") if not os.path.exists("data/browser-profiles") else False
  36. # user_data_dir = user_data_dir = f'data/browser-profiles/{random.randint(1000, 9999)}-{"".join(random.choice(string.ascii_letters) for i in range(8))}'
  37. user_data_dir = f'data/browser-profiles/{browser_profile}'
  38. os.makedirs(user_data_dir) if not os.path.exists(user_data_dir) else False
  39. self.user_dir = user_data_dir
  40. chrome_options.add_argument("--user-data-dir=%s" % user_data_dir)
  41. # 增加扩展
  42. # if not headless:
  43. # chrome_options.add_extension(os.path.abspath("creator/src/chrome/extensions/always_active.zip"))
  44. # chrome_options.add_extension(os.path.abspath("creator/src/chrome/extensions/fingerprint_defender.zip"))
  45. # chrome_options.add_extension(os.path.abspath("creator/src/chrome/extensions/spoof_timezone.zip"))
  46. # chrome_options.add_extension(os.path.abspath("creator/src/chrome/extensions/webrtc_control.zip"))
  47. chrome_options.add_argument('--mute-audio')
  48. chrome_options.add_argument("--start-maximized")
  49. chrome_options.add_experimental_option('prefs', {'intl.accept_languages': 'en,en_US'})
  50. chrome_options.add_argument('Content-Type="text/html"')
  51. if headless:
  52. chrome_options.add_argument("--headless")
  53. chrome_options.add_argument('chartset=utf-8')
  54. chrome_options.add_argument("--no-sandbox")
  55. chrome_options.add_argument("--disable-gpu")
  56. chrome_options.add_argument("--disable-crash-reporter")
  57. chrome_options.add_argument("--disable-in-process-stack-traces")
  58. chrome_options.add_argument("--disable-logging")
  59. chrome_options.add_argument("--disable-dev-shm-usage")
  60. chrome_options.add_argument("--log-level=3")
  61. chrome_options.add_argument("--output=/dev/null")
  62. if proxy!=False and i!=None:
  63. chrome_options.add_extension(f"data/extension/proxy_auth_plugin_{i}.zip")
  64. chrome_options.add_experimental_option("excludeSwitches", ["enable-automation", "enable-logging"])
  65. chrome_options.add_experimental_option('useAutomationExtension', False)
  66. chrome_options.add_experimental_option('prefs', {'intl.accept_languages': 'en_US,en'})
  67. chrome_options.add_argument('--disable-features=UserAgentClientHint')
  68. webdriver.DesiredCapabilities.CHROME['loggingPrefs'] = {'driver': 'OFF', 'server': 'OFF', 'browser': 'OFF'}
  69. webdriver.DesiredCapabilities.CHROME['acceptSslCerts']=True
  70. return chrome_options