Cookie处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cookie处理相关的知识,希望对你有一定的参考价值。

参考技术A Cookie存储在客户端,Cookie存储的数据量有限,不同的浏览器存储容量也不同,一般不超过4KB,因此Cookie只能存储一些少量的数据。

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

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

Cookie所具有的属性一般包括以下几项。

·Domain:域,表示当前Cookie属于哪个域或子域。对于服务器返回的Set-Cookie,如果没有指定Domain的值,那么其Domain的值默认为当前所提交的HTTP请求所对应的主域名。例如访问http://www.example.com,返回一个Cookie,如果没有指名Domain的值,那么其值为默认的www.example.com。

·Path:表示Cookie的所属路径。

·Expire time/Max-age:Cookie的有效期。Expire time的值是一个时间,过了这个时间该Cookie就失效了;或者是用Max-age指定当前Cookie在多长时间之后失效。如果服务器返回的一个Cookie没有指定其Expire time,那么表明此Cookie的有效期只是当前的Session,即Session Cookie,当前Session会话结束后就过期了。对应的,当关闭(浏览器中)该页面的时候,此Cookie就被浏览器删除了。

·secure:表示该Cookie只能用HTTPS传输。一般用于包含认证信息的Cookie,要求传输此Cookie的时候必须用HTTPS传输。

·httponly:表示此Cookie必须用于HTTP或HTTPS传输。这意味着浏览器脚本(如javascript中)是不允许访问操作Cookie的。

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

·获取Cookies的方法:get_cookies();

·获取指定name的Cookie:driver.get_cookie(name);

·清除Cookie:delete_cookie()。

cookie处理

有时候我们需要验证浏览器中是否存在某个 cookie,因为基于真实的 cookie 的测试是无法通过白盒和集成测试完成的。webdriver 可以读取、添加和删除 cookie 信息。webdriver 操作 cookie 的方法有:

  • get_cookies() 获取cookie信息
  • get_cookie(name) 返回特定name 有cookie 信息
  • add_cookie(cookie_dict) 添加 cookie,必须有 name 和 value 值
  • delete_cookie(name)   删除特定(部分)的 cookie 信息
  • delete_all_cookies():删除所有 cookie 信息

通过 webdriver 操作 cookie 是一件非常有意思的事儿,有时候我们需要了解浏览器中是否存在了某个cookie 信息,webdriver 可以帮助我们读取、添加,删除 cookie 信息

打印cookie信息

#coding=utf-8
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.youdao.com")
# 获得 cookie 信息
cookie= driver.get_cookies()
#将获得 cookie 的信息打印
print cookie
driver.quit()

对cookie 操作

上面的方式打印了所有 cookie 信息,太多太乱,我们只想有真对性的打印自己想要的信息,看下面的例子

#coding=utf-8
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get("http://www.youdao.com")
#向 cookie 的 name 和 value 添加会话信息。
driver.add_cookie({name:key-aaaaaaa, value:value-bbbb})
#遍历 cookies 中的 name 和 value 信息打印,当然还有上面添加的信息
for cookie in driver.get_cookies():
print "%s -> %s" % (cookie[name], cookie[value])
##### 下面可以通过两种方式删除 cookie #####
# 删除一个特定的 cookie
driver.delete_cookie("CookieName")
# 删除所有 cookie
driver.delete_all_cookies()
time.sleep(2)
driver.close()

运行打印信息:

技术分享图片

获取对象的属性

获取测试对象的属性能够帮我们更好的进行对象的定位,比如页面上很多标签为input 元素,而我们需要定位其中 1 个有具有 data-node 属性不一样的元素。由于 webdriver 是不支持直接使用 data-node 来定位对象的所以我们只能先把所有标签为 input 都找到,然后遍历这些 input,获取想要的元素

<input type="checkbox" data-node="594434499" data-convert="1" data-type="file">
<input type="checkbox" data-node="594434498" data-convert="1" data-type="file">
<input type="checkbox" data-node="594434493" data-convert="1" data-type="file">
<input type="checkbox" data-node="594434497" data-convert="1" data-type="file">

通过 find_elements 获得一组元素,通过循环遍历打到想要的元素

# 选择页面上所有的 tag name 为 input 的元素
inputs = driver.find_elements_by_tag_name(input)
#然后循环遍历出 data-node 为594434493的元素,单击勾选
for input in inputs:
if input.get_attribute(data-node) == 594434493:
input.click()
……

 

以上是关于Cookie处理的主要内容,如果未能解决你的问题,请参考以下文章

cookie处理

selenium自动化——cookie处理

Selenium with Python 007 - Cookie处理

在 PhoneGap/Cordova 中处理 cookie

django处理cookie的机制

cookie处理token