def test_manual_proxy_is_set_in_profile(self):
        # The setup gave us a browser but we dont need it
        self.driver.quit()

        self.profile = webdriver.FirefoxProfile()
        proxy = Proxy()
        proxy.no_proxy = 'localhost, foo.localhost'
        proxy.http_proxy = 'some.url:1234'
        proxy.ftp_proxy = None
        proxy.sslProxy = 'some2.url'

        self.profile.set_proxy(proxy)

        assert self.profile.default_preferences[
            "network.proxy.type"] == ProxyType.MANUAL['ff_value']
        assert self.profile.default_preferences[
            "network.proxy.no_proxies_on"] == 'localhost, foo.localhost'
        assert self.profile.default_preferences[
            "network.proxy.http"] == 'some.url'
        assert self.profile.default_preferences[
            "network.proxy.http_port"] == 1234
        assert self.profile.default_preferences[
            "network.proxy.ssl"] == 'some2.url'
        assert "network.proxy.ssl_port" not in self.profile.default_preferences
        assert "network.proxy.ftp" not in self.profile.default_preferences
Exemple #2
0
    def get_capabilities(self):
        capabilities = DesiredCapabilities.FIREFOX.copy()
        # capabilities = DesiredCapabilities.CHROME.copy()
        # print('get_capabilities')
        proxy = self.profile.proxy

        if proxy is None or not proxy.active:
            # use random default proxy
            proxies = models.Proxy.objects.filter(active=True,
                                                  default=True).all()
            if proxies:
                proxy = random.choice(proxies)
            else:
                proxy = None

        if proxy:
            # print('setting a proxy')
            # print(proxy)
            prox = Proxy()
            prox.proxy_type = ProxyType.MANUAL
            if proxy.proxy_type == proxy.HTTP:
                # print('HTTP proxy')
                prox.http_proxy = f'{proxy.ip}:{proxy.port}'
                prox.ssl_proxy = f'{proxy.ip}:{proxy.port}'
                prox.ftp_proxy = f'{proxy.ip}:{proxy.port}'
            elif proxy.proxy_type == proxy.SOCKS:
                # print('Socks proxy')
                prox.socks_proxy = f'{proxy.ip}:{proxy.port}'
                prox.socks_username = proxy.username
                prox.socks_password = proxy.password

            prox.add_to_capabilities(capabilities)

        # print(capabilities)
        return capabilities
Exemple #3
0
def get_browser(PROXY):

    import os
    luminati_host = os.environ.get('LUMINATI_HOST')
    luminati_port = os.environ.get('LUMINATI_PORT')
    PROXY = 'http://' + luminati_host + ':' + luminati_port
    print(PROXY)

    proxy = Proxy()
    proxy.http_proxy = PROXY
    proxy.ftp_proxy = PROXY
    proxy.sslProxy = PROXY
    proxy.no_proxy = "localhost" #etc... ;)
    proxy.proxy_type = ProxyType.MANUAL

    capabilities = webdriver.DesiredCapabilities.CHROME

    proxy.add_to_capabilities(capabilities)
    # path = '/home/balu/balu/work/Courses/luminati+selinium/testapp/app/helper_files/chromedriver'
    # driver = webdriver.Chrome(executable_path = path, desired_capabilities=capabilities)
    
    driver = webdriver.Remote("http://172.20.128.1:4444/wd/hub", desired_capabilities=capabilities)
    url = 'https://lumtest.com/myip.json'
    driver.get(url)
    print(driver.page_source)
    
    return driver
Exemple #4
0
 def set_selenium_proxy(self, selenium_proxy):
     proxy = Proxy()
     proxy.http_proxy = selenium_proxy
     proxy.ftp_proxy = selenium_proxy
     proxy.sslProxy = selenium_proxy
     proxy.no_proxy = None
     proxy.proxy_type = ProxyType.MANUAL
     proxy.add_to_capabilities(self.capabilities)
     self.capabilities["acceptSslCerts"] = True
