第三章: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

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python Selenium 是一套完整的web应用程序测试系统,它包含了测试的录制、编写及运行和测试的并行处理。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器上。Selenium支持的语言包括C#,Java,Perl,PHP,Python和Ruby。目前,Selenium Web 驱动程序最受Python和C#欢迎。你可以使用Python编写Selenium测试脚本,并且可以直接在大多数现代Web浏览器中运行。 如果你想在PyCharm中使用Python Selenium,你可以按照以下步骤操作: 1. 在PyCharm中新建一个Python文件,自行命名。 2. 导入selenium包,可以使用以下代码:`from selenium import webdriver` 3. 打开Firefox浏览器,可以使用以下代码:`browser = webdriver.Firefox()` 4. 如果需要等待一段时间,可以使用`time.sleep()`方法,比如停留3秒:`time.sleep(3)` 5. 最后,关闭浏览器,可以使用以下代码:`browser.quit()`[3] 这样,你就可以在PyCharm中使用Python Selenium了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [基于PythonSelenium详细教程](https://blog.csdn.net/qq_43125235/article/details/125601564)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Python selenium基础用法详解](https://blog.csdn.net/m0_63794226/article/details/126447599)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值