123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- 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
|