Python中如何使用selenium填入cookie登录网站,其他网站可以但www2.baidu.com不能存入cookie的原因及解决方法

url = ‘https://www2.baidu.com
options = webdriver.ChromeOptions()
options.add_argument(‘lang=zh_CN.UTF-8’)
options.add_argument(“user-agent=‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36’”)
browser = webdriver.Chrome(chrome_options=options)
browser.get(url)
cookie1 = {}
.
.
.
browser.add_cookie(cookie1)
.
.
.
time.sleep(3)
browser.refresh()
Python中如何使用selenium填入cookie登录网站,其他网站可以但www2.baidu.com不能存入cookie的原因及解决方法


3 回复

这个问题我遇到过,www2.baidu.com 的 Cookie 设置确实有点特殊。

核心原因是百度对 www2.baidu.com 这个域名的 Cookie 设置了严格的 SameSiteSecure 属性,并且可能对来源进行了校验。直接用 driver.add_cookie() 方法添加的 Cookie 如果不符合这些属性要求,浏览器就不会接受。

解决方法的关键在于在添加 Cookie 时,手动设置其 domain 属性为 .baidu.com(注意前面的点)。这样 Cookie 就能作用于 baidu.com 的所有子域,包括 www.baidu.comwww2.baidu.com

下面是一个完整的示例代码:

from selenium import webdriver
import time

# 1. 启动浏览器,先访问目标域名
driver = webdriver.Chrome()
driver.get("https://www2.baidu.com")
time.sleep(2) # 等待页面加载

# 2. 准备你的 Cookie 字典
# 这里需要替换成你从浏览器开发者工具中获取的真实 Cookie
# 格式通常是 name: value 的键值对
my_cookies = {
    'BDUSS': '你的BDUSS值',
    'BAIDUID': '你的BAIDUID值',
    # ... 其他必要的 Cookie
}

# 3. 关键步骤:遍历并添加 Cookie,指定 domain 为 '.baidu.com'
for name, value in my_cookies.items():
    # 构建符合要求的 Cookie 字典
    cookie_dict = {
        'name': name,
        'value': value,
        'domain': '.baidu.com', # 重点!设置为顶级域
        # 根据实际情况,可能还需要设置 'path',通常为 '/'
        'path': '/',
        # 如果原 Cookie 有 Secure 标志,且当前是 HTTPS,可以设为 True
        # 'secure': True,
        # 如果原 Cookie 有 HttpOnly 标志,Selenium 无法设置,可忽略
    }
    try:
        driver.add_cookie(cookie_dict)
        print(f"成功添加 Cookie: {name}")
    except Exception as e:
        print(f"添加 Cookie {name} 时出错: {e}")

# 4. 刷新页面,使 Cookie 生效
driver.refresh()
time.sleep(3)

# 5. 检查登录状态,例如通过页面标题或特定元素
# if "百度一下" in driver.title:
#     print("登录成功!")
# else:
#     print("登录可能未成功。")

# 后续操作...
# driver.quit()

要点解释:

  • domain: ‘.baidu.com’:这是让 Cookie 在 www2.baidu.com 生效的关键。前面的点表示它对该域名及其所有子域都有效。
  • 先访问再添加:Selenium 要求必须在当前浏览上下文的域中添加 Cookie,所以要先 get 到目标网站。
  • Cookie 来源:你需要从已登录的浏览器中(通过开发者工具的 Application 或 Storage 标签页)手动复制 BDUSSBAIDUID 等关键 Cookie 的值替换到代码中。
  • 路径 (path):通常设为 '/' 表示对站点所有路径有效。
  • 安全标志 (secure):如果原 Cookie 标记了 Secure(仅通过 HTTPS 传输),且你用的是 HTTPS 链接,可以设置为 True

如果按照以上方法操作后仍然不行,可能是百度对 www2 这个子域有额外的风控策略,或者你的 Cookie 已经过期失效。可以尝试先获取 www.baidu.com 的 Cookie,然后用同样的 domain: '.baidu.com' 的方法添加,再跳转到 www2.baidu.com

总结:手动设置 Cookie 的 domain 属性为顶级域是关键。


百度登录,模拟一下 RSA 加密过程,可以用模拟请求的方式做


编程新手 刚学习 python 模拟请求指的是 用 request post 方式吗
主要我想实现自动登陆 点击下载图标 下载每日数据表
selenium 这个方法看上去 只要找到对应 html 元素 就可以点击下载

回到顶部