selenium可以帮助我们驱动浏览器打开网页,并进行一些特定的操作。但是现在越来越多的网站,也会识别selenium,并且限制了访问条件,比如:必须登录。
在selenium中,get_cookies()方法可以帮助我们获取cookie。这里以知乎为例演示一下使用。
这里用到的浏览器驱动对象为 undetected_chromedriver 模块生成,他的作用可以让selenium绕过检测。详情课看我另一条笔记http://t.csdnimg.cn/mIroG
基本操作步骤:
一、
1、使用selenium驱动打开网页,设置一定的等待时长,方便我们手动输入账户信息
2、当我们手动登录成功之后,浏览器中便会生成我们的cookie信息
3、调用selenium方法获取cookie,并保存到本地,这样我们就可以直接读取本地的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的文件
二、携带本地的cookies访问网页
需要注意的是,这个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)
三、登录成功
版权归原作者 ashengz 所有, 如有侵权,请联系我们删除。