def get_proxy(proxies):
    print(proxies)
    prox = Proxy()
    prox.proxy_type = ProxyType.MANUAL
    prox.http_proxy = proxies
    prox.ftp_proxy = proxies
    prox.ssl_proxy = proxies
    capabilities = webdriver.DesiredCapabilities.CHROME
    prox.add_to_capabilities(capabilities)
    return capabilities
Exemple #6
0
    def __proxy(self):
        if not hasattr(self.config, 'proxy'):
            return None

        PROXY = "{}:{}".format(self.config.proxy.host, self.config.proxy.port)

        proxy = Proxy()
        proxy.http_proxy = PROXY
        proxy.ftp_proxy = PROXY
        proxy.sslProxy = PROXY
        proxy.no_proxy = self.config.proxy.no_proxy
        proxy.proxy_type = ProxyType.MANUAL
        proxy.autodetect = False

        return proxy
def test_manual_proxy_is_set_in_profile():
    profile = FirefoxProfile()
    proxy = Proxy()
    proxy.no_proxy = 'localhost, foo.localhost'
    proxy.http_proxy = 'some.url:1234'
    proxy.ftp_proxy = None
    proxy.sslProxy = 'some2.url'

    profile.set_proxy(proxy)
    assert profile.default_preferences["network.proxy.type"] == ProxyType.MANUAL['ff_value']
    assert profile.default_preferences["network.proxy.no_proxies_on"] == 'localhost, foo.localhost'
    assert profile.default_preferences["network.proxy.http"] == 'some.url'
    assert profile.default_preferences["network.proxy.http_port"] == 1234
    assert profile.default_preferences["network.proxy.ssl"] == 'some2.url'
    assert "network.proxy.ssl_port" not in profile.default_preferences
    assert "network.proxy.ftp" not in profile.default_preferences
Exemple #8
0
    def testCanAddManualProxyToDesiredCapabilities(self):
        proxy = Proxy()
        proxy.http_proxy = self.MANUAL_PROXY["httpProxy"]
        proxy.ftp_proxy = self.MANUAL_PROXY["ftpProxy"]
        proxy.no_proxy = self.MANUAL_PROXY["noProxy"]
        proxy.sslProxy = self.MANUAL_PROXY["sslProxy"]
        proxy.socksProxy = self.MANUAL_PROXY["socksProxy"]
        proxy.socksUsername = self.MANUAL_PROXY["socksUsername"]
        proxy.socksPassword = self.MANUAL_PROXY["socksPassword"]

        desired_capabilities = {}
        proxy.add_to_capabilities(desired_capabilities)

        proxy_capabilities = self.MANUAL_PROXY.copy()
        proxy_capabilities["proxyType"] = "MANUAL"
        expected_capabilities = {"proxy": proxy_capabilities}
        self.assertEqual(expected_capabilities, desired_capabilities)
Exemple #9
0
    def testCanAddManualProxyToDesiredCapabilities(self):
        proxy = Proxy()
        proxy.http_proxy = self.MANUAL_PROXY['httpProxy']
        proxy.ftp_proxy = self.MANUAL_PROXY['ftpProxy']
        proxy.no_proxy = self.MANUAL_PROXY['noProxy']
        proxy.sslProxy = self.MANUAL_PROXY['sslProxy']
        proxy.socksProxy = self.MANUAL_PROXY['socksProxy']
        proxy.socksUsername = self.MANUAL_PROXY['socksUsername']
        proxy.socksPassword = self.MANUAL_PROXY['socksPassword']

        desired_capabilities = {}
        proxy.add_to_capabilities(desired_capabilities)

        proxy_capabilities = self.MANUAL_PROXY.copy()
        proxy_capabilities['proxyType'] = 'MANUAL'
        expected_capabilities = {'proxy': proxy_capabilities}
        self.assertEqual(expected_capabilities, desired_capabilities)
