selenium-浏览器复用&cookie复用

浏览器复用流程

  • chrome浏览器放入环境变量中
  • 打开调试模式:命令行输入 chrome --remote-debugging-port=9222(注意:Mac输入的命令是:Google\ Chrome --remote-debugging-port=9222)
  • python中的关键代码:
    chrome_arg=webdriver.ChromeOptions()
    chrome_arg.debugger_address=‘127.0.0.1:9222’
    self.driver=webdriver.Chrome(options=chrome_arg)

对应的代码

import time

from selenium import webdriver


class TestWorkWechatBrowserReuse:
    def setup(self):
        chrome_arg = webdriver.ChromeOptions()
        chrome_arg.debugger_address = '127.0.0.1:9222'
        self.driver = webdriver.Chrome(options=chrome_arg)
        self.driver.implicitly_wait(3)


    def teardown(self):
        self.driver.quit()

    def test_wechat(self):
        self.driver.find_element_by_id('menu_contacts').click()
        print(self.driver.get_cookies())
        time.sleep(3)

另一种写法

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.remote.webdriver import WebDriver


class BasePage:
    _driver = None
    _base_url = 'https://work.weixin.qq.com/wework_admin/frame#index'

    def __init__(self, driver: WebDriver = None, url=''):
        if driver is None:
            options = Options()
            options.debugger_address = "127.0.0.1:9222"
            self._driver = webdriver.Chrome(options=options)
        else:
            self._driver = driver

        if len(url) >= 0:
            self._base_url = url

        self._driver.get(self._base_url)
        self._driver.implicitly_wait(5)

cookie复用

  • 获取cookie:self.driver.get_cookies()
  • 添加cookie

对应的代码

import time

from selenium import webdriver


class TestWorkWechatCookie:
    def setup(self):
        self.driver = webdriver.Chrome()
        self.driver.implicitly_wait(3)
        self.driver.maximize_window()

    def teardown(self):
        self.driver.quit()

    def test_wechat(self):
        self.driver.get('https://work.weixin.qq.com/wework_admin/frame#index')
        cookies = [
            {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wwrtx.vid', 'path': '/', 'secure': False,
             'value': '1688850293504732'},
            {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.vst', 'path': '/', 'secure': False,
             'value': '6Xq9Ows3pO8ouyxYAnoy7Ao8wViFyY8vsRAbTTUX00u-2UhmtYbXUIE9bSXdh8oHtBvLiU1_A0C3MyeNxAzRpe1xmsh21Q-n95lEzniCvVXHpGxY8pRWsFEl5pE5ocRqHSzprwj6c83VGooMFpdWk3WOW6EQYW4BqB-00KdduM1SLI8rAW3Of20UYdyb_K1EEvwJnZynGsCj98vK25CaGtsS079knGAvVQvTSW_Sb0llyTvPoyCApOPGKpFuKw7V4GJP_1haKalrDfjL5xzZBA'},
            {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wxpay.vid', 'path': '/', 'secure': False,
             'value': '1688850293504732'},
            {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wxpay.corpid', 'path': '/', 'secure': False,
             'value': '1970325100144876'},
            {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.sid', 'path': '/', 'secure': False,
             'value': '4Dg6TsbA6witq5WuT9LtIeQhCW_hQJ1vX-SlwfM2emczd2KkJRUilAqn2gScvCZ2'},
            {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wwrtx.d2st', 'path': '/', 'secure': False,
             'value': 'a850274'},
            {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'Hm_lpvt_9364e629af24cb52acc78b43e8c9f77d',
             'path': '/', 'secure': False, 'value': '1616312404'},
            {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.refid', 'path': '/', 'secure': False,
             'value': '7382946512403559'},
            {'domain': '.qq.com', 'expiry': 1927890867, 'httpOnly': False, 'name': 'pac_uid', 'path': '/',
             'secure': False, 'value': '0_61c38f4dae8bf'},
            {'domain': '.qq.com', 'expiry': 2147483646, 'httpOnly': False, 'name': 'ptcz', 'path': '/', 'secure': False,
             'value': '48c1a407769500c06b6acb9d8cc2b36927f1276841b3b56a5e6182c500297474'},
            {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.ltype', 'path': '/', 'secure': False,
             'value': '1'}, {'domain': '.work.weixin.qq.com', 'expiry': 1647848404, 'httpOnly': False,
                             'name': 'Hm_lvt_9364e629af24cb52acc78b43e8c9f77d', 'path': '/', 'secure': False,
                             'value': '1616312404'},
            {'domain': '.qq.com', 'expiry': 2147385600, 'httpOnly': False, 'name': 'pgv_pvid', 'path': '/',
             'secure': False, 'value': '801165651'},
            {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.ref', 'path': '/', 'secure': False,
             'value': 'direct'},
            {'domain': '.qq.com', 'expiry': 2147483647, 'httpOnly': False, 'name': 'RK', 'path': '/', 'secure': False,
             'value': 'qS5xwnQH7L'},
            {'domain': '.qq.com', 'expiry': 1616398868, 'httpOnly': False, 'name': '_gid', 'path': '/', 'secure': False,
             'value': 'GA1.2.1499714808.1616312405'},
            {'domain': 'work.weixin.qq.com', 'expiry': 1616343939, 'httpOnly': True, 'name': 'ww_rtkey', 'path': '/',
             'secure': False, 'value': '8hou2p0'},
            {'domain': '.qq.com', 'expiry': 1921894744, 'httpOnly': False, 'name': 'tvfe_boss_uuid', 'path': '/',
             'secure': False, 'value': 'b49e792d7521283f'},
            {'domain': '.qq.com', 'expiry': 2147385600, 'httpOnly': False, 'name': 'pgv_pvi', 'path': '/',
             'secure': False, 'value': '6006359040'},
            {'domain': '.work.weixin.qq.com', 'expiry': 1618905634, 'httpOnly': False, 'name': 'wwrtx.i18n_lan',
             'path': '/', 'secure': False, 'value': 'zh'},
            {'domain': '.work.weixin.qq.com', 'expiry': 1631439075, 'httpOnly': False, 'name': 'wwrtx.c_gdpr',
             'path': '/', 'secure': False, 'value': '0'},
            {'domain': '.qq.com', 'expiry': 1679384468, 'httpOnly': False, 'name': '_ga', 'path': '/', 'secure': False,
             'value': 'GA1.2.2047476628.1589457740'}]

        for cookie in cookies:
            if "expiry" in cookie.keys():
                cookie.pop("expiry")
            self.driver.add_cookie(cookie)
        self.driver.get('https://work.weixin.qq.com/wework_admin/frame#index')
        self.driver.find_element_by_id('menu_contacts').click()
        time.sleep(3)

