def get_driver(cls,selenium_hub,browser_type): driver=None browser_type=browser_type.lower() download_file_content_types = "application/octet-stream,application/vnd.ms-excel,text/csv,application/zip,application/binary" if browser_type=='ie': opt = ie_webdriver.Options() opt.force_create_process_api = True opt.ensure_clean_session = True opt.add_argument('-private') ie_capabilities = webdriver.DesiredCapabilities.INTERNETEXPLORER.copy() ie_capabilities.update(opt.to_capabilities()) driver = webdriver.Remote(selenium_hub, desired_capabilities=ie_capabilities) elif browser_type=='firefox': firefox_profile=FirefoxProfile() # firefox_profile参数可以在火狐浏览器中访问about:config进行查看 firefox_profile.set_preference('browser.download.folderList',2) # 0是桌面;1是“我的下载”;2是自定义 firefox_profile.set_preference('browser.download.dir',ReadConfig().config.download_dir) firefox_profile.set_preference('browser.helperApps.neverAsk.saveToDisk',download_file_content_types) firefox_options = Firefox_Options() if ReadConfig().config.is_firefox_headless.lower()=='true': firefox_options.add_argument('--headless') driver = webdriver.Remote(selenium_hub, webdriver.DesiredCapabilities.FIREFOX.copy(),browser_profile=firefox_profile,options=firefox_options) elif browser_type=='chrome': chrome_options=Chrome_Options() prefs={'download.default_directory':ReadConfig().config.download_dir,'profile.default_content_settings.popups':0} chrome_options.add_experimental_option('prefs',prefs) if ReadConfig().config.is_chrome_headless.lower()=='true': chrome_options.add_argument('--headless') driver = webdriver.Remote(selenium_hub, webdriver.DesiredCapabilities.CHROME.copy(),options=chrome_options) else: return driver driver.maximize_window() driver.delete_all_cookies() return driver
def search_and_download(search_term: str, driver_path: str, target_path='./images', number_images=10): target_folder = os.path.join(target_path, '_'.join(search_term.lower().split(' '))) if not os.path.exists(target_folder): os.makedirs(target_folder) if driver_path == './chromedriver': chrome_options = Chrome_Options() chrome_options.add_argument("--headless") with webdriver.Chrome(executable_path=driver_path, options=chrome_options) as wd: res = fetch_image_urls(search_term, number_images, wd=wd, sleep_between_interactions=0.5) else: firefox_options = Firefox_Options() firefox_options.add_argument("--headless") with webdriver.Firefox(executable_path=driver_path, options=firefox_options) as wd: res = fetch_image_urls(search_term, number_images, wd=wd, sleep_between_interactions=0.5) counter = 0 for elem in res: persist_image(target_folder, elem, counter) counter += 1
def start_test(): global running parser = argparse.ArgumentParser( description= 'Tool to check how often a page can be called before blocking starts') parser._action_groups.pop() required = parser.add_argument_group('required arguments') optional = parser.add_argument_group('optional arguments') required.add_argument("-p", "--page", help="URL of the website to be tested", required=True) required.add_argument("-x", "--xpath", help="Xpath for an element on the page", required=True) optional.add_argument("-s", "--sleep", help="Sleep between calls in seconds", default=2, type=int) optional.add_argument("-hl", "--headless", help="Set browser in headless mode", action='store_true') optional.add_argument("-d", "--driver", help="Location of the geckodriver", default=os.getcwd() + "/geckodriver") optional.add_argument("-c", "--cycles", help="On how many cycles should an output occur", default=50, type=check_positive) args = parser.parse_args() firefox_options = Firefox_Options() if args.headless: firefox_options.add_argument('-headless') browser = webdriver.Firefox(options=firefox_options, executable_path=args.driver) count = 0 start_time = datetime.datetime.now() print("Start testing...") while running: try: browser.get(url=args.page) sleep(args.sleep) browser.find_element_by_xpath(args.xpath) count += 1 if count % args.cycles == 0: print(f"Current cycle: {str(count)}") except: running = False print("Stop testing...") end_time = datetime.datetime.now() runtime = end_time - start_time print(f"Result: Test running for {str(runtime)} and {str(count)} cycles")
def firefox_init(self, request): options = Firefox_Options() options.headless = True print("Running firefox.") driver = webdriver.Firefox(options=options) request.cls.firefox_driver = driver yield driver.close()
def set_selenium_local_session( proxy_address=None, proxy_port=None, proxy_username=None, proxy_password=None, headless_browser=None, browser_profile_path=None, disable_image_load=None, page_delay=10, geckodriver_path=None, ): user_agent = ( "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 " "(KHTML, like Gecko) FxiOS/18.1 Mobile/16B92 Safari/605.1.15") firefox_options = Firefox_Options() if headless_browser: firefox_options.add_argument("-headless") if browser_profile_path is not None: firefox_profile = webdriver.FirefoxProfile(browser_profile_path) else: firefox_profile = webdriver.FirefoxProfile() # set English language firefox_profile.set_preference("intl.accept_languages", "en-US") firefox_profile.set_preference("general.useragent.override", user_agent) if disable_image_load: # permissions.default.image = 2: Disable images load, # this setting can improve pageload & save bandwidth firefox_profile.set_preference("permissions.default.image", 2) if proxy_address and proxy_port: firefox_profile.set_preference("network.proxy.type", 1) firefox_profile.set_preference("network.proxy.http", proxy_address) firefox_profile.set_preference("network.proxy.http_port", proxy_port) firefox_profile.set_preference("network.proxy.ssl", proxy_address) firefox_profile.set_preference("network.proxy.ssl_port", proxy_port) # mute audio firefox_profile.set_preference("media.volume_scale", "0.0") # prefer user path before downloaded one driver_path = geckodriver_path or get_geckodriver() browser = webdriver.Firefox( firefox_profile=firefox_profile, executable_path=driver_path, options=firefox_options, ) # add extenions to hide selenium browser.install_addon(create_firefox_extension(), temporary=True) browser.implicitly_wait(page_delay) return browser
def set_selenium_local_session( logfile, proxy_address: Optional[str] = None, proxy_port: Optional[str] = None, proxy_username: Optional[str] = None, proxy_password: Optional[str] = None, headless_browser: Optional[bool] = False, browser_profile_path: Optional[str] = None, disable_image_load: Optional[bool] = False, page_delay: Optional[int] = 25 ) -> webdriver.Firefox: """Starts local session for a selenium server.""" firefox_options = Firefox_Options() if headless_browser: firefox_options.add_argument("-headless") if browser_profile_path is not None: firefox_profile = webdriver.FirefoxProfile( profile_directory=browser_profile_path) else: firefox_profile = webdriver.FirefoxProfile() firefox_profile.set_preference("intl.accept_languages", "en-US") #firefox_profile.set_preference("general.useragent.override", user_agent) if disable_image_load: firefox_profile.set_preference("permissions.default.image", 2) if proxy_address and proxy_port: firefox_profile.set_preference("network.proxy.type", 1) firefox_profile.set_preference("network.proxy.http", proxy_address) firefox_profile.set_preference( "network.proxy.http_port", int(proxy_port)) firefox_profile.set_preference("network.proxy.ssl", proxy_address) firefox_profile.set_preference( "network.proxy.ssl_port", int(proxy_port)) firefox_profile.set_preference("media.volume_scale", "0.0") driver_path = get_geckodriver() browser = webdriver.Firefox( firefox_profile=firefox_profile, executable_path=driver_path, options=firefox_options, service_log_path=logfile ) try: extension = create_firefox_extension() except Exception as a: print(str(a)) extension = None if extension: browser.install_addon(extension, temporary=True) if proxy_username and proxy_password: proxy_authentication(browser, proxy_username, proxy_password) browser.implicitly_wait(page_delay) browser.set_window_size(1280, 1024) browser.minimize_window() return browser
def setUp(self, firefox_bin): fp = webdriver.FirefoxProfile() fp.set_preference("browser.download.folderList", 2) fp.set_preference("browser.download.manager.showWhenStarting", False) fp.set_preference("browser.download.dir", "/tmp") fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "image/jpeg") firefox_options = Firefox_Options() firefox_options.binary = firefox_bin self.driver = webdriver.Firefox(firefox_profile=fp, options=firefox_options)
def setUp(self): self.email = "*****@*****.**" self.comment = "QA-228" self.browser = os.getenv("BROWSER") if self.browser == "FIREFOX": self.options = Firefox_Options() self.options.add_argument('-headless') else: self.options = Chrome_Options() self.options.add_argument('--headless') self.driver = Remote( command_executor="http://127.0.0.1:4444/wd/hub", desired_capabilities=getattr(DesiredCapabilities, self.browser).copy(), options=self.options ) self.anonimazer = Anonimazer(self.driver)
def __init__(self): self._clients = [] self._numbers = [] self._proxy = [] self._emails = [] self.user_agent = "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16" self.papa_url = "https://www.papajohns.ru/30off" self.mail_url = "https://temp-mail.org/ru/" self._profile = webdriver.FirefoxProfile() self._options = Firefox_Options() self._options.add_argument('-headless') self._profile.set_preference('intl.accept_languages', 'ru') # self._profile.set_preference("general.useragent.override", self.user_agent) self._profile.set_preference('permissions.default.image', 2) self._driver = webdriver.Firefox(firefox_profile=self._profile, firefox_options=self._options) self._driver.set_window_size(720, 1280)
def __init__(self, login, password, user_agent=user_agent): self.__login = login self.__password = password self.__isAuth = False self.__id = 0 self.nickname = "" self.following_count = 0 self.followers_count = 0 self.__profile = webdriver.FirefoxProfile() self.__options = Firefox_Options() #self.__options.add_argument('-headless') self.__profile.set_preference('intl.accept_languages', 'ru') self.__profile.set_preference("general.useragent.override", user_agent) self.__profile.set_preference('permissions.default.image', 2) self.__driver = webdriver.Firefox(firefox_profile=self.__profile, firefox_options=self.__options) self.__driver.set_window_size(360, 640) self.__authorization()
def __init__(self, path=os.getcwd()): self.__options = Firefox_Options() self.__options.add_argument('-headless') self.__driver = webdriver.Firefox(firefox_options=self.__options) self.path = path self.coub_path = path + "/coub" self.coub_taker = CoubTaker(self.coub_path) try: os.mkdir(self.coub_path) except OSError as e: if e.errno != os.errno.EEXIST: raise pass self.youtube_path = path + "/youtube" self.youtube_taker = YoutubeTaker(self.youtube_path) try: os.mkdir(self.youtube_path) except OSError as e: if e.errno != os.errno.EEXIST: raise pass self.insta_path = path + "/insta" self.insta_taker = VkTaker(self.path) try: os.mkdir(self.insta_path) except OSError as e: if e.errno != os.errno.EEXIST: raise pass self.vk_path = path + "/vk" self.vk_taker = VkTaker(self.vk_path) try: os.mkdir(self.vk_path) except OSError as e: if e.errno != os.errno.EEXIST: raise pass
def set_selenium_local_session( proxy_address, proxy_port, proxy_username, proxy_password, headless_browser, browser_profile_path, disable_image_load, page_delay, geckodriver_path, browser_executable_path, logfolder, logger, ): """Starts local session for a selenium server. Default case scenario.""" browser = None err_msg = "" # set Firefox Agent to mobile agent user_agent = ( "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 " "(KHTML, like Gecko) FxiOS/18.1 Mobile/16B92 Safari/605.1.15") # keep user_agent Settings.user_agent = user_agent firefox_options = Firefox_Options() if headless_browser: firefox_options.add_argument("-headless") if browser_profile_path is not None: firefox_profile = webdriver.FirefoxProfile(browser_profile_path) else: firefox_profile = webdriver.FirefoxProfile() if browser_executable_path is not None: firefox_options.binary = browser_executable_path firefox_options.binary = '/app/vendor/firefox/firefox' # Added by me # set English language firefox_profile.set_preference("intl.accept_languages", "en-US") firefox_profile.set_preference("general.useragent.override", user_agent) if disable_image_load: # permissions.default.image = 2: Disable images load, # this setting can improve pageload & save bandwidth firefox_profile.set_preference("permissions.default.image", 2) if proxy_address and proxy_port: firefox_profile.set_preference("network.proxy.type", 1) firefox_profile.set_preference("network.proxy.http", proxy_address) firefox_profile.set_preference("network.proxy.http_port", int(proxy_port)) firefox_profile.set_preference("network.proxy.ssl", proxy_address) firefox_profile.set_preference("network.proxy.ssl_port", int(proxy_port)) # mute audio while watching stories firefox_profile.set_preference("media.volume_scale", "0.0") # prevent Hide Selenium Extension: error firefox_profile.set_preference("dom.webdriver.enabled", False) firefox_profile.set_preference("useAutomationExtension", False) firefox_profile.set_preference("general.platform.override", "iPhone") firefox_profile.update_preferences() # geckodriver log in specific user logfolder geckodriver_log = "{}geckodriver.log".format(logfolder) # cap = DesiredCapabilities().FIREFOX # cap["marionette"] = False # prefer user path before downloaded one driver_path = geckodriver_path or get_geckodriver() browser = webdriver.Firefox(firefox_profile=firefox_profile, executable_path=driver_path, log_path=geckodriver_log, options=firefox_options, capabilities=cap) # add extenions to hide selenium browser.install_addon(create_firefox_extension(), temporary=True) # converts to custom browser # browser = convert_selenium_browser(browser) # authenticate with popup alert window if proxy_username and proxy_password: proxy_authentication(browser, logger, proxy_username, proxy_password) browser.implicitly_wait(page_delay) # set mobile viewport (iPhone X) try: browser.set_window_size(375, 812) except UnexpectedAlertPresentException as exc: logger.exception("Unexpected alert on resizing web browser!\n\t" "{}".format(str(exc).encode("utf-8"))) close_browser(browser, False, logger) return browser, "Unexpected alert on browser resize" message = "Session started!" highlight_print("browser", message, "initialization", "info", logger) return browser, err_msg
def firefox(): options = Firefox_Options() #options.add_argument("--headless") driver = webdriver.Firefox() return driver
def set_selenium_local_session(proxy_address, proxy_port, proxy_username, proxy_password, proxy_chrome_extension, headless_browser, use_firefox, browser_profile_path, disable_image_load, page_delay, logger, random_user_agent): """Starts local session for a selenium server. Default case scenario.""" browser = None err_msg = '' # define the custom user agent fb_agent = ( 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ' '(KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' ) ua = UserAgent(cache = False, fallback = fb_agent) if use_firefox: firefox_options = Firefox_Options() user_agent = ua.random if random_user_agent else ua.firefox firefox_options.add_argument('user-agent={user_agent}' .format(user_agent = user_agent)) if headless_browser: firefox_options.add_argument('-headless') if browser_profile_path is not None: firefox_profile = webdriver.FirefoxProfile( browser_profile_path) else: firefox_profile = webdriver.FirefoxProfile() # set English language firefox_profile.set_preference('intl.accept_languages', 'en') if disable_image_load: # permissions.default.image = 2: Disable images load, # this setting can improve pageload & save bandwidth firefox_profile.set_preference('permissions.default.image', 2) if proxy_address and proxy_port: firefox_profile.set_preference('network.proxy.type', 1) firefox_profile.set_preference('network.proxy.http', proxy_address) firefox_profile.set_preference('network.proxy.http_port', proxy_port) firefox_profile.set_preference('network.proxy.ssl', proxy_address) firefox_profile.set_preference('network.proxy.ssl_port', proxy_port) browser = webdriver.Firefox(firefox_profile=firefox_profile, options=firefox_options) # converts to custom browser # browser = convert_selenium_browser(browser) # authenticate with popup alert window if (proxy_username and proxy_password): proxy_authentication(browser, logger, proxy_username, proxy_password) else: chromedriver_location = get_chromedriver_location() chrome_options = Options() chrome_options.add_argument('--mute-audio') chrome_options.add_argument('--dns-prefetch-disable') chrome_options.add_argument('--lang=en-US') chrome_options.add_argument('--disable-setuid-sandbox') chrome_options.add_argument('--no-sandbox') # this option implements Chrome Headless, a new (late 2017) # GUI-less browser. chromedriver 2.9 and above required if headless_browser: chrome_options.add_argument('--headless') if disable_image_load: chrome_options.add_argument( '--blink-settings=imagesEnabled=false') # replaces browser User Agent from "HeadlessChrome". user_agent = ua.random if random_user_agent else ua.chrome chrome_options.add_argument('user-agent={user_agent}' .format(user_agent = user_agent)) capabilities = DesiredCapabilities.CHROME # Proxy for chrome if proxy_address and proxy_port: prox = Proxy() proxy = ":".join([proxy_address, str(proxy_port)]) if headless_browser: chrome_options.add_argument( '--proxy-server=http://{}'.format(proxy)) else: prox.proxy_type = ProxyType.MANUAL prox.http_proxy = proxy prox.socks_proxy = proxy prox.ssl_proxy = proxy prox.add_to_capabilities(capabilities) # add proxy extension if proxy_chrome_extension and not headless_browser: chrome_options.add_extension(proxy_chrome_extension) # using saved profile for chrome if browser_profile_path is not None: chrome_options.add_argument( 'user-data-dir={}'.format(browser_profile_path)) chrome_prefs = { 'intl.accept_languages': 'en-US', } if disable_image_load: chrome_prefs['profile.managed_default_content_settings.images'] = 2 chrome_options.add_experimental_option('prefs', chrome_prefs) try: browser = webdriver.Chrome(chromedriver_location, desired_capabilities=capabilities, chrome_options=chrome_options) # gets custom instance # browser = convert_selenium_browser(browser) except WebDriverException as exc: logger.exception(exc) err_msg = 'ensure chromedriver is installed at {}'.format( Settings.chromedriver_location) return browser, err_msg # prevent: Message: unknown error: call function result missing 'value' matches = re.match(r'^(\d+\.\d+)', browser.capabilities['chrome'][ 'chromedriverVersion']) if float(matches.groups()[0]) < Settings.chromedriver_min_version: err_msg = 'chromedriver {} is not supported, expects {}+'.format( float(matches.groups()[0]), Settings.chromedriver_min_version) return browser, err_msg browser.implicitly_wait(page_delay) message = "Session started!" highlight_print('browser', message, "initialization", "info", logger) print('') return browser, err_msg
def set_selenium_local_session(proxy_address, proxy_port, proxy_chrome_extension, headless_browser, use_firefox, browser_profile_path, disable_image_load, page_delay, logger): """Starts local session for a selenium server. Default case scenario.""" browser = None err_msg = '' if use_firefox: firefox_options = Firefox_Options() if headless_browser: firefox_options.add_argument('-headless') if browser_profile_path is not None: firefox_profile = webdriver.FirefoxProfile(browser_profile_path) else: firefox_profile = webdriver.FirefoxProfile() if disable_image_load: # permissions.default.image = 2: Disable images load, # this setting can improve pageload & save bandwidth firefox_profile.set_preference('permissions.default.image', 2) if proxy_address and proxy_port: firefox_profile.set_preference('network.proxy.type', 1) firefox_profile.set_preference('network.proxy.http', proxy_address) firefox_profile.set_preference('network.proxy.http_port', proxy_port) firefox_profile.set_preference('network.proxy.ssl', proxy_address) firefox_profile.set_preference('network.proxy.ssl_port', proxy_port) browser = webdriver.Firefox(firefox_profile=firefox_profile, options=firefox_options) else: chromedriver_location = Settings.chromedriver_location chrome_options = Options() chrome_options.add_argument("--mute-audio") chrome_options.add_argument('--dns-prefetch-disable') chrome_options.add_argument('--lang=en-US') chrome_options.add_argument('--disable-setuid-sandbox') # this option implements Chrome Headless, a new (late 2017) # GUI-less browser. chromedriver 2.9 and above required if headless_browser: chrome_options.add_argument('--headless') chrome_options.add_argument('--no-sandbox') if disable_image_load: chrome_options.add_argument( '--blink-settings=imagesEnabled=false') # replaces browser User Agent from "HeadlessChrome". user_agent = "Chrome" chrome_options.add_argument( 'user-agent={user_agent}'.format(user_agent=user_agent)) capabilities = DesiredCapabilities.CHROME # Proxy for chrome if proxy_address and proxy_port: prox = Proxy() proxy = ":".join([proxy_address, str(proxy_port)]) prox.proxy_type = ProxyType.MANUAL prox.http_proxy = proxy prox.socks_proxy = proxy prox.ssl_proxy = proxy prox.add_to_capabilities(capabilities) # add proxy extension if proxy_chrome_extension and not headless_browser: chrome_options.add_extension(proxy_chrome_extension) # using saved profile for chrome if browser_profile_path is not None: chrome_options.add_argument( 'user-data-dir={}'.format(browser_profile_path)) chrome_prefs = { 'intl.accept_languages': 'en-US', } if disable_image_load: chrome_prefs['profile.managed_default_content_settings.images'] = 2 chrome_options.add_experimental_option('prefs', chrome_prefs) try: browser = webdriver.Chrome(chromedriver_location, desired_capabilities=capabilities, chrome_options=chrome_options) except WebDriverException as exc: logger.exception(exc) err_msg = 'ensure chromedriver is installed at {}'.format( Settings.chromedriver_location) return browser, err_msg # prevent: Message: unknown error: call function result missing 'value' matches = re.match( r'^(\d+\.\d+)', browser.capabilities['chrome']['chromedriverVersion']) if float(matches.groups()[0]) < Settings.chromedriver_min_version: err_msg = 'chromedriver {} is not supported, expects {}+'.format( float(matches.groups()[0]), Settings.chromedriver_min_version) return browser, err_msg browser.implicitly_wait(page_delay) message = "Session started!" highlight_print('browser', message, "initialization", "info", logger) print('') return browser, err_msg
def set_selenium_local_session( proxy_address, proxy_port, proxy_username, proxy_password, proxy_chrome_extension, headless_browser, use_firefox, browser_profile_path, disable_image_load, page_delay, geckodriver_path, logger, ): """Starts local session for a selenium server. Default case scenario.""" browser = None err_msg = "" # set Firefox Agent to mobile agent user_agent = ( "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 " "(KHTML, like Gecko) FxiOS/18.1 Mobile/16B92 Safari/605.1.15") # keep user_agent Settings.user_agent = user_agent if use_firefox: firefox_options = Firefox_Options() if headless_browser: firefox_options.add_argument("-headless") if browser_profile_path is not None: firefox_profile = webdriver.FirefoxProfile(browser_profile_path) else: firefox_profile = webdriver.FirefoxProfile() # set English language firefox_profile.set_preference("intl.accept_languages", "en-US") firefox_profile.set_preference("general.useragent.override", user_agent) if disable_image_load: # permissions.default.image = 2: Disable images load, # this setting can improve pageload & save bandwidth firefox_profile.set_preference("permissions.default.image", 2) if proxy_address and proxy_port: firefox_profile.set_preference("network.proxy.type", 1) firefox_profile.set_preference("network.proxy.http", proxy_address) firefox_profile.set_preference("network.proxy.http_port", int(proxy_port)) firefox_profile.set_preference("network.proxy.ssl", proxy_address) firefox_profile.set_preference("network.proxy.ssl_port", int(proxy_port)) # mute audio while watching stories firefox_profile.set_preference("media.volume_scale", "0.0") # prefer user path before downloaded one driver_path = geckodriver_path or get_geckodriver() browser = webdriver.Firefox( firefox_profile=firefox_profile, executable_path=driver_path, options=firefox_options, ) # add extenions to hide selenium browser.install_addon(create_firefox_extension(), temporary=True) # converts to custom browser # browser = convert_selenium_browser(browser) # authenticate with popup alert window if proxy_username and proxy_password: proxy_authentication(browser, logger, proxy_username, proxy_password) else: chromedriver_location = get_chromedriver_location() chrome_options = Options() # chrome_options.add_argument("--disable-infobars") chrome_options.add_argument("--mute-audio") chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--dns-prefetch-disable') chrome_options.add_argument('--lang=en-US') chrome_options.add_argument('--disable-setuid-sandbox') chrome_options.add_argument('--incognito') mobile_emulation = {"deviceName": "iPhone 5"} chrome_options.add_experimental_option("excludeSwitches", ['enable-automation']) chrome_options.add_experimental_option("mobileEmulation", mobile_emulation) # this option implements Chrome Headless, a new (late 2017) # GUI-less browser. chromedriver 2.9 and above required if headless_browser: chrome_options.add_argument('--headless') chrome_options.add_argument('--no-sandbox') if disable_image_load: chrome_options.add_argument( '--blink-settings=imagesEnabled=false') # replaces browser User Agent from "HeadlessChrome". user_agent = "Chrome" chrome_options.add_argument( 'user-agent={user_agent}'.format(user_agent=user_agent)) capabilities = DesiredCapabilities.CHROME # Proxy for chrome if proxy_address and proxy_port: prox = Proxy() proxy = ":".join([proxy_address, str(proxy_port)]) if headless_browser: chrome_options.add_argument( '--proxy-server=http://{}'.format(proxy)) else: prox.proxy_type = ProxyType.MANUAL prox.http_proxy = proxy prox.socks_proxy = proxy prox.ssl_proxy = proxy prox.add_to_capabilities(capabilities) # add proxy extension if proxy_chrome_extension and not headless_browser: chrome_options.add_extension(proxy_chrome_extension) # using saved profile for chrome if browser_profile_path is not None: chrome_options.add_argument( 'user-data-dir={}'.format(browser_profile_path)) chrome_prefs = { 'intl.accept_languages': 'en-US', } if disable_image_load: chrome_prefs['profile.managed_default_content_settings.images'] = 2 chrome_options.add_experimental_option('prefs', chrome_prefs) try: browser = webdriver.Chrome(chromedriver_location, desired_capabilities=capabilities, chrome_options=chrome_options) # gets custom instance # browser = convert_selenium_browser(browser) except WebDriverException as exc: logger.exception(exc) err_msg = 'ensure chromedriver is installed at {}'.format( Settings.chromedriver_location) return browser, err_msg # prevent: Message: unknown error: call function result missing 'value' matches = re.match( r'^(\d+\.\d+)', browser.capabilities['chrome']['chromedriverVersion']) if float(matches.groups()[0]) < Settings.chromedriver_min_version: err_msg = 'chromedriver {} is not supported, expects {}+'.format( float(matches.groups()[0]), Settings.chromedriver_min_version) return browser, err_msg browser.implicitly_wait(page_delay) # set mobile viewport (iPhone X) browser.set_window_size(375, 812) message = "Session started!" highlight_print("browser", message, "initialization", "info", logger) return browser, err_msg
class FirefoxCompatibility(UITesting): selenium_server = "selenium-firefox" options = Firefox_Options() platform = 'Firefox'
def set_selenium_local_session( proxy_address, proxy_port, headless_browser, disable_image_load, page_delay, logger, ): """Starts local session for a selenium server. Default case scenario.""" browser = None # set Firefox Agent to mobile agent user_agent = ( "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 " "(KHTML, like Gecko) FxiOS/18.1 Mobile/16B92 Safari/605.1.15") geckodriver_path = os.path.join(os.path.abspath('.'), 'boot', 'geckodriver.exe') firefox_options = Firefox_Options() if headless_browser: firefox_options.add_argument("-headless") firefox_profile = webdriver.FirefoxProfile() # disable notification # firefox_profile.set_preference('dom.webnotifications.enabled', False) # set English language firefox_profile.set_preference("intl.accept_languages", "en-US") firefox_profile.set_preference("general.useragent.override", user_agent) if disable_image_load: # permissions.default.image = 2: Disable images load, # this setting can improve pageload & save bandwidth firefox_profile.set_preference("permissions.default.image", 2) if proxy_address and proxy_port: firefox_profile.set_preference("network.proxy.type", 1) firefox_profile.set_preference("network.proxy.http", proxy_address) firefox_profile.set_preference("network.proxy.http_port", int(proxy_port)) firefox_profile.set_preference("network.proxy.ssl", proxy_address) firefox_profile.set_preference("network.proxy.ssl_port", int(proxy_port)) # mute audio while watching stories firefox_profile.set_preference("media.volume_scale", "0.0") # prevent Hide Selenium Extension: error firefox_profile.set_preference("dom.webdriver.enabled", False) firefox_profile.set_preference("useAutomationExtension", False) firefox_profile.set_preference("general.platform.override", "iPhone") firefox_profile.update_preferences() # prefer user path before downloaded one driver_path = geckodriver_path or get_geckodriver() browser = webdriver.Firefox( firefox_profile=firefox_profile, executable_path=driver_path, options=firefox_options, ) # add extenions to hide selenium browser.install_addon(create_firefox_extension(), temporary=True) # converts to custom browser browser = convert_selenium_browser(browser) browser.implicitly_wait(page_delay) # set mobile viewport (iPhone X) try: browser.set_window_size(375, 812) except UnexpectedAlertPresentException as exc: logger.exception("Unexpected alert on resizing web browser!\n\t" "{}".format(str(exc).encode("utf-8"))) close_browser(browser, False, logger) return browser, "Unexpected alert on browser resize" logger.info("Session started!") return browser
FF_PRF_DIR_DEFAULT = str(FF_PRF_DIR, 'utf-8') elif sys.platform == 'win32': import os import glob APPDATA = os.getenv('APPDATA') FF_PRF_DIR = "%s\\Mozilla\\Firefox\\Profiles\\" % APPDATA PATTERN = FF_PRF_DIR + "*default*" FF_PRF_DIR_DEFAULT = glob.glob(PATTERN)[0] return FF_PRF_DIR_DEFAULT profile_name = get_firefox_profile_dir() print(profile_name) firefox_options = Firefox_Options() firefox_options.binary = "/usr/lib/firefox/firefox" url_booyah = 'https://booyah.live/channels/17686673' #firefox_options.add_argument("--headless") def build_driver(): driver = webdriver.Firefox(executable_path='/usr/bin/geckodriver13', firefox_profile=profile_name, options=firefox_options) driver.maximize_window() return driver
def set_selenium_local_session( proxy_address, proxy_port, proxy_username, proxy_password, headless_browser, browser_profile_path, disable_image_load, page_delay, geckodriver_path, logger, ): """Starts local session for a selenium server. Default case scenario.""" print('set_selenium_local_session', geckodriver_path) browser = None err_msg = "" # set Firefox Agent to mobile agent user_agent = ( "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 " "(KHTML, like Gecko) FxiOS/18.1 Mobile/16B92 Safari/605.1.15" ) # keep user_agent Settings.user_agent = user_agent firefox_options = Firefox_Options() if headless_browser: firefox_options.add_argument("-headless") if browser_profile_path is not None: firefox_profile = webdriver.FirefoxProfile(browser_profile_path) else: firefox_profile = webdriver.FirefoxProfile() # set English language firefox_profile.set_preference("intl.accept_languages", "en-US") firefox_profile.set_preference("general.useragent.override", user_agent) if disable_image_load: # permissions.default.image = 2: Disable images load, # this setting can improve pageload & save bandwidth firefox_profile.set_preference("permissions.default.image", 2) if proxy_address and proxy_port: firefox_profile.set_preference("network.proxy.type", 1) firefox_profile.set_preference("network.proxy.http", proxy_address) firefox_profile.set_preference("network.proxy.http_port", int(proxy_port)) firefox_profile.set_preference("network.proxy.ssl", proxy_address) firefox_profile.set_preference("network.proxy.ssl_port", int(proxy_port)) # mute audio while watching stories firefox_profile.set_preference("media.volume_scale", "0.0") # prefer user path before downloaded one driver_path = geckodriver_path or get_geckodriver() browser = webdriver.Firefox( firefox_profile=firefox_profile, executable_path=driver_path, options=firefox_options, ) # add extenions to hide selenium browser.install_addon(create_firefox_extension(), temporary=True) # converts to custom browser # browser = convert_selenium_browser(browser) # authenticate with popup alert window if proxy_username and proxy_password: proxy_authentication(browser, logger, proxy_username, proxy_password) browser.implicitly_wait(page_delay) # set mobile viewport (iPhone X) browser.set_window_size(375, 812) message = "Session started!" highlight_print("browser", message, "initialization", "info", logger) return browser, err_msg
def set_selenium_local_session( proxy_address, proxy_port, proxy_username, proxy_password, headless_browser, browser_profile_path, disable_image_load, page_delay, geckodriver_path, browser_executable_path, logfolder, logger, geckodriver_log_level, ): """Starts local session for a selenium server. Default case scenario.""" browser = None err_msg = "" firefox_options = Firefox_Options() if headless_browser: firefox_options.add_argument("-headless") if browser_profile_path is not None: firefox_profile = webdriver.FirefoxProfile(browser_profile_path) else: firefox_profile = webdriver.FirefoxProfile() if browser_executable_path is not None: firefox_options.binary = browser_executable_path # set "info" by default # set "trace" for debubging, Development only firefox_options.log.level = geckodriver_log_level # set English language firefox_profile.set_preference("intl.accept_languages", "en-US") firefox_profile.set_preference("general.useragent.override", Settings.user_agent) if disable_image_load: # permissions.default.image = 2: Disable images load, # this setting can improve pageload & save bandwidth firefox_profile.set_preference("permissions.default.image", 2) if proxy_address and proxy_port: firefox_profile.set_preference("network.proxy.type", 1) firefox_profile.set_preference("network.proxy.http", proxy_address) firefox_profile.set_preference("network.proxy.http_port", int(proxy_port)) firefox_profile.set_preference("network.proxy.ssl", proxy_address) firefox_profile.set_preference("network.proxy.ssl_port", int(proxy_port)) # mute audio while watching stories firefox_profile.set_preference("media.volume_scale", "0.0") # prevent Hide Selenium Extension: error firefox_profile.set_preference("dom.webdriver.enabled", False) firefox_profile.set_preference("useAutomationExtension", False) firefox_profile.set_preference("general.platform.override", "iPhone") firefox_profile.update_preferences() # geckodriver log in specific user logfolder geckodriver_log = "{}geckodriver.log".format(logfolder) # prefer user path before downloaded one driver_path = geckodriver_path or get_geckodriver() browser = webdriver.Firefox( firefox_profile=firefox_profile, executable_path=driver_path, log_path=geckodriver_log, options=firefox_options, ) # add extenions to hide selenium browser.install_addon(create_firefox_extension(), temporary=True) # converts to custom browser # browser = convert_selenium_browser(browser) # authenticate with popup alert window if proxy_username and proxy_password: proxy_authentication(browser, logger, proxy_username, proxy_password) browser.implicitly_wait(page_delay) # Apple iPhone X: 375, 812 # Apple iPhone XS Max: 414, 896 try: browser.set_window_size(414, 896) except UnexpectedAlertPresentException as exc: logger.exception( "Unexpected alert on resizing web browser!\n\t" "{}".format(str(exc).encode("utf-8")) ) close_browser(browser, False, logger) return browser, "Unexpected alert on browser resize" message = "Session started!" highlight_print("browser", message, "initialization", "info", logger) return browser, err_msg