Skip to content

Latest commit

 

History

History
377 lines (322 loc) · 12 KB

File metadata and controls

377 lines (322 loc) · 12 KB
title linkTitle weight aliases
同cookies一起工作
Cookies
4
/documentation/zh-cn/support_packages/working_with_cookies/
/zh-cn/documentation/support_packages/working_with_cookies/
/zh-cn/documentation/webdriver/browser/cookies/

Cookie是从网站发送并存储在您的计算机中的一小段数据. Cookies主要用于识别用户并加载存储的信息.

WebDriver API提供了一种使用内置的方法与Cookie进行交互:

添加 Cookie

这个方法常常用于将cookie添加到当前访问的上下文中. 添加Cookie仅接受一组已定义的可序列化JSON对象. 这里 是一个链接, 用于描述可接受的JSON键值的列表

首先, 您需要位于有效Cookie的域上. 如果您在开始与网站进行交互之前尝试预设cookie, 并且您的首页很大或需要一段时间才能加载完毕, 则可以选择在网站上找到一个较小的页面 (通常404页很小, 例如 http://example.com/some404page)

{{< tabpane langEqualsHeader=true >}} {{< tab header="Java" text=true >}} {{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L30-L32" >}} {{< /tab >}} {{< tab header="Python" text=true >}} {{< gh-codeblock path="examples/python/tests/interactions/test_cookies.py#L5-9" >}} {{< /tab >}} {{< tab header="CSharp" text=true >}} {{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs#L32-L34" >}} {{< /tab >}} {{< tab header="Ruby" >}} require 'selenium-webdriver' driver = Selenium::WebDriver.for :chrome

begin driver.get 'https://www.example.com'

Adds the cookie into current browser context

driver.manage.add_cookie(name: "key", value: "value") ensure driver.quit end {{< /tab >}} {{< tab header="JavaScript" text=true >}} {{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L18">}} {{< /tab >}} {{< tab header="Kotlin" >}} import org.openqa.selenium.Cookie import org.openqa.selenium.chrome.ChromeDriver

fun main() { val driver = ChromeDriver() try { driver.get("https://example.com")

    // Adds the cookie into current browser context
    driver.manage().addCookie(Cookie("key", "value"))
} finally {
    driver.quit()
}

}
{{< /tab >}} {{< /tabpane >}}

获取命名的 Cookie

此方法返回与cookie名称匹配的序列化cookie数据中所有关联的cookie.

{{< tabpane langEqualsHeader=true >}} {{< tab header="Java" text=true >}} {{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L38-L42" >}} {{< /tab >}} {{< tab header="Python" text=true >}} {{< gh-codeblock path="examples/python/tests/interactions/test_cookies.py#L13-L20" >}} {{< /tab >}} {{< tab header="CSharp" text=true >}} {{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs#L40-L44" >}} {{< /tab >}} {{< tab header="Ruby" >}} require 'selenium-webdriver' driver = Selenium::WebDriver.for :chrome

begin driver.get 'https://www.example.com' driver.manage.add_cookie(name: "foo", value: "bar")

Get cookie details with named cookie 'foo'

puts driver.manage.cookie_named('foo') ensure driver.quit end {{< /tab >}} {{< tab header="JavaScript" text=true >}} {{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L35-L38">}} {{< /tab >}} {{< tab header="Kotlin" >}} import org.openqa.selenium.Cookie import org.openqa.selenium.chrome.ChromeDriver

fun main() { val driver = ChromeDriver() try { driver.get("https://example.com") driver.manage().addCookie(Cookie("foo", "bar"))

    // Get cookie details with named cookie 'foo'
    val cookie = driver.manage().getCookieNamed("foo")
    println(cookie)
} finally {
    driver.quit()
}

}
{{< /tab >}} {{< /tabpane >}}

获取全部 Cookies

此方法会针对当前访问上下文返回“成功的序列化cookie数据”. 如果浏览器不再可用, 则返回错误.

{{< tabpane langEqualsHeader=true >}} {{< tab header="Java" text=true >}} {{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L52-L66" >}} {{< /tab >}} {{< tab header="Python" text=true >}} {{< gh-codeblock path="examples/python/tests/interactions/test_cookies.py#L24-L32" >}} {{< /tab >}} {{< tab header="CSharp" text=true >}} {{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs#L51-L64" >}} {{< /tab >}} {{< tab header="Ruby" >}} require 'selenium-webdriver' driver = Selenium::WebDriver.for :chrome

begin driver.get 'https://www.example.com' driver.manage.add_cookie(name: "test1", value: "cookie1") driver.manage.add_cookie(name: "test2", value: "cookie2")

Get all available cookies

puts driver.manage.all_cookies ensure driver.quit end {{< /tab >}} {{< tab header="JavaScript" text=true >}} {{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L49-L51">}} {{< /tab >}} {{< tab header="Kotlin" >}} import org.openqa.selenium.Cookie import org.openqa.selenium.chrome.ChromeDriver

fun main() { val driver = ChromeDriver() try { driver.get("https://example.com") driver.manage().addCookie(Cookie("test1", "cookie1")) driver.manage().addCookie(Cookie("test2", "cookie2"))

    // Get All available cookies
    val cookies = driver.manage().cookies
    println(cookies)
} finally {
    driver.quit()
}

}
{{< /tab >}} {{< /tabpane >}}

删除 Cookie

此方法删除与提供的cookie名称匹配的cookie数据.

{{< tabpane langEqualsHeader=true >}} {{< tab header="Java" text=true >}} {{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L74-L77" >}} {{< /tab >}} {{< tab header="Python" text=true >}} {{< gh-codeblock path="examples/python/tests/interactions/test_cookies.py#L35-L43" >}} {{< /tab >}} {{< tab header="CSharp" text=true >}} {{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs#L70-L73" >}} {{< /tab >}} {{< tab header="Ruby" >}} require 'selenium-webdriver' driver = Selenium::WebDriver.for :chrome

begin driver.get 'https://www.example.com' driver.manage.add_cookie(name: "test1", value: "cookie1") driver.manage.add_cookie(name: "test2", value: "cookie2")

delete a cookie with name 'test1'

driver.manage.delete_cookie('test1') ensure driver.quit end {{< /tab >}} {{< tab header="JavaScript" text=true >}} {{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L61-L62">}} {{< /tab >}} {{< tab header="Kotlin" >}} import org.openqa.selenium.Cookie import org.openqa.selenium.chrome.ChromeDriver

fun main() { val driver = ChromeDriver() try { driver.get("https://example.com") driver.manage().addCookie(Cookie("test1", "cookie1")) val cookie1 = Cookie("test2", "cookie2") driver.manage().addCookie(cookie1)

    // delete a cookie with name 'test1'
    driver.manage().deleteCookieNamed("test1")
    
    // delete cookie by passing cookie object of current browsing context.
    driver.manage().deleteCookie(cookie1)
} finally {
    driver.quit()
}

}
{{< /tab >}} {{< /tabpane >}}

删除所有 Cookies

此方法删除当前访问上下文的所有cookie.

{{< tabpane langEqualsHeader=true >}} {{< tab header="Java" text=true >}} {{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L100-L105" >}} {{< /tab >}} {{< tab header="Python" text=true >}} {{< gh-codeblock path="examples/python/tests/interactions/test_cookies.py#L47-L55" >}} {{< /tab >}} {{< tab header="CSharp" text=true >}} {{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs#L92-L97" >}} {{< /tab >}} {{< tab header="Ruby" >}} require 'selenium-webdriver' driver = Selenium::WebDriver.for :chrome

begin driver.get 'https://www.example.com' driver.manage.add_cookie(name: "test1", value: "cookie1") driver.manage.add_cookie(name: "test2", value: "cookie2")

deletes all cookies

driver.manage.delete_all_cookies ensure driver.quit end {{< /tab >}} {{< tab header="JavaScript" text=true >}} {{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L77-L78">}} {{< /tab >}} {{< tab header="Kotlin" >}} import org.openqa.selenium.Cookie import org.openqa.selenium.chrome.ChromeDriver

fun main() { val driver = ChromeDriver() try { driver.get("https://example.com") driver.manage().addCookie(Cookie("test1", "cookie1")) driver.manage().addCookie(Cookie("test2", "cookie2"))

    // deletes all cookies
    driver.manage().deleteAllCookies()
} finally {
    driver.quit()
}

} {{< /tab >}} {{< /tabpane >}}

Same-Site Cookie属性

此属性允许用户引导浏览器控制cookie, 是否与第三方站点发起的请求一起发送. 引入其是为了防止CSRF(跨站请求伪造)攻击.

Same-Site cookie属性接受以下两种参数作为指令

Strict:

当sameSite属性设置为 Strict, cookie不会与来自第三方网站的请求一起发送.

Lax:

当您将cookie sameSite属性设置为 Lax, cookie将与第三方网站发起的GET请求一起发送.

注意: 到目前为止, 此功能已在Chrome(80+版本), Firefox(79+版本)中提供, 并适用于Selenium 4以及更高版本.

{{< tabpane langEqualsHeader=true >}} {{< tab header="Java" text=true >}} {{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L112-L121" >}} {{< /tab >}} {{< tab header="Python" text=true >}} {{< gh-codeblock path="examples/python/tests/interactions/test_cookies.py#L59-L71" >}} {{< /tab >}} {{< tab header="CSharp" >}} using OpenQA.Selenium; using OpenQA.Selenium.Chrome;

namespace SameSiteCookie { class SameSiteCookie { static void Main(string[] args) { IWebDriver driver = new ChromeDriver(); try { driver.Navigate().GoToUrl("http://www.example.com");

    var cookie1Dictionary = new System.Collections.Generic.Dictionary<string, object>() {
      { "name", "test1" }, { "value", "cookie1" }, { "sameSite", "Strict" } };
    var cookie1 = Cookie.FromDictionary(cookie1Dictionary);

    var cookie2Dictionary = new System.Collections.Generic.Dictionary<string, object>() {
      { "name", "test2" }, { "value", "cookie2" }, { "sameSite", "Lax" } };
    var cookie2 = Cookie.FromDictionary(cookie2Dictionary);

    driver.Manage().Cookies.AddCookie(cookie1);
    driver.Manage().Cookies.AddCookie(cookie2);

    System.Console.WriteLine(cookie1.SameSite);
    System.Console.WriteLine(cookie2.SameSite);
  } finally {
    driver.Quit();
  }
}

} } {{< /tab >}} {{< tab header="Ruby" >}} require 'selenium-webdriver' driver = Selenium::WebDriver.for :chrome

begin driver.get 'https://www.example.com'

Adds the cookie into current browser context with sameSite 'Strict' (or) 'Lax'

driver.manage.add_cookie(name: "foo", value: "bar", same_site: "Strict") driver.manage.add_cookie(name: "foo1", value: "bar", same_site: "Lax") puts driver.manage.cookie_named('foo') puts driver.manage.cookie_named('foo1') ensure driver.quit end {{< /tab >}} {{< tab header="JavaScript" text=true >}} {{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L24-L26">}} {{< /tab >}} {{< tab header="Kotlin" >}} import org.openqa.selenium.Cookie import org.openqa.selenium.chrome.ChromeDriver

fun main() { val driver = ChromeDriver() try { driver.get("http://www.example.com") val cookie = Cookie.Builder("key", "value").sameSite("Strict").build() val cookie1 = Cookie.Builder("key", "value").sameSite("Lax").build() driver.manage().addCookie(cookie) driver.manage().addCookie(cookie1) println(cookie.getSameSite()) println(cookie1.getSameSite()) } finally { driver.quit() } } {{< /tab >}} {{< /tabpane >}}