首页 技术 正文
技术 2022年11月20日
0 收藏 651 点赞 4,852 浏览 2374 个字

1.先看一下cookie是啥

cookie是访问web时服务器记录在用户本地的一系列用户信息(比如用户登录信息),以便对用户进行识别

from selenium import webdriver
import timebase_url = "https://www.baidu.com"driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get(base_url)#打印所有cookie
print driver.get_cookies()

得到如下打印

python selenium2 有关cookie操作实例及如何绕开验证码

列表中为所有cookie,不同的cookie在其中各字典中

cookie_1 = {u'domain': u'.baidu.com',
u'name': u'BDORZ',
u'value': u'B490B5xxxxxxxxxxxxxxxxxDA1598',
u'expiry': 1490346310,
u'path': u'/',
u'httpOnly': False,
u'secure': False}

name:cookie的名称

value:cookie对应的值,动态生成的

domain:服务器域名

expiry:cookie有效终止日期

path:Path属性定义了Web服务器上哪些路径下的页面可获取服务器设置的cookie

httpOnly:防脚本攻击

secure:在cookie中标记该变量,表明只有当浏览器和Web Server之间的通信协议为加密认证协议时(当前即https),浏览器才向服务器提交相应的cookie

2.使用cookie绕开登录验证码

python selenium2 有关cookie操作实例及如何绕开验证码

登录百度时需要输入验证码,我们抓取登录前的cookie,和登录后的cookie,对比发生的变化

首先打开fiddler抓包

执行如下脚本,注意在输入验证码时脚本无法处理,所以加了等待,这时可以自己手动输入验证码,然后等待click

#coding=utf-8
from selenium import webdriver
import timebase_url = "https://www.baidu.com"
usr_name = "xxoo"
usr_pwd = "xxoo"driver = webdriver.Firefox()
driver.implicitly_wait(10)#清除所有cookie
driver.delete_all_cookies()
driver.get(base_url)
print driver.get_cookies()driver.find_element_by_link_text(u"登录").click()
driver.find_element_by_css_selector("#TANGRAM__PSP_8__userName").send_keys(usr_name)
driver.find_element_by_css_selector("#TANGRAM__PSP_8__password").send_keys(usr_pwd)
time.sleep(10)
#在这个等待的时间里去手动输入验证码driver.find_element_by_css_selector("#TANGRAM__PSP_8__submit").click()
time.sleep(3)
#打印登录后的cookie
print driver.get_cookies()

在打印中我们得到如下所有cookie

python selenium2 有关cookie操作实例及如何绕开验证码

在fiddler抓包中找到登录前后的包,其中有对应的cookie

登录前

python selenium2 有关cookie操作实例及如何绕开验证码

登录后

python selenium2 有关cookie操作实例及如何绕开验证码

这里的cookie中只能体现name和value信息,cookie的完整格式在前面讲到

对比前后cookie可以看到登录后多了BDORZ和BDUSS信息

那么我们在前面脚本打印的cookie中提出对应的这两组cookie,写入新的脚本中

执行新的脚本发现,不在需要输入用户名密码和验证码了,刷新后就会进入登录状态

#coding=utf-8
from selenium import webdriver
import timebase_url = "https://www.baidu.com"
driver = webdriver.Firefox()
driver.implicitly_wait(10)#清除所有cookie
driver.delete_all_cookies()
driver.get(base_url)cookie_1 = {u'domain': u'.baidu.com',
u'name': u'BDORZ',
u'value': u'B490B5EBXXXXXXXXXXXXXDA1598',
u'expiry': 1490346310,
u'path': u'/',
u'httpOnly': False,
u'secure': False}cookie_2 = {u'domain': u'.baidu.com',
u'name': u'BDUSS',
u'value': u'o0Z29lNFRPOE85TXXXXXXXXXXXXXXXXXXXXXXXXXXXQnk2Rno3dmFIUHRZSVFBQUFBJCQAAAAAAAAAAAEAAAC8yRwCXXXXd2VlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANqP01jaj9NYak',
u'expiry': 1749459934,
u'path': u'/',
u'httpOnly': True,
u'secure': False}#添加cookie
driver.add_cookie(cookie_1)
driver.add_cookie(cookie_2)
time.sleep(2)
driver.refresh()

#水平拙劣,不妥之处请指正

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,110
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,584
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,431
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,202
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,837
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,920