cookie的处理,一部分是运用到爬虫,另一部分是运用到登录的验证码的获取。
今天来看看webdriver对 cookie都有哪些神操作。
知道了cookie 有这么多神操作,那么怎么能抓取到cookie呢?
使用我们的神秘武器 "Fiddler"(Charles 也可以)。
Fiddler确实是一个十分牛叉的工具:可以抓包,可以测试接口(Web/APP),可以抓信息等,
>>> 这里我就不演示Fiddler的用法了
我们上代码,看看cookie到底有啥操作:
- # -*- coding: utf-8 -*-
- """
- @ auth : carl_DJ
- @ time : 2020-5-22
- """
-
- from selenium import webdriver
-
- #不打开浏览器运行
- option = webdriver.ChromeOptions()
- option.add_argument('headless')
- driver = webdriver.Chrome(chrome_options=option)
-
- url = "http://www.baidu.com"
- driver.get(url)
-
- #获取cookie
- cookie= driver.get_cookies()
- #打印cookie
- print(cookie)
-
- #退出浏览器
- driver.quit
打印的结果如下:
- [{'domain': '.baidu.com', 'httpOnly': False, 'name': 'H_PS_PSSID', 'path': '/', 'secure': False, 'value': '31355_1449_31670_21120_31110_31596_30842_31464_31322_30823'}, {'domain': '.baidu.com', 'expiry': 1621646261.050973, 'httpOnly': False, 'name': 'BAIDUID', 'path': '/', 'secure': False, 'value': '8DDCEC4A62A0DE72D84C5A02861269B2:FG=1'}, {'domain': '.baidu.com', 'expiry': 3737593908.050941, 'httpOnly': False, 'name': 'BIDUPSID', 'path': '/', 'secure': False, 'value': '8DDCEC4A62A0DE7242C056D21382AE78'}, {'domain': '.baidu.com', 'expiry': 3737593908.050959, 'httpOnly': False, 'name': 'PSTM', 'path': '/', 'secure': False, 'value': '1590110259'}, {'domain': 'www.baidu.com', 'expiry': 1590974262, 'httpOnly': False, 'name': 'BD_UPN', 'path': '/', 'secure': False, 'value': '12314753'}, {'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'BD_HOME', 'path': '/', 'secure': False, 'value': '1'}]
-
是不是很乱,因为所有的信息都打印出来了,那么我们只想要几个的信息怎么办,有办法的,看下面的代码:
- .....
-
- #向cookie添加信息
- driver.add_cookie({"name":"abc123456","value":"value123456"})
-
- #遍历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()
-
- #退出浏览器
- driver.quit()
-
打印结果如下:
- abc123456 -> value123456
- H_PS_PSSID -> 31351_1445_31669_21078_31594_31270_31464_30823
- BAIDUID -> 185872EDC7B507D5EBF82AD614049B02:FG=1
- BIDUPSID -> 185872EDC7B507D50824068F1F271AD8
- PSTM -> 1590111110
- BD_UPN -> 12314753
- BD_HOME -> 1
是不是很简单。
在实际项目中,我们验证cookie方法有三种:
①获取真的 cookie信息,然后填写;
②开发写一个万能验证码,随便填写cookie信息;
③不填写cookie信息,跳过。
>>>安全性最高的,肯定是第一种,当然,也是最麻烦的了。没办法,鱼与熊掌不能兼得。
举个例子,我们来整一个登录操作
- from selenium import webdriver
- from selenium.webdriver.common.by import By
- import os,time
-
-
- #不打开浏览器运行
- option = webdriver.ChromeOptions()
- option.add_argument('headless')
- driver = webdriver.Chrome(chrome_options=option)
-
- url = "http://项目地址"
- driver.get(url)
-
- #填写登录名和密码
- driver.find_element(By.ID,"usn").send_keys("username")
- driver.find_element(By.ID,"pwd").send_keys("password")
-
- # #获取cookie
- cookies =driver.get_cookies()
- # #遍历cookies中的信息,并打印
- for cookie in cookies:
- print(cookie)
-
- #添加cookie
- driver.add_cookie({"name":"abc123456","value":"value123456"})
-
- #点击登录按钮
- driver.find_element(By.ID,"login").click()
-
- #刷新页面
- driver.refresh()
- time.sleep(3)
-
- #退出
- driver.quit()