from selenium import webdriver import os from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.keys import Keys from selenium.common.exceptions import TimeoutException from modules import g_config import undetected_chromedriver as uc class Browser: def __init__(self): self.type_browser = g_config.BROWSER self.driver = None class FireFoxBrowser(Browser): def __init__(self, dir_profile="", proxy=""): super().__init__() self.proxy = proxy self.dir_profile = dir_profile def init_driver(self, disable_js=True): from selenium.webdriver.firefox.options import Options options = Options() # options.add_argument('--headless') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') options.add_argument("--disable-infobars") options.add_argument("--disable-web-security") options.add_argument("--allow-running-insecure-content") # options.add_argument("start-maximized") options.add_argument("--disable-extensions") path_driver = g_config.PATH_BROWSER_FIREFOX path_driver = path_driver.replace("\\", "/") # Disable Javascript if disable_js: options.preferences.update({ "javascript.enabled": False, }) if len(self.dir_profile) == 0: self.dir_profile = None profile = webdriver.FirefoxProfile(self.dir_profile) if len(self.proxy) > 0: proxy_host, proxy_port = self.proxy.split(":") profile.set_preference("network.proxy.socks", str(proxy_host)) profile.set_preference("network.proxy.socks_port", int(proxy_port)) profile.set_preference("network.proxy.type", 1) # if disable_js: # profile.set_preference('javascript.enabled', False) profile.update_preferences() driver = webdriver.Firefox(executable_path=path_driver, options=options, firefox_profile=profile) driver.implicitly_wait(10) driver.set_page_load_timeout(30) self.driver = driver def save_data_browser(self): temp_dir = self.driver.capabilities.get("moz:profile") os.system("cp -R " + temp_dir + "/* " + self.dir_profile) def get_driver(self): return self.driver def click_to_element(self, selector): try: element = WebDriverWait(self.driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, selector)) ) element.click() except: pass def send_key_to_element(self, selector, text): try: element = WebDriverWait(self.driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, selector)) ) element.send_keys(text) except TimeoutException: return False return True def send_key_enter(self): action = webdriver.ActionChains(self.driver) action.send_keys(Keys.ENTER) action.perform() def stop(self): # self.driver.close() if self.driver is not None: self.driver.quit() class ChromeUndetectedBrowser(Browser): def __init__(self, dir_profile="", proxy=""): super().__init__() self.proxy = proxy self.dir_profile = dir_profile def init_driver(self, disable_js=True): firefox_options = webdriver.FirefoxOptions() driver = webdriver.Remote( command_executor='http://host.docker.internal:4444', options=firefox_options ) driver.implicitly_wait(10) driver.set_page_load_timeout(30) self.driver = driver # # if len(self.dir_profile) == 0: # self.dir_profile = None # # o = uc.ChromeOptions() # # if config.HEADLESS: # o.headless = True # # driver = uc.Chrome(options=o) # # driver.implicitly_wait(10) # driver.set_page_load_timeout(30) # # self.driver = driver def get_driver(self): return self.driver def click_to_element(self, selector): try: element = WebDriverWait(self.driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, selector)) ) element.click() except: pass def send_key_to_element(self, selector, text): try: element = WebDriverWait(self.driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, selector)) ) element.send_keys(text) except TimeoutException: return False return True def send_key_enter(self): action = webdriver.ActionChains(self.driver) action.send_keys(Keys.ENTER) action.perform() def stop(self): # self.driver.close() if self.driver is not None: self.driver.quit()