Exemple #10
0
    def testCanAddManualProxyToDesiredCapabilities(self):
        proxy = Proxy()
        proxy.http_proxy = self.MANUAL_PROXY['httpProxy']
        proxy.ftp_proxy = self.MANUAL_PROXY['ftpProxy']
        proxy.no_proxy = self.MANUAL_PROXY['noProxy']
        proxy.sslProxy = self.MANUAL_PROXY['sslProxy']
        proxy.socksProxy = self.MANUAL_PROXY['socksProxy']
        proxy.socksUsername = self.MANUAL_PROXY['socksUsername']
        proxy.socksPassword = self.MANUAL_PROXY['socksPassword']

        desired_capabilities = {}
        proxy.add_to_capabilities(desired_capabilities)

        proxy_capabilities = self.MANUAL_PROXY.copy()
        proxy_capabilities['proxyType'] = 'MANUAL'
        expected_capabilities = {'proxy': proxy_capabilities}
        self.assertEqual(expected_capabilities, desired_capabilities)
def test_manual_proxy_is_set_in_profile():
    profile = FirefoxProfile()
    proxy = Proxy()
    proxy.no_proxy = 'localhost, foo.localhost'
    proxy.http_proxy = 'some.url:1234'
    proxy.ftp_proxy = None
    proxy.sslProxy = 'some2.url'

    profile.set_proxy(proxy)
    assert profile.default_preferences[
        "network.proxy.type"] == ProxyType.MANUAL['ff_value']
    assert profile.default_preferences[
        "network.proxy.no_proxies_on"] == 'localhost, foo.localhost'
    assert profile.default_preferences["network.proxy.http"] == 'some.url'
    assert profile.default_preferences["network.proxy.http_port"] == 1234
    assert profile.default_preferences["network.proxy.ssl"] == 'some2.url'
    assert "network.proxy.ssl_port" not in profile.default_preferences
    assert "network.proxy.ftp" not in profile.default_preferences
Exemple #12
0
def test_can_add_manual_proxy_to_desired_capabilities():
    proxy = Proxy()
    proxy.http_proxy = MANUAL_PROXY['httpProxy']
    proxy.ftp_proxy = MANUAL_PROXY['ftpProxy']
    proxy.no_proxy = MANUAL_PROXY['noProxy']
    proxy.sslProxy = MANUAL_PROXY['sslProxy']
    proxy.socksProxy = MANUAL_PROXY['socksProxy']
    proxy.socksUsername = MANUAL_PROXY['socksUsername']
    proxy.socksPassword = MANUAL_PROXY['socksPassword']
    proxy.socksVersion = MANUAL_PROXY['socksVersion']

    desired_capabilities = {}
    proxy.add_to_capabilities(desired_capabilities)

    proxy_capabilities = MANUAL_PROXY.copy()
    proxy_capabilities['proxyType'] = 'MANUAL'
    expected_capabilities = {'proxy': proxy_capabilities}
    assert expected_capabilities == desired_capabilities
Exemple #13
0
	def get_capabilities(self):
		capabilities = DesiredCapabilities.FIREFOX.copy()
		# capabilities = DesiredCapabilities.CHROME.copy()
		# print('get_capabilities')
		proxy = self.profile.proxy

		if proxy:
			# print('setting a proxy')
			# print(proxy)
			prox = Proxy()
			prox.proxy_type = ProxyType.MANUAL
			prox.http_proxy = f'{proxy.ip}:{proxy.port}'
			prox.ssl_proxy = f'{proxy.ip}:{proxy.port}'
			prox.ftp_proxy = f'{proxy.ip}:{proxy.port}'

			prox.add_to_capabilities(capabilities)

		# print(capabilities)
		return capabilities
