Selenium3自动化测试【31】Cookie处理


同步视频知识与系列知识内容,可关注:【公众号】:柒哥测试;【WX】:Lee-890;


1. Cookie的认知

实际过程中,大家经常听到Cookie与Session。其中Cookie是放在浏览器端(客户端);Session放在服务器端,每个客户在服务器端都有与其对应的Session。

在网站中,http请求是无状态的。简单来说即第一次和服务器连接且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。而Cookie的出现就是为了解决该问题,第一次登录后服务器返回一些数据(Cookie)给浏览器,然后浏览器会将其保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的Cookie数据自动的传递给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。

Cookie存储的数据量有限,不同的浏览器有不同的存储大小,一般不超过4KB。因此Cookie只能存储一些小量的数据。

Cookie是由网络服务器发送出来存储在网络浏览器上,下次同一客户再次访问该服务器时,可从该浏览器读取此信息。Cookie让浏览器记住这位访客的特定信息,如上次访问的位置等。

Cookie 是个存储在浏览器目录的文本文件,当浏览器运行时,存储在 RAM 中。一旦你从该网站或网络服务器退出,Cookie 也可存储在计算机的硬盘上。当访客结束其浏览器对话时,即终止所有 Cookie。

Cookie可以保持登录信息到用户下次与服务器的会话,换句话说,下次访问同一网站时,用户会发现不必输入username和pwd就已经登录了。但有一些Cookie在用户退出会话的时候就被删除了(用户也可手工删除本地Cookie),这样可以有效保护个人隐私。

Cookie在生成时会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为“0”或负值,这样在关闭浏览器时,就马上清除Cookie,不会记录用户信息,更加安全。

2.Cookie的属性

一般Cookie所具有的属性,包括:
**1. Domain:域 **
Domain:域,表示当前Cookie所属于哪个域或子域下面;对于服务器返回的Set-Cookie中,如果没有指定Domain的值,那么其Domain的值是默认为当前所提交的http的请求所对应的主域名。比如访问 http://www.example.com,返回一个cookie,没有指名domain值,那么其值为默认的www.example.com;
2. Path
Path:表示Cookie的所属路径;
3. Expire time/Max-age
Expire time/Max-age:表示了Cookie的有效期。expire的值,是一个时间,过了这个时间,该Cookie就失效了。或者是用max-age指定当前Cookie是在多长时间之后而失效。如果服务器返回的一个Cookie,没有指定其expire time,那么表明此Cookie有效期只是当前的Session,即是session cookie,当前Session会话结束后,就过期了。对应的,当关闭(浏览器中)该页面的时候,此cookie就被浏览器删除了;
4.secure
secure:表示该Cookie只能用https传输。一般用于包含认证信息的Cookie,要求传输此cookie的时候,必须用https传输;
5.httponly
httponly:表示此Cookie必须用于http或https传输。这意味着,浏览器脚本(比如Javascript中)是不允许访问操作Cookie。

对于一些需要输入验证码才能登陆的网站,可以采用Cookie来解决问题。

  1. 获取Cookies的方法:get_cookies();
  2. 获取指定name的Cookie:driver.get_cookie(name);
  3. 清除Cookie:delete_cookie()。

3. 获取cookie

3.1 未登录网站

打开浏览器,而不输入任何网址,查看Cookie。

from selenium import webdriver
from time import sleep

#仅仅启动浏览器后,观察cookies
driver = webdriver.Firefox()
print("仅仅启动浏览器后的cookies == %s" % driver.get_cookies())
driver.quit()

结果:Cookies值为空
仅仅启动浏览器后的cookies == []

3.2 获取Cookie(仅仅打开网站)

打开浏览器,打开51cto的登录页,再获得cookies。

from selenium import webdriver
from time import sleep

#仅仅启动浏览器后,观察cookies
driver = webdriver.Firefox()
print("仅仅启动浏览器后的cookies == %s" % driver.get_cookies())
sleep(2)
driver.get("https://home.51cto.com/index?reback=http://www.51cto.com/")
#启动启动浏览器后,打开51cto网站,观察cookies
print("打开51cto网站后的cookies == %s" % driver.get_cookies())
sleep(2)
driver.quit()

运行结果,观察到Cookie的内容如下:

