基于Chrome从需认证网站批量下载图片的技术问询
更优的认证网站图片批量下载方案
嘿,我来帮你摆脱手动复制源码、开一堆浏览器标签的低效操作,给你几个靠谱的解决方案👇
方案1:复用Chrome已登录的Cookie(最省事,推荐!)
既然你已经在Chrome里登录过目标网站了,直接把Chrome的登录Cookie拿到Python请求里用就行,不用重新认证,也不用手动复制任何内容。
步骤:
- 安装
browser-cookie3库,它能自动读取Chrome的Cookie:
pip install browser-cookie3
- 用
requests库带上Cookie批量下载图片:
import requests import browser_cookie3 # 获取目标网站在Chrome中的登录Cookie # 替换成实际的网站域名,比如"example.com" cj = browser_cookie3.chrome(domain_name="目标网站域名") def download_image(image_url, save_path): try: # 带上Cookie请求图片 resp = requests.get(image_url, cookies=cj) resp.raise_for_status() # 触发HTTP错误提示 with open(save_path, 'wb') as f: f.write(resp.content) print(f"✅ 成功保存:{save_path}") except Exception as e: print(f"❌ 下载失败 {image_url}:{str(e)}") # 假设你已经解析得到了图片URL列表 image_urls = ["https://目标网站/pic1.jpg", "https://目标网站/pic2.jpg"] for index, url in enumerate(image_urls): download_image(url, f"downloaded_image_{index}.jpg")
这个方案的优势:完全复用你已有的登录状态,不用额外操作,批量下载效率拉满,不会弹出一堆浏览器窗口。
方案2:用requests.Session模拟登录(长期稳定)
如果不想依赖Chrome的状态,可以直接用Python模拟登录,之后保持会话批量下载图片。适合需要定期执行下载任务的场景。
步骤:
- 先通过Chrome开发者工具(F12)找到网站的登录接口和需要提交的参数(比如用户名、密码、csrf_token等)。
- 编写代码模拟登录+批量下载:
import requests from bs4 import BeautifulSoup # 创建会话对象,自动保持登录状态 session = requests.Session() # 1. 先访问登录页面,提取csrf_token(如果网站有这个验证) login_page = session.get("https://目标网站/login页面URL") soup = BeautifulSoup(login_page.text, "html.parser") # 替换成实际的csrf_token字段名 csrf_token = soup.find("input", {"name": "csrf_token"}).get("value") # 2. 构造登录参数 login_data = { "username": "你的用户名", "password": "你的密码", "csrf_token": csrf_token # 如果不需要可以删除这行 } # 3. 发送登录请求 login_resp = session.post("https://目标网站/登录接口URL", data=login_data) login_resp.raise_for_status() # 确保登录成功 # 4. 批量下载图片 def download_image(image_url, save_path): try: resp = session.get(image_url) resp.raise_for_status() with open(save_path, 'wb') as f: f.write(resp.content) print(f"✅ 成功保存:{save_path}") except Exception as e: print(f"❌ 下载失败 {image_url}:{str(e)}") # 调用示例 image_urls = ["https://目标网站/pic1.jpg", "https://目标网站/pic2.jpg"] for index, url in enumerate(image_urls): download_image(url, f"downloaded_image_{index}.jpg")
这个方案的优势:不依赖浏览器,只要用户名密码正确就能自动完成登录和下载,适合自动化脚本。
方案3:用Selenium控制Chrome(应对复杂反爬/动态页面)
如果目标网站有复杂的JavaScript渲染、反爬验证,或者图片链接需要动态加载,用Selenium直接控制已登录的Chrome就能解决。
步骤:
- 先给Chrome开启远程调试:右键Chrome快捷方式,在「目标」末尾加上
--remote-debugging-port=9222(注意前面有空格),然后打开Chrome并登录目标网站。 - 编写代码连接到已登录的Chrome,提取Cookie后批量下载:
from selenium import webdriver from selenium.webdriver.chrome.options import Options import requests # 连接到已打开的Chrome options = Options() options.add_experimental_option("debuggerAddress", "127.0.0.1:9222") driver = webdriver.Chrome(options=options) # 提取Chrome中的Cookie,转换成requests能用的格式 session = requests.Session() for cookie in driver.get_cookies(): session.cookies.set(cookie["name"], cookie["value"]) # 批量下载图片 def download_image(image_url, save_path): try: resp = session.get(image_url) resp.raise_for_status() with open(save_path, 'wb') as f: f.write(resp.content) print(f"✅ 成功保存:{save_path}") except Exception as e: print(f"❌ 下载失败 {image_url}:{str(e)}") # 调用示例 image_urls = ["https://目标网站/pic1.jpg", "https://目标网站/pic2.jpg"] for index, url in enumerate(image_urls): download_image(url, f"downloaded_image_{index}.jpg") # 可选:关闭浏览器 driver.quit()
这个方案的优势:能处理各种复杂的网站场景,完全模拟真实用户的登录状态,不用手动复制页面源码。
内容的提问来源于stack exchange,提问作者Tianyun Ling
相关产品推荐
相关产品推荐