Exemple #14
0
    def test_manual_proxy_is_set_in_profile(self):
        # The setup gave us a browser but we dont need it
        self.driver.quit()

        self.profile = webdriver.FirefoxProfile()
        proxy = Proxy()
        proxy.no_proxy = 'localhost, foo.localhost'
        proxy.http_proxy = 'some.url:1234'
        proxy.ftp_proxy = None
        proxy.sslProxy = 'some2.url'

        self.profile.set_proxy(proxy)

        assert self.profile.default_preferences["network.proxy.type"] == ProxyType.MANUAL['ff_value']
        assert self.profile.default_preferences["network.proxy.no_proxies_on"] == 'localhost, foo.localhost'
        assert self.profile.default_preferences["network.proxy.http"] == 'some.url'
        assert self.profile.default_preferences["network.proxy.http_port"] == 1234
        assert self.profile.default_preferences["network.proxy.ssl"] == 'some2.url'
        assert "network.proxy.ssl_port" not in self.profile.default_preferences
        assert "network.proxy.ftp" not in self.profile.default_preferences
def getFirefoxDriver(fullproxy):
    try:
        path = 'C:\\webdrivers\\geckodriver.exe'
        capabilities = DesiredCapabilities.FIREFOX
        capabilities['marionette'] = True
        #capabilities['CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR'] = org.openqa.selenium.UnexpectedAlertBehaviour.ACCEPT
        opts = Options()
        #opts.set_headless()
        #assert opts.headless

        profile = webdriver.FirefoxProfile()
        profile.set_preference("general.useragent.override",
                               UserAgent().random)
        profile.set_preference("browser.cache.disk.enable", False)
        profile.set_preference("browser.cache.memory.enable", False)
        profile.set_preference("browser.cache.offline.enable", False)
        profile.set_preference("network.http.use-cache", False)
        profile.update_preferences()

        if fullproxy != "":
            proxy = fullproxy.split(' ')[0]
            host = proxy.split(':')[0]
            port = proxy.split(':')[1]
            conditionalPrint("proxy used : " + proxy)
            prox = Proxy()
            socksVersion = 5
            proxy = fullproxy.split(' ')[0]
            prox.proxy_type = ProxyType.MANUAL
            prox.http_proxy = proxy
            prox.ftp_proxy = proxy
            prox.ssl_proxy = proxy
            prox.add_to_capabilities(capabilities)
        driver = webdriver.Firefox(executable_path=path,
                                   capabilities=capabilities,
                                   firefox_options=opts)

        return driver
    except Exception:
        LogError(traceback, "fullproxy = " + fullproxy)
    return None
Exemple #16
0
def get_ie_driver():
    """
    https://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#using-a-proxy
    https://github.com/SeleniumHQ/selenium/wiki/DesiredCapabilities#proxy-json-object
    使用方式:先用正常页面不带代理的,启动多个窗口登录。登录成功后,再切换回代理。
    TODO: 需要设置刷新的时候也走代理,本地模式。 服务模式不需要。
    :return:
    """
    proxy = get_proxy()
    driver = None
    if proxy:
        prox = Proxy()
        prox.proxy_type = ProxyType.MANUAL
        prox.http_proxy = proxy
        prox.socks_proxy = proxy
        prox.ssl_proxy = proxy
        prox.ftp_proxy = proxy

        LOGGER.info("try to use proxy: %s", proxy)
        caps = webdriver.DesiredCapabilities.INTERNETEXPLORER.copy()
        # caps['proxy'] = {
        #     "httpProxy": proxy,
        #     "ftpProxy": proxy,
        #     "sslProxy": proxy,
        #     "socks_proxy": proxy,
        #     "noProxy": None,
        #     "proxyType": "MANUAL",
        #     "autodetect": False
        # }

        prox.add_to_capabilities(caps)
        # caps["proxy"] = {"proxyType": "manual", "httpProxy": proxy}

        opt = options.Options()
        opt.use_per_process_proxy = True

        driver = webdriver.Ie(capabilities=caps, options=opt)
    else:
        driver = webdriver.Ie()
    return driver
