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. 建议添加异常处理机制
相关推荐
se-tester4 天前
JMeter、Postman 和 SoapUI 在做接口测试上的优势和缺点
测试工具·jmeter·接口测试·postman·soapui
xixi09244 天前
selenium IDE——command
selenium·测试工具
xixi09244 天前
selenium IDE安装使用教程
ide·selenium·测试工具
Wpa.wk5 天前
har文件转为接口自动化测试用例
运维·测试工具·自动化·测试用例·接口自动化
Wpa.wk5 天前
ubuntu22桌面版安装
经验分享·测试工具
袁袁袁袁满5 天前
Haystack与亮数据MCP工具结合实现自动化爬虫
爬虫·python·网络爬虫·数据采集·爬虫实战·视频爬虫·特推爬虫
谦虚的酷猫5 天前
SpiderDemo部分题目分析
javascript·网络爬虫
uyeonashi5 天前
自动化测试问卷考试系统测试报告
功能测试·selenium·github
007张三丰5 天前
软件测试专栏(6/20):Selenium从0到1实战指南:元素定位、等待机制与框架封装
selenium·测试工具