0


使用selenium驱动浏览器时携带cookie实现模拟登陆

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)

三、登录成功


本文转载自: https://blog.csdn.net/ashengz/article/details/133862470
版权归原作者 ashengz 所有, 如有侵权,请联系我们删除。

“使用selenium驱动浏览器时携带cookie实现模拟登陆”的评论:

还没有评论