Selenium对cookie的操作

一、cookie介绍

1、cookie是由web服务器生成的,并且保存在用户浏览器上的小文本文件,它可以包含用户相关的信息。

2、cookie数据格式:键值对组成(Python中的字典)。

3、cookie产生:客户端请求服务器,如果服务器需要记录该用户状态,就向客户浏览器颁发一个cookie数据。

4、cookie的使用:当浏览器再次请求该网站时,浏览器把请求的数据和cookie数据一同提交给服务器,服务器检查该cookie,以此来辨认用户状态。

二、Selenium对cookie操作

1、说明:Selenium中对cookie操作提供相应的方法。

2、方法:

  • get_cookie(name)            ---->获取指定cookie(name:为cookie的名称)
  • get_cookies()                   ---->获取本网站所有本地cookies
  • get_cookie(cookie_dict)   ---->添加cookie(cookie_dict:一个字典对象,必选的键包括:"nama" and "value")

3、案例:使用cookie绕过百度登录

from time import sleep
from selenium import webdriver

"""
目标:cookie操作
案例:使用cookie绕过百度登录
步骤:1、手动登录百度网站
2、手动获取登录后的cookie键名:'BDUSS'
3、使用selenium内的add_cookie(name='BDUSS',value='xxxx')
"""

#获取浏览器对象
driver=webdriver.Firefox()
#driver.maximize_window()
driver.implicitly_wait(10)

#设置网络链接
url="https://www.baidu.com/"
driver.get(url)
#设置cookie
driver.add_cookie({"name":"BDUSS","value":"E0ZzFxbGU2RngzdExzaDVvbXlwdlBMZU1VUTV4eVhYeVhNeGh1b0xPQ2lofmRkRVFBQUFBJCQAAAAAAAAAAAEAAAC8nIDLRFBMODA5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKL6z12i-s9deE"})

#获取所有的cookie信息
# cookies=driver.get_cookies()
# print("cookies内容为:",cookies)
# for cook in cookies:
#     print(cook['name'])

#cookie键名BDUSS的cookie信息
cookie=driver.get_cookie("BDUSS")
print("cookie:",cookie)

sleep(2)
#刷新界面,看到效果
driver.refresh()

sleep(2)
driver.quit()

实现效果:

<think>我们正在使用Golang和Selenium进行Web自动化,需要添加Cookie。根据Selenium的文档,我们可以使用`AddCookie`方法。在Golang中,我们可以使用`github.com/tebeka/selenium`包。 步骤: 1. 首先,我们需要创建一个Cookie对象,该对象应包含名称、值、路径、域等(可选字段有路径、域、过期时间、安全标志、HTTPOnly标志等)。 2. 然后,使用WebDriver的`AddCookie`方法添加这个Cookie。 注意:在添加Cookie之前,通常需要先访问一个页面(比如目标域),因为浏览器需要上下文(域)来设置Cookie。 示例代码: ```go package main import ( "fmt" "time" "github.com/tebeka/selenium" ) func main() { // 设置Selenium WebDriver caps := selenium.Capabilities{"browserName": "chrome"} wd, err := selenium.NewRemote(caps, "") if err != nil { panic(err) } defer wd.Quit() // 先导航到一个页面(例如目标网站的主页) err = wd.Get("https://example.com") if err != nil { panic(err) } // 创建一个Cookie cookie := &selenium.Cookie{ Name: "test_cookie", Value: "12345", Path: "/", // 可选 Domain: "example.com", // 可选,如果为空则默认为当前页面的域 Secure: false, // 可选 Expiry: uint(time.Now().Add(24 * time.Hour).Unix()), // 可选,Unix时间戳 } // 添加Cookie err = wd.AddCookie(cookie) if err != nil { panic(err) } // 验证Cookie是否添加成功(可选) cookies, err := wd.GetCookies() if err != nil { panic(err) } for _, c := range cookies { fmt.Printf("Cookie: %s=%s\n", c.Name, c.Value) } } ``` 注意: - 确保你使用的`selenium`包是最新的,或者至少支持`AddCookie`方法。 - 在添加Cookie之前,必须已经导航到某个页面(通常是目标域下的页面),否则可能会出错,因为浏览器需要知道Cookie应该关联到哪个域。 - 如果添加Cookie后需要立即生效,可以刷新页面或者继续后续操作。 引用[1]:Selenium 是一个用于自动化 Web 浏览器的工具,适用于爬取动态网页。下面是一个使用 Python 和 Selenium 爬取动态网页的示例。假设我们要爬取一个加载动态内容的网页,并提取其中的一些数据。[^1](这里虽然引用的是Python示例,但原理相同) 相关问题: 1. 在Golang Selenium中如何删除Cookie? 2. 如何设置Cookie的HTTPOnly和Secure标志? 3. 使用Selenium添加Cookie时出现无效域错误怎么办?</think>### 使用 Golang 和 Selenium 添加 Cookie 的示例 在 Golang 中使用 Selenium 添加 Cookie 的步骤如下: ```go package main import ( "fmt" "time" "github.com/tebeka/selenium" ) func main() { // 1. 初始化 WebDriver caps := selenium.Capabilities{"browserName": "chrome"} wd, err := selenium.NewRemote(caps, "http://localhost:4444/wd/hub") if err != nil { panic(err) } defer wd.Quit() // 2. 导航到目标网站(必须先访问域名才能设置其 Cookie) err = wd.Get("https://example.com") if err != nil { panic(err) } // 3. 创建 Cookie 对象 cookie := &selenium.Cookie{ Name: "session_token", // Cookie 名称 Value: "abc123xyz", // Cookie 值 Path: "/", // 生效路径 Domain: "example.com", // 域名 Secure: true, // 仅 HTTPS Expiry: uint(time.Now().Add(24*time.Hour).Unix()), // 过期时间 } // 4. 添加 Cookie err = wd.AddCookie(cookie) if err != nil { panic(fmt.Sprintf("添加 Cookie 失败: %v", err)) } // 5. 验证 Cookie(可选) cookies, err := wd.GetCookies() if err != nil { panic(err) } fmt.Println("当前 Cookies:") for _, c := range cookies { fmt.Printf("- %s: %s\n", c.Name, c.Value) } } ``` ### 关键说明: 1. **必须先在目标域名**:添加 Cookie 前需先访问目标域名(通过 `wd.Get()`),否则会报 `invalid cookie domain` 错误 2. **Cookie 参数**: - `Domain` 必须与当前访问的域名匹配 - `Expiry` 使用 Unix 时间戳 - `Secure` 设置为 `true` 表示仅通过 HTTPS 传输 3. **Selenium 服务器**:确保 Selenium 服务器正在运行(默认地址 `http://localhost:4444`) ### 常见问题解决: 1. **无效域名错误**: ```go // 错误示例:未先访问域名 wd.AddCookie(cookie) // 错误: invalid cookie domain // 正确做法:先导航到目标网站 wd.Get("https://example.com") wd.AddCookie(cookie) ``` 2. **Cookie 未生效**: - 检查域名和路径是否匹配当前页面 - 刷新页面使 Cookie 生效:`wd.Refresh()` 3. **过期时间设置**: ```go // 设置 1 天后过期 expiry := time.Now().Add(24 * time.Hour).Unix() cookie := &selenium.Cookie{Expiry: uint(expiry)} ``` SeleniumCookie 操作遵循标准 HTTP Cookie 协议,在自动化测试和爬虫中常用于维持登录状态[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值