Exemple #17
0
    def testCanAddToDesiredCapabilities(self):
        desired_capabilities = {}
        proxy = Proxy()
        proxy.http_proxy = 'some.url:1234'
        proxy.ftp_proxy = 'ftp.proxy:1234'
        proxy.no_proxy = 'localhost, foo.localhost'
        proxy.sslProxy = 'ssl.proxy:1234'
        proxy.autodetect = 'True'

        proxy.add_to_capabilities(desired_capabilities)

        expected_capabilities = {
            'proxy': {
                'proxyType': 'MANUAL',
                'httpProxy': 'some.url:1234',
                'ftpProxy': 'ftp.proxy:1234',
                'noProxy': 'localhost, foo.localhost',
                'sslProxy': 'ssl.proxy:1234',
                'autodetect': 'True'
            }
        }
        print 'descap', desired_capabilities

        self.assertEqual(expected_capabilities, desired_capabilities)
Exemple #18
0
    def testCanAddToDesiredCapabilities(self):
        desired_capabilities = {}
        proxy = Proxy()
        proxy.http_proxy = 'some.url:1234'
        proxy.ftp_proxy = 'ftp.proxy:1234'
        proxy.no_proxy = 'localhost, foo.localhost'
        proxy.sslProxy = 'ssl.proxy:1234'
        proxy.autodetect = 'True'

        proxy.add_to_capabilities(desired_capabilities)

        expected_capabilities = {
            'proxy': {
                'proxyType': 'MANUAL',
                'httpProxy': 'some.url:1234',
                'ftpProxy': 'ftp.proxy:1234',
                'noProxy': 'localhost, foo.localhost',
                'sslProxy': 'ssl.proxy:1234',
                'autodetect': 'True'
            }
        }
        print 'descap', desired_capabilities

        self.assertEqual(expected_capabilities, desired_capabilities)