使用shelve

import shelve
from time import sleep

from selenium import webdriver
from selenium.webdriver.chrome.options import Options


class TestDemo:
    def setup_method(self):
        #mac开启持久化命令:/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
        options = Options()
        options.debugger_address = "127.0.0.1:9222"
        self.driver = webdriver.Chrome(options=options)

    def teardown_method(self):
        self.driver.quit()

    def test_demo(self):
        self.driver.get('https://work.weixin.qq.com/wework_admin/frame')

        #重新执行,需要把之前生成的cookies文件删除掉
        db = shelve.open("cookies")
        db['cookie'] = self.driver.get_cookies()
        cookies = db['cookie']
        for cookie in cookies:
            if "expiry" in cookie.keys():
                cookie.pop("expiry")
            self.driver.add_cookie(cookie)
        self.driver.get('https://work.weixin.qq.com/wework_admin/frame')
        sleep(3)
        db.close()

        self.driver.find_element_by_id("menu_contacts").click()
        sleep(3)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Selenium浏览器复用是指通过Selenium WebDriver在同一会话中重复使用已经启动的浏览器实例。这样可以提高测试效率和性能,减少测试执行时间。 实现Selenium浏览器复用的步骤如下: 1. 启动浏览器实例:使用WebDriver执行启动浏览器的代码,例如使用ChromeDriver启动Chrome浏览器或者使用FirefoxDriver启动Firefox浏览器。 2. 打开目标URL:使用WebDriver执行打开指定URL的代码,可以使用get方法或者navigate方法打开一个URL。 3. 复用浏览器实例:在测试或者操作完成后,不要关闭浏览器实例,而是保持其处于打开状态。在下一次测试或者操作时,可以直接使用复用浏览器实例,无需再次启动新的浏览器。 4. 清理测试环境:在测试全部执行完毕后,可以选择关闭所有打开的浏览器实例,释放资源,并保持测试环境的干净整洁。 Selenium浏览器复用的优点包括: 1. 提高执行效率:由于浏览器实例已经启动,无需每次都创建新的浏览器实例,可以节省启动时间和资源。 2. 减少测试执行时间:复用浏览器实例可以减少每个测试用例的前置准备工作,加快测试用例的执行速度。 3. 简化测试流程:复用浏览器实例可以避免重复打开和关闭浏览器的操作,简化测试用例的实现过程。 需要注意的是,在Selenium浏览器复用过程中,应当注意处理并发访问问题,确保测试用例之间不会相互影响。另外,一些浏览器可能不支持复用实例,需要根据具体的浏览器浏览器驱动版本进行测试和验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值