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
Exemple #3
0
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()
Exemple #5
0
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
Exemple #6
0
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
Exemple #7
0
    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)
Exemple #8
0
    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)
Exemple #9
0
    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)
Exemple #10
0
    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()
Exemple #11
0
 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
Exemple #12
0
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
Exemple #14
0
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
Exemple #15
0
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
Exemple #16
0
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
Exemple #17
0
class FirefoxCompatibility(UITesting):

    selenium_server = "selenium-firefox"
    options = Firefox_Options()
    platform = 'Firefox'
Exemple #18
0
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

Exemple #20
0
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
Exemple #21
0
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