Exemple #19
0
    def open_ff_with_profile(self, app, name):
        """
        """
        if name in self._browsers:
            BuiltIn().log("Browser `%s` already existed" % name)
            return
        browser = 'firefox'
        login_url = '/'
        scheme = 'https'
        ignore_dead_node = Common.get_config_value('ignore-dead-node')

        app_info = Common.LOCAL['webapp'][app]
        device = app_info['device']
        device_info = Common.GLOBAL['device'][device]
        ip = device_info['ip']
        type = device_info['type']
        template = Common.GLOBAL['access-template'][type]
        profile = template['profile']
        auth = {}
        BuiltIn().log('    Using profile `%s`' % profile)
        auth['username'] = Common.GLOBAL['auth']['plain-text'][profile]['user']
        auth['password'] = Common.GLOBAL['auth']['plain-text'][profile]['pass']
        if 'login-url' in app_info and app_info['login-url']:
            login_url = app_info['login-url']
        if 'scheme' in app_info and app_info['scheme']:
            scheme = app_info['scheme']
        if 'browser' in app_info and app_info['browser']:
            browser = app_info['browser']
        if 'local-storage' in app_info and app_info['local-storage']:
            local_storage = app_info['local-storage']
        else:
            local_storage = None
        if 'login-xpath' in template:
            login_xpath = template['login-xpath']

        # firefox options
        profile_dir = Common.get_result_path() + '/.%s_%s_profile' % (profile,
                                                                      name)

        if not os.path.exists(profile_dir): os.mkdir(profile_dir)
        os.chmod(profile_dir, 0o777)
        ff_opt = Options()
        # ff_opt.log.level = "TRACE"
        ff_opt.log.level = "INFO"
        # ff_opt.add_argument("--lang=en_US")
        # ff_opt.add_argument("-profile")
        # ff_opt.add_argument(profile_dir)

        # firefox profiles
        # ff_pf = webdriver.FirefoxProfile()
        ff_pf = webdriver.FirefoxProfile(profile_dir)
        BuiltIn().log("Open FF with profile `%s`" % ff_pf.path)
        if 'profile' in app_info and 'download-dir' in app_info['profile']:
            download_path = app_info['profile']['download-path']
        else:
            download_path = Common.get_result_path()
        if 'profile' in app_info and 'auto-save-mime' in app_info['profile']:
            auto_save_mime = app_info['profile']['auto-save-mime']
            ff_pf.set_preference("browser.helperApps.neverAsk.saveToDisk",
                                 app_info['profile']['auto-save-mime'])
        ff_pf.set_preference("browser.download.folderList", 2)
        ff_pf.set_preference("browser.download.dir", download_path)
        ff_pf.set_preference("browser.download.manager.showWhenStarting",
                             False)
        ff_pf.set_preference("browser.download.useDownloadDir", True)
        ff_pf.set_preference("browser.download.panel.shown", False)
        ff_pf.set_preference("gfx.canvas.azure.backends", "skia")
        ff_pf.set_preference("gfx.content.azure.backends", "skia")
        ff_pf.set_preference("general.warnOnAboutConfig", False)
        ff_pf.set_preference("javascript.enabled", True)
        # lang = Common.get_config_value('web','lang','ja, en-US, en')
        lang = Common.get_config_value('web', 'lang', 'en-US, en')
        ff_pf.set_preference("intl.accept_languages", lang)
        # ff_pf.set_preference("font.language.group","x-western");
        # ff_pf.set_preference("font.language.group","ja");
        # ff_pf.set_preference("browser.cache.disk.enable",False)
        # ff_pf.set_preference("browser.cache.memory.enable",False)
        # ff_pf.set_preference("browser.cache.offline.enable",False)
        # ff_pf.set_preference("network.http.use-cache",False)
        ff_pf.native_events_enabled = True
        ff_pf.update_preferences()

        # firefox capabilities
        ff_cap = webdriver.DesiredCapabilities.FIREFOX
        ff_cap['javascriptEnabled'] = True
        ff_cap['webStorageEnabled'] = True
        if 'proxy' in app_info and app_info['proxy']:
            proxy = Proxy()
            proxy.proxy_type = ProxyType.MANUAL
            if 'http' in app_info['proxy']:
                proxy.http_proxy = app_info['proxy']['http']
            if 'ssl' in app_info['proxy']:
                proxy.ssl_proxy = app_info['proxy']['ssl']
            if 'https' in app_info['proxy']:
                proxy.ssl_proxy = app_info['proxy']['https']
            if 'ftp' in app_info['proxy']:
                proxy.ftp_proxy = app_info['proxy']['ftp']
            proxy.add_to_capabilities(ff_cap)

        # create webdriver
        alias = '_%s_%s' % (profile, name)
        self._selenium.create_webdriver(
            'Firefox',
            alias=alias,
            options=ff_opt,
            firefox_profile=ff_pf,
            desired_capabilities=ff_cap,
            service_log_path=Common.get_result_path() + '/selenium.log')
        BuiltIn().log('Create a webdriver with alias `%s`' % alias)

        # open a browser and retry 3 times if it is necessary
        try:
            retry = 0
            while retry <= 3:
                try:
                    url = '%s://%s/%s' % (scheme, ip, login_url)
                    self._selenium.go_to(url)
                    time.sleep(5)
                    break
                except WebDriverException as err:
                    BuiltIn().log(err)
                    BuiltIn().log(
                        'Will retry one more time for browser session')
                    retry += 1
                    if retry == 3: raise
                # finally:
                # shutil.rmtree(fp.path,ignore_errors=True)
            parsed_uri = urlparse(url)
            self._site = '%s://%s' % (parsed_uri.scheme, parsed_uri.netloc)
        except Exception as err:
            if not ignore_dead_node:
                err_msg = "ERROR: Error occured when connecting to `%s`" % (
                    name)
                BuiltIn().log(err_msg)
                raise
            else:
                warn_msg = "WARN: Error occured when connect to `%s` but was ignored" % (
                    name)
                BuiltIn().log(warn_msg)
                BuiltIn().log_to_console(warn_msg)

        self._current_name = name
        browser_info = {}
        browser_info['url'] = url
        browser_info['auth'] = auth
        browser_info['ff_cap'] = ff_cap
        browser_info['ff_profile_dir'] = ff_pf.path
        browser_info['capture_counter'] = 0
        browser_info['capture_format'] = "%s_%%010d" % app
        browser_info['browser'] = browser
        browser_info['profile'] = profile
        browser_info['login_url'] = login_url
        browser_info['local_storage'] = local_storage
        browser_info['login_xpath'] = login_xpath
        self._browsers[name] = browser_info
        display_info = Common.get_config_value('display')
        self._selenium.set_window_size(display_info['width'],
                                       display_info['height'])

        BuiltIn().log("Opened browser(%s) for %s app with profile `%s`" %
                      (browser, app, ff_pf.path))
