Selenium配合Cookies实现网页免登录

文章目录

  • 前言
  • [1 方案一:使用Chrome用户数据目录](#1 方案一:使用Chrome用户数据目录)
  • [2 方案二:手动获取并保存Cookies,后续使用保存的Cookies](#2 方案二:手动获取并保存Cookies,后续使用保存的Cookies)
  • [3 注意事项](#3 注意事项)

前言

  • 在进行使用Selenium进行爬虫、网页自动化操作时,登录往往是一个必须解决的问题,但是Selenium每次打开的浏览器默认是不携带用户数据的,所以每次都需要手动登录。本文将详细介绍如何使用Selenium配合Cookies实现网页的自动登录功能,以链家网站为例进行讲解。

  • 实现思路

    1. 使用本地保存的Chrome用户数据目录
    2. 先手动登录一次获取并保存Cookies,后续使用保存的Cookies

1 方案一:使用Chrome用户数据目录

  • 思想:这种方案的核心是直接使用本地Chrome浏览器的用户数据,包括已保存的登录状态和Cookie信息。

  • 代码实现(代码执行之前先保证手动正常打开网站时,网站是登陆了的,不然使用的用户数据也是没有登陆的,没有用)

python 复制代码
from selenium import webdriver
from selenium.webdriver.chrome.service import Service

driver_path = "E:\\ProgramFiles\\_CodeTools\\ChromeDriver\\chromedriver.exe"
service = Service(driver_path)

options = webdriver.ChromeOptions()
# 设置用户数据目录
options.add_argument("--user-data-dir=C:/Users/L/AppData/Local/Google/Chrome/User Data")
# 禁用自动化提示
options.add_experimental_option("useAutomationExtension", False)
options.add_experimental_option("excludeSwitches", ["enable-automation"])

browser = webdriver.Chrome(service=service, options=options)
browser.get("https://bj.lianjia.com/ershoufang/")

# 后续操作
# ...
  • 核心代码:
python 复制代码
options.add_argument("--user-data-dir=C:/Users/L/AppData/Local/Google/Chrome/User Data")

该代码的作用是设置Chrome浏览器的用户数据目录(C:/Users/L/AppData/Local/Google/Chrome/User Data),使得Selenium可以直接使用本地Chrome浏览器的用户数据,包括已保存的登录状态和Cookie信息。不过应注意用户数据目录随操作系统、用户名等不同而不同,需要根据实际情况进行调整。

  • 不同操作系统的数据目录如下:

    • Windows: C:/Users/用户名/AppData/Local/Google/Chrome/User Data
    • macOS: ~/Library/Application Support/Google/Chrome/Profile 1
    • Linux: ~/.config/google-chrome/Default
  • 优点

    • 实现简单,不需要手动处理Cookie,代码量少
    • 可以直接使用本地浏览器的所有配置
  • 缺点

    • 依赖本地Chrome浏览器配置
    • 可能存在跨设备兼容性问题
    • 需要指定正确的用户数据目录路径

2 方案二:手动获取并保存Cookies,后续使用保存的Cookies

  • 思想:这种方案的核心是先通过手动登录获取网站的Cookies信息,将其保存到本地文件,后续使用时直接读取并应用这些Cookies来实现自动登录。

  • 代码实现(第一步:获取Cookies)

python 复制代码
import json
from selenium import webdriver
from selenium.webdriver.chrome.service import Service

driver_path = "E:\\ProgramFiles\\_CodeTools\\ChromeDriver\\chromedriver.exe"
service = Service(driver_path)

options = webdriver.ChromeOptions()
options.add_experimental_option("useAutomationExtension", False)
options.add_experimental_option("excludeSwitches", ["enable-automation"])

browser = webdriver.Chrome(service=service, options=options)
browser.get("https://bj.lianjia.com/ershoufang/")

# 等待手动登录
input("请登录后按回车继续...")

# 获取cookie并保存
cookies = browser.get_cookies()
with open("cookies.json", "w") as f:
    json.dump(cookies, f, indent=4)

# 关闭浏览器
browser.quit()

这一步在浏览器打开后网页是没有登录的,需要我们手动按照网页要求进行登录,登录完成后命令行回车,程序获取Cookies后保存到本地文件,结束程序。

  • 代码实现(第二步:使用Cookies实现免登录)
python 复制代码
import json
from selenium import webdriver
from selenium.webdriver.chrome.service import Service

driver_path = "E:\\ProgramFiles\\_CodeTools\\ChromeDriver\\chromedriver.exe"
service = Service(driver_path)

options = webdriver.ChromeOptions()
options.add_experimental_option("useAutomationExtension", False)
options.add_experimental_option("excludeSwitches", ["enable-automation"])

browser = webdriver.Chrome(service=service, options=options)
browser.get("https://bj.lianjia.com/ershoufang/")

# 读取并添加cookie
with open("cookies.json", "r") as f:
    cookies = json.load(f)
for cookie in cookies:
    browser.add_cookie(cookie)

# 刷新页面,完成登录
browser.refresh()

# 后续操作
# ...

这一步代码是读取保存的Cookies,并将其添加到浏览器中,完成自动登录。

  • 核心代码:
python 复制代码
# 步骤一:获取并保存Cookies
cookies = browser.get_cookies()
with open("cookies.json", "w") as f:
    json.dump(cookies, f, indent=4)

# 步骤二:读取并使用Cookies
with open("cookies.json", "r") as f:
    cookies = json.load(f)
for cookie in cookies:
    browser.add_cookie(cookie)

这段代码展示了Cookies的获取、保存和使用过程。需要注意的是,Cookies通常都有有效期,过期后需要重新获取。

  • 优点
    • 可跨设备使用,便于部署
    • Cookie可以保存和复用
    • 实现更灵活,可以针对不同网站保存不同的Cookie
  • 缺点
    • 需要先手动登录获取Cookie
    • Cookie可能会过期,需要定期更新
    • 实现步骤相对较麻烦

3 注意事项

  1. ChromeDriver版本要与Chrome浏览器版本匹配
  2. Cookie有效期有限,需要定期更新
  3. 不同网站的Cookie获取方式可能不同
  4. 注意Cookie的安全存储,避免泄露
  5. 建议添加异常处理机制
相关推荐
小绫网络安全5 小时前
Wireshark抓包完全入门教程:从零开始掌握网络分析
arm开发·测试工具·wireshark
梦想不只是梦与想20 小时前
鸿蒙 测试工具:DevEco Testing(一)
测试工具·harmonyos·testing
ClouGence1 天前
Selenium 写不动了?这个工具录一次就能跑 Web 自动化
前端·selenium·测试
我的xiaodoujiao2 天前
快速学习Python基础知识详细图文教程17--类型注解和断点调试
开发语言·python·学习·测试工具
泽众云测试2 天前
泽众软件与日联科技达成合作,TestOne自动化测试平台助力搭建工业检测装备数字化品控防线
功能测试·测试工具·自动化
xy34532 天前
SQLMap 核心语法与使用指南(三)
测试工具·渗透测试·sqlmap
我的xiaodoujiao2 天前
快速学习Python基础知识详细图文教程18--多线程
开发语言·python·学习·测试工具
匠测AI说2 天前
Selenium 工作原理深度解析:从架构到实践
selenium·测试工具·架构
程序员杰哥2 天前
依赖于第三方接口时,如何进行测试?
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
Python大数据分析@3 天前
使用大模型MCP采集数据,爬虫已经无门槛
python·网络爬虫