Selenium – Clear browser cookies

本文介绍如何在不同的浏览器中清除Cookie以确保测试环境的纯净性。针对Firefox、Chrome和Internet Explorer提供了具体的实现方法,特别关注了IE浏览器中可能出现的问题及解决方案。

if your cases need login with different role, they will encounter some problems if you don’t clear browser cookies.


Below is way how to do it. Got it from http://automationoverflow.blogspot.com/

Between tests and before starting test on client machine the browser should be in clean session in order for test not to interfere with previous session data. Otherwise tests might fail. There is a method in webdriver API called DeleteCookies to clear cookies of browser
However, this work perfectly fine for Firefox and Chrome but not always for Internet Explorer. For Firefox and Chrome, a new temporary profile while creating new browser instance in Webdriver and this is not the case in IE hence we might sometime see previous session details still persisting in new session.

QTP allows access to IE tools menu and options window to clear cookies and cache, however webdriver doesn’t support interacting with menu. Hence we have to opt for command line option to clear cookies in IE.

Here is Code for same:

public void DeleteCookies()
 {
 if (_driver == null) return;
 _driver.Manage().Cookies.DeleteAllCookies();

 if (_driver.GetType() == typeof(OpenQA.Selenium.IE.InternetExplorerDriver))
 {
 ProcessStartInfo psInfo = new ProcessStartInfo();
 psInfo.FileName = Path.Combine(Environment.SystemDirectory, "RunDll32.exe");
 psInfo.Arguments = "InetCpl.cpl,ClearMyTracksByProcess 2";
 psInfo.CreateNoWindow = true;
 psInfo.UseShellExecute = false;
 psInfo.RedirectStandardError = true;
 psInfo.RedirectStandardOutput = true;
 Process p = new Process { StartInfo = psInfo };
 p.Start();
 p.WaitForExit(10000);
 }
 }

Only in case of IE, RunDll32.exe is invoked with arguments InetCpl.cpl,ClearMyTracksByProcess 2 to clear cookies and cache. To clear entire history including temp files, history, form data, passwords etc.. change arguments to InetCpl.cpl,ClearMyTracksByProcess 255. This should work on IE 7 and above on all OS.

Following are different arguments supported by InetCpl.cpl:

echo Clear Temporary Internet Files:
RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8

echo Clear Cookies:
RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 2

echo Clear History:
RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1

echo Clear Form Data:
RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 16

echo Clear Saved Passwords:
RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 32

echo Delete All:
RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255

echo Delete All w/Clear Add-ons Settings:
RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 4351

 