Exemple #20
0
    def connect(self,app,name):
        """ Opens a web browser and connects to application and assigns a
        ``name``.

        Extra information could be added to the ``webapp`` sections likes
        ``login_url``, ``browser`` or ``profile_dir``. Default values are:
        | browser     | firefox |
        | login_url   | /         |
        | profile_dir | ./config/samurai.profile |
        """
        if name in self._browsers:
            BuiltIn().log("Browser `%s` already existed. Reconnect to it" % name)
            self.close()
            # return

        login_url   = '/'
        browser     = 'firefox'
        profile_dir = None

        # collect information about the application
        app_info = Common.LOCAL['webapp'][app]
        if 'login_url' in app_info and app_info['login_url']:    
            login_url = app_info['login_url']
        if 'browser'  in app_info and app_info['browser']:    
            browser  = app_info['browser']
        if 'profile_dir' in app_info and app_info['profile_dir']:    
            ff_profile_dir  = os.getcwd() + 'config/' + app_info['profile_dir']
        if 'proxy' in app_info and app_info['proxy']:
            proxy = Proxy()
            proxy.proxy_type = ProxyType.MANUAL
            if 'http' in app_info['proxy']:
                proxy.http_proxy    = app_info['proxy']['http']
            # if 'socks' in app_info['proxy']:
            #     proxy.socks_proxy   = app_info['proxy']['socks']
            if 'ssl' in app_info['proxy']:
                proxy.ssl_proxy     = app_info['proxy']['ssl']
            if 'ftp' in app_info['proxy']:
                proxy.ftp_proxy   = app_info['proxy']['ftp']
            capabilities = webdriver.DesiredCapabilities.FIREFOX
            proxy.add_to_capabilities(capabilities)

        device = app_info['device']
        device_info = Common.GLOBAL['device'][device]
        ip = device_info['ip']
        type = device_info['type']

        template = Common.GLOBAL['access-template'][type]
        profile = template['profile']   

        # currently, only plain-text authentication is supported
        # auth = {}
        self.auth['username']    = Common.GLOBAL['auth']['plain-text'][profile]['user']
        self.auth['password']    = Common.GLOBAL['auth']['plain-text'][profile]['pass']
        url = 'https://%s/%s' %  (ip,login_url)

        ignore_dead_node = Common.get_config_value('ignore-dead-node')

        # open a browser
        try:
            self._driver.open_browser(url,browser,'_arbor_' + name,False,None,profile_dir)
            self._driver.wait_until_element_is_visible('name=username')
            # login
            self._driver.input_text('name=username', self.auth['username'])
            self._driver.input_text('name=password', self.auth['password'])
            self._driver.click_button('name=Submit')
            time.sleep(5)
    
            self._current_name = name
            self._current_app  = app
            browser_info = {}
            browser_info['capture_counter'] = 0
            browser_info['capture_format']  = 'arbor_%010d'
            browser_info['browser']         = browser
            self._browsers[name] = browser_info

            #
            self._driver.maximize_browser_window()

            BuiltIn().log("Connected to `%s` with name `%s`" % (app,name))
        except Exception as err:
            if not ignore_dead_node:
                err_msg = "ERROR: Error occured when connecting to `%s`" % (name)
                BuiltIn().log(err_msg)
                raise
            else:
                warn_msg = "WARN: Error occured when connect to `%s` but was ignored" % (name)

                BuiltIn().log(warn_msg)
                BuiltIn().log_to_console(warn_msg)
