如何结合Python的requests与Selenium实现登录并共享Cookie
核心思路
用Selenium完成需要JS交互的登录流程,提取登录后的会话Cookie,再将其转换为requests可识别的格式,后续用requests带着这些Cookie请求目标页面,实现会话共享。
具体步骤与代码示例
1. 用Selenium完成登录并提取Cookie
启动浏览器,模拟用户操作完成登录(包括点击JS渲染的按钮),再获取当前会话的Cookie:
from selenium import webdriver from selenium.webdriver.common.by import By import time # 初始化Chrome浏览器(需提前配置ChromeDriver) driver = webdriver.Chrome() driver.get("你的登录页面URL") # 模拟输入账号密码(根据实际页面元素调整选择器) driver.find_element(By.ID, "username").send_keys("你的账号") driver.find_element(By.ID, "password").send_keys("你的密码") # 点击JS实现的下一步按钮 driver.find_element(By.CSS_SELECTOR, "button.next-btn").click() # 等待登录完成,确保Cookie已生成 time.sleep(3) # 提取当前会话的所有Cookie selenium_cookies = driver.get_cookies() # 关闭浏览器(后续无需Selenium操作时可执行) driver.quit()
2. 将Selenium Cookie转换为requests可用格式
requests支持两种Cookie使用方式,这里推荐用RequestsCookieJar,更贴合浏览器Cookie逻辑:
import requests # 初始化CookieJar对象 cookie_jar = requests.cookies.RequestsCookieJar() # 逐个转换Selenium的Cookie并添加到Jar中 for cookie in selenium_cookies: cookie_jar.set( name=cookie['name'], value=cookie['value'], domain=cookie.get('domain'), path=cookie.get('path') )
3. 使用requests带着Cookie请求页面
现在可以用requests发起请求,直接复用Selenium的登录会话:
# 请求需要登录权限的目标页面 response = requests.get("目标页面URL", cookies=cookie_jar) # 验证登录状态(比如检查响应内容是否包含登录后专属内容) print(response.text)
注意事项
- 确保Selenium的登录操作完全模拟用户行为,比如等待页面加载、处理验证码(若有验证码,需额外用识别工具或手动处理)。
- 部分网站会校验User-Agent,建议requests请求时使用和Selenium相同的User-Agent:
# 在Selenium关闭前获取User-Agent user_agent = driver.execute_script("return navigator.userAgent;") # 请求时添加headers headers = {"User-Agent": user_agent} response = requests.get("目标页面URL", cookies=cookie_jar, headers=headers) - 带有
HttpOnly标记的Cookie,Selenium仍能正常提取,requests也可直接使用,无需额外处理。
内容的提问来源于stack exchange,提问作者Freddy Go
相关产品推荐
相关产品推荐