<think>我们使用的是DrissionPage库,而不是Selenium。在DrissionPage中,操作Chromium浏览器时,更新cookies(包括添加、修改、删除)可以通过Tab对象的`set.cookies()`方法实现。根据用户需求,要更新最新标签页(latest_tab)的cookies。在DrissionPage中,更新cookie的常用方法:1.添加或修改单个cookie:使用`set.cookies()`方法,传入一个字典,包含cookie的详细信息(如name,value,domain等)。2.删除单个cookie:使用`set.cookies()`方法,将cookie的value设置为None,并且指定相同的name和domain。3.清除所有cookies:使用`set.cookies.clear()`方法。注意:在更新cookies之前,通常需要先导航到目标页面(因为cookie是与特定域名关联的),或者至少确保当前标签页已经加载了页面(domain已经确定)。由于用户要求更新最新标签页(`latest_tab`)的cookies,我们可以先获取这个标签页对象,然后调用其`set.cookies()`方法。###更新Cookies的步骤1.获取最新标签页对象:`tab=browser.latest_tab`2.(可选)导航到目标页面,确保域名正确(如果还没有在目标页面的话)3.使用`tab.set.cookies()`方法更新cookie###示例代码:更新最新标签页的Cookies以下代码展示了如何通过`latest_tab`更新cookies(添加或修改一个cookie):```pythonfromDrissionPageimportChromium#创建浏览器对象(如果已经存在,可以以其他方式连接)browser=Chromium()#获取最新的标签页(当前激活的标签页)tab=browser.latest_tab#导航到目标页面(确保域名正确,因为cookie与域名关联)#注意:如果要设置的cookie的domain不是当前页面,则可以不导航,但建议在目标页面设置tab.get('https://example.com')#设置或更新一个cookie,传入一个字典,至少包含name和value,也可以包含domain、path等#如果cookie的domain和path与当前页面匹配,则会设置成功;如果不指定domain,则默认为当前页面的域名。cookie_dict={'name':'test_cookie','value':'test_value',#以下为可选参数,如果不指定,则使用默认值(当前页面的domain和path)'domain':'example.com',#可选,指定cookie的域名'path':'/',#可选'secure':True,#可选,仅HTTPS'expiry':1715191200#可选,过期时间(时间戳)}#调用set.cookies()方法,传入字典tab.set.cookies(cookie_dict)#要删除一个cookie,可以将其value设置为None,并指定相同的name和domain#tab.set.cookies({'name':'test_cookie','value':None,'domain':'example.com'})#要清除当前页面域名下的所有cookies,可以使用clear()方法#tab.set.cookies.clear()#注意:这会清除当前域名下的所有cookie#关闭浏览器(可选)#browser.quit()```###注意事项-在设置cookie时,如果未指定`domain`,默认使用当前页面的域名(不包括子域名,如当前页面为`www.example.com`,则设置的cookie的domain为`www.example.com`)。如果要设置顶级域名(如`example.com`)的cookie,必须显式指定domain为`.example.com`(注意前面的点)。-设置cookie后,可以通过`tab.cookies`属性查看当前页面的所有cookie,以验证是否设置成功。###参考资料DrissionPage的官方文档中关于操作cookie的部分:[https://g1879.gitee.io/drissionpage/cookie/](https://g1879.gitee.io/drissionpage/cookie/)(注意:文档是中文的)###相关问题1.DrissionPage中如何批量设置多个cookies?2.如何设置一个会话cookie(即关闭浏览器后消失)?3.DrissionPage的cookie操作与Selenium有什么区别?</think> ### 如何在 DrissionPage 中更新 Chromium 最新标签页的 Cookies 在 DrissionPage 中,可通过 `Chromium().latest_tab` 对象的 `cookies` 属性管理 cookies。以下是完整操作方法: #### 一、更新单个 Cookie ```python from DrissionPage import Chromium browser = Chromium() tab = browser.latest_tab tab.get('https://example.com') # 确保页面已加载 # 更新特定 cookie (若不存在则新建) tab.cookies.set( name='session_id', value='new_value_123', domain='example.com', path='/', expires=1717826400 # Unix 时间戳 ) ``` #### 二、批量更新 Cookies ```python # 定义多个 cookie 的字典列表 new_cookies = [ { 'name': 'user_token', 'value': 'token_xyz', 'domain': 'example.com' }, { 'name': 'preferences', 'value': 'dark_mode=1', 'domain': '.example.com' # 通配域名 } ] # 批量设置 tab.cookies.set(all=new_cookies) ``` #### 三、删除 Cookies ```python # 删除单个 cookie tab.cookies.remove(name='session_id', domain='example.com') # 清空当前域名所有 cookies tab.cookies.clear() # 清空浏览器所有 cookies (需要操作 Chromium 对象) browser.cookies.clear() ``` #### 四、获取验证 Cookies ```python # 获取全部 cookies all_cookies = tab.cookies print(f"当前 cookies: {all_cookies}") # 获取特定 cookie 值 session_cookie = tab.cookies.get('session_id') if session_cookie: print(f"Session ID: {session_cookie.value}") ``` #### 重要参数说明 | 参数 | 类型 | 说明 | |-----------|--------|----------------------------------------------------------------------| | `domain` | str | **必填**,cookie 所属域名 (子域名需用 `.` 前缀如 `.example.com`) [^1] | | `path` | str | 可选,默认 `/` (整个域名有效) | | `expires` | int | Unix 时间戳,不设置则为会话 cookie | | `secure` | bool | 是否仅 HTTPS 传输 (默认 False) | #### 注意事项 1. 域名一致性:更新 cookie 时需确保 `domain` 与当前页面域名匹配 2. 路径控制:`path` 参数决定 cookie 的有效路径范围 3. 会话 cookie:不设置 `expires` 参数时,cookie 在浏览器关闭后失效 4. 跨域限制:浏览器安全策略会阻止跨域设置 cookie
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值