第三章:python-selenium 浏览器session持久化

在做selenium自动化脚本的时候,我们可能会对间隔一段时间就重新触发访问网站的流程,这个过程每次都会打开新的浏览器。长期下去我们的服务器内存会被占用调很大一部分。

如果我们可以在第一次打开浏览器的时候记录一次浏览器session,那么在下次调用脚本的时候就可以先去获取session,然后还是操作之前打开的浏览器。

class ReuseChrome(Remote):

    def __init__(self, command_executor, session_id):
        self.r_session_id = session_id
        Remote.__init__(self, command_executor=command_executor, desired_capabilities={}, keep_alive=False)

    def start_session(self, capabilities, browser_profile=None):
        """
        重写start_session方法
        """
        if not isinstance(capabilities, dict):
            raise InvalidArgumentException("Capabilities must be a dictionary")
        if browser_profile:
            if "moz:firefoxOptions" in capabilities:
                capabilities["moz:firefoxOptions"]["profile"] = browser_profile.encoded
            else:
                capabilities.update({'firefox_profile': browser_profile.encoded})

        self.capabilities = options.Options().to_capabilities()
        self.session_id = self.r_session_id
        self.w3c = False

通过上面的方法我们可以获取到,上次操作浏览器的driver对象,如果上次打开的浏览器没有关闭,就还是可以继续在上次打开的页面上操作元素

driver = ReuseChrome(command_executor=executor_url, session_id=session_id)

  # 新建 若是浏览器退出 此处抛异常
        driver.execute_script("document.getElementsByClassName('bs-bars pull-left')[0].children[0].children[0].click()")
        # 销售号
        driver.execute_script(
            'return document.getElementsByClassName("form-control input-medium")[0]').send_keys(
            str(signInfo['salesNumber']))
        driver.find_element_by_xpath(
            '/html/body/div[1]/div/table/tbody/tr[2]/td[2]/div/table/tbody/tr[3]/td/div/button[1]').click()
        time.sleep(5)

在第一次访问的时候保存session 和访问地址

def beginRun(config,signInfo):
    global driver
    chromeOptions = option()
    chromeOptions.add_experimental_option('excludeSwitches', ['enable-automation'])
    prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': downLoadPath}
    chromeOptions.add_experimental_option('prefs', prefs)
    driver = webdriver.Chrome(executable_path=chromeDriverPath, chrome_options=chromeOptions)
    driver.delete_all_cookies()
    session_id = driver.session_id
    executor_url = driver.command_executor._url

你可能感兴趣的:(#,python-selenium,python,selenium,开发语言)