打开51cto网站后的
cookies == [{'name': 'waf_cookie', 'value': '95e69c9e-fb7a-4f25c8a6a40e1e70de0d13a1aa4db5c91dac', 'path': '/', 'domain': 'home.51cto.com', 'secure': False, 'httpOnly': True}, {'name': 'acw_tc', 'value': '2760826615830716737054425e572528b6ee0a77b6c7f775925c4cc8da5e38', 'path': '/', 'domain': 'home.51cto.com', 'secure': False, 'httpOnly': True, 'expiry': 1585750075}, {'name': 'PHPSESSID', 'value': 'g6pfj5a2fsk8mluifre3affm65', 'path': '/', 'domain': 'home.51cto.com', 'secure': False, 'httpOnly': True}, {'name': '_csrf', 'value': 'eab71d25bbb517398da316a7767175c406ee473aa513645b039a9d544c87b4b7a%3A2%3A%7Bi%3A0%3Bs%3A5%3A%22_csrf%22%3Bi%3A1%3Bs%3A32%3A%22BMUMbCHkLJaFBgJ7ZWq7RRCqqi1HhqH6%22%3B%7D', 'path': '/', 'domain': 'home.51cto.com', 'secure': False, 'httpOnly': True}, {'name': '_ourplusFirstTime', 'value': '120-3-1-22-7-54', 'path': '/', 'domain': 'home.51cto.com', 'secure': False, 'httpOnly': False, 'expiry': 1619071674}, {'name': '_ourplusReturnTime', 'value': '120-3-1-22-7-54', 'path': '/', 'domain': 'home.51cto.com', 'secure': False, 'httpOnly': False, 'expiry': 1619071674}, {'name': '_ourplusReturnCount', 'value': '1', 'path': '/', 'domain': 'home.51cto.com', 'secure': False, 'httpOnly': False, 'expiry': 1619071674}, {'name': 'www51cto', 'value': '50DD08DE4D45347E6D9C324988918495Xnbn', 'path': '/', 'domain': '.51cto.com', 'secure': False, 'httpOnly': False, 'expiry': 1898431674}, {'name': 'Hm_lvt_844390da7774b6a92b34d40f8e16f5ac', 'value': '1583071675', 'path': '/', 'domain': '.home.51cto.com', 'secure': False, 'httpOnly': False, 'expiry': 1614607675}, {'name': 'Hm_lpvt_844390da7774b6a92b34d40f8e16f5ac', 'value': '1583071675', 'path': '/', 'domain': '.home.51cto.com', 'secure': False, 'httpOnly': False}]

3.3 获得Cookie(登录后)

先登录51cto网站,在获得Cookies,运行代码,观察到输出的Cookie有了变化。

from selenium import webdriver
from time import sleep

#仅仅启动浏览器后,观察cookies
driver = webdriver.Firefox()
print("仅仅启动浏览器后的cookies == %s" % driver.get_cookies())
sleep(2)
driver.get("https://home.51cto.com/index?reback=http://www.51cto.com/")
#启动浏览器后,打开51cto网站,观察cookies
print("打开51cto网站后的cookies == %s" % driver.get_cookies())
sleep(2)
driver.find_element_by_xpath("//*[@id='login-wechat']/div[3]/a").click()
driver.find_element_by_xpath("//*[@id='loginform-username']").send_keys("hb****")
driver.find_element_by_xpath('//*[@id="loginform-password"]').send_keys("87654321")
# driver.find_element_by_id("loginform-password").send_keys("87654321")  #定义pwd,通过id也可的哦
driver.find_element_by_xpath('//*[@id="login-form"]/div[4]/input[1]').click()
sleep(2)
print("登录51cto网站后的cookies == %s" % driver.get_cookies())
sleep(2)
driver.quit()

结果:

登录51cto网站后的
cookies == [{'name': 'www51cto', 'value': '50DD08DE4D45347E6D9C324988918495Xnbn', 'path': '/', 'domain': '.51cto.com', 'secure': False, 'httpOnly': False, 'expiry': 1898431674}, {'name': 'pub_sauth1', 'value': 'CQZVHBVWBVM6DQQJUA1fPQUGDFdWBQQHVVo', 'path': '/', 'domain': '.51cto.com', 'secure': False, 'httpOnly': True, 'expiry': 1583935680}, {'name': 'pub_sauth2', 'value': '83976623bdbfba728859ba24480e9d78', 'path': '/', 'domain': '.51cto.com', 'secure': False, 'httpOnly': True, 'expiry': 1583935680}, {'name': 'pub_cookietime', 'value': '864000', 'path': '/', 'domain': '.51cto.com', 'secure': False, 'httpOnly': True, 'expiry': 1583935680}, {'name': 'pub_wechatopen', 'value': 'aG0wVVBdBFIEBQQGWg', 'path': '/', 'domain': '.51cto.com', 'secure': False, 'httpOnly': True, 'expiry': 1585663680}, {'name': 'pub_sauth3', 'value': 'UgQMAFQJVARRWgVWBAMEUwpVUFoAAlpWAlcAWlEHAwMAAl0OVggHVGxQBwFTBVdQBgReDFdSBwEHUwYNAVVUU1FVXQZVWwEFV1sDV1EFUAdWPlcNW1JSAgBTAQA', 'path': '/', 'domain': '.51cto.com', 'secure': False, 'httpOnly': True, 'expiry': 1583935680}, {'name': 'waf_cookie', 'value': 'b6ffca6f-f59f-40e7621bd3c842b5b5f0d84d41de6d6065d6', 'path': '/', 'domain': 'www.51cto.com', 'secure': False, 'httpOnly': True}, {'name': 'acw_tc', 'value': '2760828515830716798753340e43a84ecf598bb85eaeea74247db3f9f4488e', 'path': '/', 'domain': 'www.51cto.com', 'secure': False, 'httpOnly': True, 'expiry': 1585750081}]

精讲视频

如果你觉的文章读的不过瘾,可以查看详细的视频教程。

测试学习路线如下

热销图书

图书京东、当当有售
京东: https://item.jd.com/12784287.html
当当: http://product.dangdang.com/29177828.html
0.9733767060093851.png

同步视频知识与系列知识内容,可关注:【公众号】:柒哥测试;【WX】:Lee-890


posted @ 2022-05-07 14:53  BlaLeo  阅读(261)  评论(0编辑  收藏  举报