Exemple #21
0
    def open_ff_with_profile(self, app, name):
        """
        """
        if name in self._browsers:
            BuiltIn().log("Browser `%s` already existed" % name)
            return
        browser = 'firefox'
        login_url = '/'
        proxy = None
        fp = None
        capabilities = None

        ignore_dead_node = Common.get_config_value('ignore-dead-node')

        # collect information about the application that listed
        app_info = Common.LOCAL['webapp'][app]
        if 'login-url' in app_info and app_info['login-url']:
            login_url = app_info['login-url']
        if 'browser' in app_info and app_info['browser']:
            browser = app_info['browser']
        if 'proxy' in app_info and app_info['proxy']:
            proxy = Proxy()
            proxy.proxy_type = ProxyType.MANUAL
            if 'http' in app_info['proxy']:
                proxy.http_proxy = app_info['proxy']['http']
            if 'ssl' in app_info['proxy']:
                proxy.ssl_proxy = app_info['proxy']['ssl']
            if 'ftp' in app_info['proxy']:
                proxy.ftp_proxy = app_info['proxy']['ftp']
            capabilities = webdriver.DesiredCapabilities.FIREFOX
            proxy.add_to_capabilities(capabilities)

        device = app_info['device']
        device_info = Common.GLOBAL['device'][device]
        ip = device_info['ip']
        type = device_info['type']
        template = Common.GLOBAL['access-template'][type]
        profile = template['profile']
        auth = {}
        BuiltIn().log('    Using profile `%s`' % profile)
        auth['username'] = Common.GLOBAL['auth']['plain-text'][profile]['user']
        auth['password'] = Common.GLOBAL['auth']['plain-text'][profile]['pass']
        url = 'https://' + ip + '/' + login_url

        # create a new profile and adjust it
        fp = webdriver.FirefoxProfile()
        if 'profile' in app_info and 'download-dir' in app_info['profile']:
            download_path = app_info['profile']['download-path']
        else:
            download_path = Common.get_result_path()
        if 'profile' in app_info and 'auto-save-mime' in app_info['profile']:
            auto_save_mime = app_info['profile']['auto-save-mime']
            fp.set_preference("browser.helperApps.neverAsk.saveToDisk",
                              app_info['profile']['auto-save-mime'])
        fp.set_preference("browser.download.folderList", 2)
        fp.set_preference("browser.download.dir", download_path)
        fp.set_preference("browser.download.manager.showWhenStarting", False)
        fp.set_preference("browser.download.useDownloadDir", True)
        fp.set_preference("browser.download.panel.shown", False)
        fp.set_preference("gfx.canvas.azure.backends", "cairo")
        fp.set_preference("gfx.content.azure.backends", "cairo")
        fp.update_preferences()

        # open a browser and retry 3 times if it is necessary
        try:
            retry = 0
            while retry <= 3:
                try:
                    url = 'https://' + ip + '/' + login_url
                    self._driver.open_browser(url, browser,
                                              '_%s_%s' % (profile, name),
                                              False, capabilities, fp.path)
                    time.sleep(5)
                    break
                except WebDriverException as err:
                    BuiltIn().log(err)
                    BuiltIn().log(
                        'Will retry one more time for browser session')
                    retry += 1
                    if retry == 3: raise
                # finally:
                # shutil.rmtree(fp.path,ignore_errors=True)
        except Exception as err:
            if not ignore_dead_node:
                err_msg = "ERROR: Error occured when connecting to `%s`" % (
                    name)
                BuiltIn().log(err_msg)
                raise
            else:
                warn_msg = "WARN: Error occured when connect to `%s` but was ignored" % (
                    name)
                BuiltIn().log(warn_msg)
                BuiltIn().log_to_console(warn_msg)

        self._current_name = name
        browser_info = {}
        browser_info['url'] = url
        browser_info['auth'] = auth
        browser_info['capabilities'] = capabilities
        browser_info['ff_profile_dir'] = fp.path
        browser_info['capture_counter'] = 0
        browser_info['capture_format'] = "%s_%%010d" % app
        browser_info['browser'] = browser
        browser_info['profile'] = profile
        self._browsers[name] = browser_info

        BuiltIn().log("Opened browser(%s) for %s app with profile `%s`" %
                      (browser, app, fp.path))