from genericpath import exists from importlib.resources import path import os,sys,re,logging from selenium import webdriver from selenium.webdriver.chrome.options import Options import requests from selenium.webdriver.chrome.service import Service class Browser(object): '''浏览器基类,Edge,Chrome,Firefox''' def __init__(self): os.makedirs("data") if not os.path.exists("data") else False os.makedirs("data/driver") if not os.path.exists("data/driver") else False os.makedirs("data/browser-profiles") if not os.path.exists("data/browser-profiles") else False # 下载驱动 self.sess=requests.Session() self.downloadDriver() def downloadDriver(self): '''需要之类实现''' pass def getWebdriver(self): pass def close(self,driver:webdriver.Chrome): driver.close() def options(self, i=None, proxy=False, headless=False, browser_profile=None, proxy_address=None): '''配置''' chrome_options = Options() if proxy_address is not None and len(proxy_address.split(":")) == 2: chrome_options.add_argument("--proxy-server="+proxy_address) if proxy_address is not None and len(proxy_address.split(":")) == 4: i=random.randint(1000, 9999999) proxy = Proxy(*proxy_address.split(":"), i); time.sleep(1.5) chrome_options.add_extension(proxy) # chrome_options.add_argument(f'--load-extension='+proxy) if browser_profile is not None: os.makedirs("data/browser-profiles") if not os.path.exists("data/browser-profiles") else False # 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))}' user_data_dir = f'data/browser-profiles/{browser_profile}' os.makedirs(user_data_dir) if not os.path.exists(user_data_dir) else False self.user_dir = user_data_dir chrome_options.add_argument("--user-data-dir=%s" % user_data_dir) # 增加扩展 # if not headless: # chrome_options.add_extension(os.path.abspath("creator/src/chrome/extensions/always_active.zip")) # chrome_options.add_extension(os.path.abspath("creator/src/chrome/extensions/fingerprint_defender.zip")) # chrome_options.add_extension(os.path.abspath("creator/src/chrome/extensions/spoof_timezone.zip")) # chrome_options.add_extension(os.path.abspath("creator/src/chrome/extensions/webrtc_control.zip")) chrome_options.add_argument('--mute-audio') chrome_options.add_argument("--start-maximized") chrome_options.add_experimental_option('prefs', {'intl.accept_languages': 'en,en_US'}) chrome_options.add_argument('Content-Type="text/html"') if headless: chrome_options.add_argument("--headless") chrome_options.add_argument('chartset=utf-8') chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--disable-crash-reporter") chrome_options.add_argument("--disable-in-process-stack-traces") chrome_options.add_argument("--disable-logging") chrome_options.add_argument("--disable-dev-shm-usage") chrome_options.add_argument("--log-level=3") chrome_options.add_argument("--output=/dev/null") if proxy!=False and i!=None: chrome_options.add_extension(f"data/extension/proxy_auth_plugin_{i}.zip") chrome_options.add_experimental_option("excludeSwitches", ["enable-automation", "enable-logging"]) chrome_options.add_experimental_option('useAutomationExtension', False) chrome_options.add_experimental_option('prefs', {'intl.accept_languages': 'en_US,en'}) chrome_options.add_argument('--disable-features=UserAgentClientHint') webdriver.DesiredCapabilities.CHROME['loggingPrefs'] = {'driver': 'OFF', 'server': 'OFF', 'browser': 'OFF'} webdriver.DesiredCapabilities.CHROME['acceptSslCerts']=True return chrome_options