赞
踩
selenium可以帮助我们驱动浏览器打开网页,并进行一些特定的操作。但是现在越来越多的网站,也会识别selenium,并且限制了访问条件,比如:必须登录。
在selenium中,get_cookies()方法可以帮助我们获取cookie。这里以知乎为例演示一下使用。
这里用到的浏览器驱动对象为 undetected_chromedriver 模块生成,他的作用可以让selenium绕过检测。详情课看我另一条笔记http://t.csdnimg.cn/mIroG
基本操作步骤:
一、
1、使用selenium驱动打开网页,设置一定的等待时长,方便我们手动输入账户信息
2、当我们手动登录成功之后,浏览器中便会生成我们的cookie信息
3、调用selenium方法获取cookie,并保存到本地,这样我们就可以直接读取本地的cookie值进行登陆即可。不需要每打开一次这个网页进行登陆
二、携带cookie进行登陆
- # 相关模块导入
- import time
- from selenium import webdriver
- import json
-
-
- def save_cookie():
- """获取cookie并保存"""
- # 设置20秒的等待时长,以便手动进行登陆
- time.sleep(20)
- # 使用驱动对象获取cookie,并保存在本地
- with open("cookies.json", "w") as f:
- json.dump(driver.get_cookies(), f)
-
-
- if __name__ == '__main__':
- # selenium 4版本必须要设置浏览器选项,否则会闪退
- option = webdriver.EdgeOptions()
- option.add_experimental_option("detach", True)
- # 实例化浏览器驱动对象,并将配置浏览器选项
- driver = webdriver.Edge(options=option)
- url = "https://www.zhihu.com/"
- driver.get(url=url)
-
- save_cookie()
可以发现已经生成了一个cookies.json的文件
需要注意的是,这个cookie我们是需要修改的,如何确定要修改的参数?
可以看到下面,我们获取下来的cookie是保存在列表当中的多个字典,每个字典都是一个cookie。所以我们需要变量列表,以字典的形式向浏览器中添加。
添加的格式按照一下格式就好。
"expiry"字段需要删除,否则会报错,他代表的是cookie的有效时长
- def cookie_login():
- with open("cookies.json", "r", encoding="utf-8") as f:
- listCookies = json.load(f)
- for cookie in listCookies:
- # print(cookie)
- cookie_dict = {
- "domain": cookie.get("domain"),
- "name": cookie.get("name"),
- "value": cookie.get("value"),
- # "expiry": "",
- "path": cookie.get("path"),
- "httpOnly": False,
- "sameSite": "Lax",
- "secure": False,
- }
- driver.add_cookie(cookie_dict)
- driver.refresh()
-
-
-
- if __name__ == '__main__':
- driver = uc.Chrome()
- url = "https://www.zhihu.com/"
- driver.get(url=url)
- # save_cookie()
-
- # 清除已有cookie
- driver.delete_all_cookies()
- time.sleep(2)
- cookie_login()
- time.sleep(3)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。