如果您在夜间启动市场解析,农场Facebook Ads账户8小时或自动化大量Instagram发布——您可能会遇到会话中断的问题。代理更改IP,浏览器丢失cookies,脚本在工作第三小时崩溃。在本指南中,我们将探讨如何为从几个小时到整天不间断运行的任务设置稳定的长时间会话。
什么是会话管理,为什么需要它
会话管理是指在较长时间内管理您工具(浏览器、脚本、机器人)与目标服务之间的连接状态。对于短期任务——例如在5分钟内解析100个产品——这并不重要。但如果任务持续几个小时,保持以下内容就显得至关重要:
- 相同的IP地址——以防网站怀疑设备被替换
- Cookies和localStorage——用于授权和跟踪操作
- 浏览器指纹——设备特征集(User-Agent、屏幕分辨率、WebGL)
- 脚本状态——哪些页面已处理,在哪个地方因故障停止
如果在过程中至少一个参数发生变化——网站可能会封锁账户,停止解析验证码或重置授权会话。
典型的长时间任务: Facebook Ads账户农场(6-12小时预热),在Wildberries上解析所有类别的产品(3-8小时),在50个Instagram账户上进行大量发布(4-10小时,带延迟),24/7监控竞争对手的价格。
长时间会话的典型问题
让我们分析一下,通常是什么导致长时间会话中断并导致任务停止:
1. 代理IP地址的轮换
许多代理服务默认每5-15分钟更换一次IP。对于没有授权的解析,这很正常,但如果您已登录Facebook Ads账户——在会话中间从莫斯科切换到圣彼得堡的IP将引起怀疑。平台将要求确认登录,发送代码到手机,或者因可疑活动而封锁账户。
解决方案:使用粘性会话(sticky sessions)——一种模式,代理在10分钟、1小时或24小时内提供相同的IP。有关更多信息,请参见下面的部分。
2. 代理端的连接超时
一些代理提供商在10-30分钟内没有活动时会中断连接。如果您的脚本在操作之间暂停(例如,模拟人类——5分钟查看产品,然后转到下一个),代理可能会关闭连接。在尝试继续工作时,脚本将收到错误并崩溃。
解决方案:配置保持活动请求(每2-3分钟ping代理)或选择没有严格超时的提供商。住宅和移动代理通常比数据中心保持连接的时间更长。
3. 浏览器指纹的变化
如果您重新启动反检测浏览器或脚本创建新的浏览器实例——指纹会发生变化。即使使用相同的IP,网站也会看到User-Agent、屏幕分辨率、字体列表或canvas指纹与上一个会话不同。这会触发反欺诈系统。
解决方案:保存浏览器配置文件(在Dolphin Anty、AdsPower、Multilogin中自动完成)并在每次启动时不要创建新的。如果使用Selenium或Puppeteer——请保存带有cookies和设置的用户数据目录。
4. 脚本在故障时丢失状态
脚本解析了6小时,处理了8000个产品中的10000个,并因网络错误崩溃。如果不保存进度——将不得不从头开始。这对于12小时以上的任务尤其关键。
解决方案:每N次迭代(例如,每100个产品)将中间结果保存到数据库或文件中。在重新启动时,脚本将从最后保存的位置继续。
哪些代理适合长时间任务
并非所有类型的代理都适合长时间会话。以下是根据稳定性和IP生命周期的比较:
| 代理类型 | IP生命周期 | 稳定性 | 适合于 |
|---|---|---|---|
| 数据中心 | 无限制(静态IP) | 高,但容易被检测 | 无授权解析,价格监控 |
| 住宅代理 | 10分钟—24小时(粘性会话) | 中等(取决于提供商) | 账户农场,有授权的解析 |
| 移动代理 | 5-30分钟(运营商定时更换) | 低(频繁更换IP) | 社交媒体短期任务,绕过严格封锁 |
| ISP代理 | 无限制(静态住宅IP) | 非常高 | 有授权的长时间任务,农场高级账户 |
选择建议:
- 对于无授权的市场解析(Wildberries、Ozon、Yandex.Market)——适合静态IP的数据中心。它们便宜、快速,如果网站没有严格封锁数据中心——可以处理12小时以上的任务。
- 对于Facebook Ads、TikTok Ads、Google Ads的账户农场——仅使用带有24小时粘性会话的住宅或ISP代理。由于频繁更换IP,移动代理不适合。
- 对于Instagram、TikTok的自动化——使用带有1-6小时粘性会话的住宅代理。如果任务较短(在1小时内发布到10个账户)——移动代理也可以使用。
- 对于24/7监控(跟踪竞争对手价格,解析新闻)——使用ISP代理或数据中心,如果网站没有封锁它们。
重要:移动代理不适合长时间任务!IP每5-30分钟根据移动运营商的定时更换,您无法控制。仅将其用于短期任务(注册账户、一次性发布、绕过验证码)。
粘性会话:如何在24小时内固定IP
粘性会话是代理的工作模式,在此模式下,您在指定时间内获得相同的IP地址:10分钟、1小时、6小时或24小时。这对于需要授权的任务至关重要。
粘性会话如何工作
通常,粘性会话通过代理URL中的会话ID实现。代替标准格式:
http://username:password@proxy.example.com:8000
您添加会话参数:
http://username-session-mysession123:password@proxy.example.com:8000
现在,所有带有标识符mysession123的请求将通过同一个IP进行,直到会话的生命周期结束(通常默认10-30分钟)。如果需要更长的会话——提供商可以提供时间参数:
http://username-session-mysession123-lifetime-1440:password@proxy.example.com:8000
其中lifetime-1440表示1440分钟(24小时)。
在流行服务中设置粘性会话
在住宅代理中:大多数提供商通过用户名中的参数支持粘性会话。请在您提供商的文档中确认格式。典型选项:
username-session-ABC123——在默认时间内固定IP(10-30分钟)username-session-ABC123-sessionduration-60——固定60分钟username-country-us-session-ABC123——来自美国的IP固定
在ISP代理中:通常默认情况下IP是静态的,不需要粘性会话——只要您不手动更换代理,您将始终获得相同的地址。
在数据中心:IP是静态的,不需要额外的设置。
在反检测浏览器中的使用示例
假设您在Dolphin Anty中农场Facebook Ads账户。任务——8小时预热(浏览网站、观看视频、点赞)。设置:
- 在Dolphin Anty中打开浏览器配置文件
- 转到“代理”部分
- 选择类型:HTTP或SOCKS5
- 输入代理的主机和端口
- 在“登录”字段中输入:
username-session-farm001-sessionduration-480(480分钟=8小时) - 输入密码
- 点击“检查代理”——确保IP被识别
- 保存配置文件
现在,在8小时内,来自该配置文件的所有请求将通过同一个IP进行。即使您关闭浏览器并在一个小时后重新打开——使用相同的会话ID(farm001),您将获得相同的IP。
建议:使用与任务相关的易懂的会话ID。例如,farm-fb-account-001,parse-wb-electronics。这将简化调试,如果您有数十个并行任务。
为长时间会话配置反检测浏览器
反检测浏览器(Dolphin Anty、AdsPower、Multilogin、GoLogin、Octo Browser)专为长时间会话与指纹保存而设计。但有一些设置细节,对于8小时以上的任务至关重要。
1. 保存浏览器配置文件
浏览器配置文件是cookies、localStorage、指纹(User-Agent、canvas、WebGL、字体)的集合。所有反检测浏览器在关闭时会自动保存配置文件。关键是不要在每次启动任务时创建新的配置文件!
正确的方法:
- 为特定任务创建一次配置文件(例如,“农场FB账户#1”)
- 配置带有粘性会话的代理
- 执行第一次启动,登录账户
- 关闭浏览器——配置文件将被保存
- 在下次启动时打开同一个配置文件——授权和指纹将被保留
错误的方法:
- 每天为同一任务创建新的配置文件
- 在启动之间手动删除cookies
- 在任务中间更改指纹(User-Agent、屏幕分辨率)
2. 为稳定性配置指纹
对于长时间任务,选择与代理相符的真实指纹。如果代理来自俄罗斯(莫斯科)——不要设置来自MacBook Pro的User-Agent,且语言为英语。更好的选择:
- 操作系统:Windows 10或11(在俄罗斯最流行)
- 浏览器:最新版本的Chrome(在反检测中自动更新)
- 屏幕分辨率:1920x1080(最常见)
- 语言:ru-RU,时区:Europe/Moscow
- WebRTC:禁用或替换为代理的IP(以防泄露真实IP)
在Dolphin Anty和AdsPower中有“创建随机指纹”的功能——它会生成可信的参数组合。对于长时间任务,这比手动设置更安全。
3. 禁用自动更新和重启
如果任务运行12小时,请确保:
- 计算机不会进入睡眠模式(在Windows/macOS的电源设置中禁用)
- 防病毒软件不会因更新而重启系统(推迟更新)
- 反检测浏览器不会在任务中间自动更新(在设置中禁用自动更新或设置为夜间时间)
4. 使用反检测浏览器的API进行自动化
Dolphin Anty、AdsPower、Multilogin提供API以便从脚本中管理配置文件。这使得:
- 从Python/Node.js脚本启动浏览器配置文件
- 通过Selenium或Puppeteer连接到它
- 执行长时间任务
- 在完成后自动关闭配置文件
通过API启动Dolphin Anty配置文件的示例(Python):
import requests
from selenium import webdriver
# 通过Dolphin Anty API启动配置文件
profile_id = "123456"
response = requests.get(f"http://localhost:3001/v1.0/browser_profiles/{profile_id}/start")
data = response.json()
# 使用Selenium连接到已启动的浏览器
options = webdriver.ChromeOptions()
options.debugger_address = data['automation']['port']
driver = webdriver.Chrome(options=options)
# 执行任务
driver.get("https://example.com")
# ... 您的解析或自动化代码 ...
# 关闭配置文件
requests.get(f"http://localhost:3001/v1.0/browser_profiles/{profile_id}/stop")
这种方法确保即使脚本崩溃,指纹和cookies也会被保存——在重新启动时,您将连接到同一个配置文件。
自动化和状态保存
对于8小时以上的任务,保存进度至关重要,以便在故障时不必从头开始。我们将探讨不同工具的方法。
1. 在数据库中保存进度
如果您正在解析Wildberries上的10000个产品,请在每50-100个产品后将结果保存到SQLite、PostgreSQL或MongoDB中。表结构:
CREATE TABLE parsing_progress (
id INTEGER PRIMARY KEY,
url TEXT,
status TEXT, -- 'pending', 'completed', 'error'
data TEXT, -- JSON结果
created_at TIMESTAMP
);
在启动时,脚本检查哪些URL尚未处理(status = 'pending')并从这些URL继续。如果脚本崩溃——在重新启动时,它将跳过已处理的产品。
2. 使用任务队列
对于复杂任务(例如,平行农场50个Facebook Ads账户),使用队列系统:Celery(Python)、Bull(Node.js)、RabbitMQ。原理:
- 创建任务列表(50个账户)
- 每个任务都是独立的(自己的浏览器配置文件,自己的代理)
- 工作者从队列中获取任务并执行
- 如果工作者崩溃——任务返回到队列中,并由其他工作者获取
这确保即使部分进程崩溃,也不会丢失任何任务。
3. 日志记录和监控
对于12小时以上的任务,设置详细的日志记录:
- 记录每个操作(打开页面、点击按钮、获取数据)
- 在错误时保存屏幕截图(在Selenium中:
driver.save_screenshot('error.png')) - 使用日志级别:INFO用于普通操作,WARNING用于可疑情况(验证码、加载缓慢),ERROR用于故障
在Python中设置日志记录的示例:
import logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('parsing.log'),
logging.StreamHandler()
]
)
logger = logging.getLogger(__name__)
# 在代码中
logger.info(f"处理了产品 {product_id}")
logger.warning(f"页面加载缓慢: {url}")
logger.error(f"解析错误: {error}")
监控和恢复断开后的连接
即使正确配置了代理和浏览器,会话也可能会断开:网络故障,代理重启,网站出现验证码。快速发现问题并恢复工作非常重要。
1. 检查代理的可用性
在任务开始之前和定期(每30-60分钟)检查代理是否正常工作:
import requests
def check_proxy(proxy_url):
try:
response = requests.get(
'https://api.ipify.org?format=json',
proxies={'http': proxy_url, 'https': proxy_url},
timeout=10
)
if response.status_code == 200:
ip = response.json()['ip']
logger.info(f"代理正常,IP: {ip}")
return True
except Exception as e:
logger.error(f"代理无响应: {e}")
return False
# 在开始之前检查
if not check_proxy(proxy_url):
logger.error("代理不可用,停止任务")
exit(1)
2. 处理验证码和封锁
如果网站显示验证码(Google reCAPTCHA、hCaptcha、Cloudflare Turnstile)——任务将停止。解决方案选项:
- 自动解决验证码:与2Captcha、Anti-Captcha、CapMonster等服务集成。它们在10-30秒内解决验证码,脚本继续工作。
- 更换代理:如果验证码是由于可疑IP出现的——切换到池中的其他代理并继续。
- 暂停并重试:有时验证码是由于操作过快而出现的。暂停2-5分钟,然后重试请求。
3. 在故障时自动重启
将主要代码包裹在try-except中,并在出现错误时重启任务:
import time
max_retries = 3
retry_delay = 60 # 秒
for attempt in range(max_retries):
try:
# 任务的主要代码
run_parsing()
break # 如果成功——退出循环
except Exception as e:
logger.error(f"尝试 {attempt + 1} 时出错: {e}")
if attempt < max_retries - 1:
logger.info(f"将在 {retry_delay} 秒后重启...")
time.sleep(retry_delay)
else:
logger.error("超过尝试次数,停止")
raise
4. 问题通知
对于在夜间或周末运行的任务,请在出现关键错误时设置通知:
- Telegram机器人:在出错时发送消息(通过python-telegram-bot库)
- 电子邮件:通过SMTP(Python中的smtplib库)
- 短信:通过Twilio或类似服务
在Telegram中发送通知的示例:
import requests
def send_telegram_alert(message):
bot_token = "YOUR_BOT_TOKEN"
chat_id = "YOUR_CHAT_ID"
url = f"https://api.telegram.org/bot{bot_token}/sendMessage"
requests.post(url, data={'chat_id': chat_id, 'text': message})
# 在出错时
try:
run_parsing()
except Exception as e:
send_telegram_alert(f"⚠️ 解析错误: {e}")
实际使用案例
让我们分析具体任务以及每个任务的最佳会话管理设置。
场景1:Facebook Ads账户农场(8小时预热)
任务:在启动广告之前预热新的Facebook Ads账户。需要模拟普通用户的行为:访问Facebook,阅读动态,观看视频,点赞,点击广告。总共8小时的活动,带间歇。
设置:
- 代理:带有8-12小时粘性会话的住宅代理,国家——与账户中指定的相同(如果账户是美国——则使用来自美国的代理)
- 浏览器:Dolphin Anty或AdsPower,为该账户创建单独的配置文件
- 指纹:与国家相符的真实指纹(Windows 10、Chrome、分辨率1920x1080、美国的语言en-US)
- 自动化:使用Selenium的脚本,带有随机延迟(操作之间5-15分钟),模拟滚动和鼠标移动
- 保存进度:将所有操作记录到文件中,以便在故障时从最后一个位置继续
风险:在会话中间更换IP——Facebook会要求确认登录。操作过快——账户将受到怀疑。
场景2:在Wildberries上解析所有类别的产品(6小时)
任务:解析Wildberries上“电子产品”类别的所有产品(约50000个产品)。需要获取名称、价格、评级、评论数量。解析在没有授权的情况下进行。
设置:
- 代理:带有静态IP的数据中心(Wildberries通常不会严格封锁数据中心)或带有6小时以上粘性会话的住宅代理
- 浏览器:不强制要求,可以使用requests + BeautifulSoup(更快)或Selenium(如果网站使用JavaScript)
- 保存进度:使用SQLite数据库,每100个产品保存一次。在重新启动时跳过已处理的产品。
- 错误处理:如果产品未加载(404、超时)——跳过并继续,记录到日志中
风险:如果请求过于频繁,Wildberries可能会显示验证码。解决方案——在产品之间添加1-3秒的延迟或使用带有轮换的代理池。
场景3:在30个Instagram账户上进行大量发布(5小时)
任务:在30个客户的Instagram账户上发布相同的帖子。每个账户都有自己的文本和标签。需要带有延迟,以免看起来像是垃圾邮件。
设置:
- 代理:带有1-2小时粘性会话的住宅代理,每个账户使用自己的代理(以免账户通过IP关联)
- 浏览器:Dolphin Anty,创建30个配置文件(每个账户一个),每个配置文件中使用自己的代理
- 自动化:脚本依次启动配置文件,通过Instagram Web或API进行发布,关闭配置文件。账户之间的延迟为10-15分钟。
- 保存进度:将账户列表保存为CSV,标记状态(posted/pending/error)
风险:Instagram可能会因大量操作而封锁账户。解决方案——添加随机延迟,模拟人类行为(在发布前滚动动态)。
场景4:24/7监控Ozon上的竞争对手价格
任务:每小时跟踪Ozon上500个竞争对手产品的价格,将变化记录到数据库中。任务持续运行。
设置:
- 代理:带有静态IP的ISP代理(永远不变)或数据中心
- 自动化:Cron任务(Linux)或任务调度程序(Windows),每小时启动脚本
- 数据保存:PostgreSQL或MySQL,表字段:product_id、price、timestamp
- 错误处理:如果Ozon不可用(500错误)——跳过迭代,记录到日志中,1小时后重试
风险:如果请求过于频繁,Ozon可能会封锁IP。解决方案——使用带有轮换的3-5个代理池。
结论
长时间任务的会话管理是正确选择代理、配置反检测浏览器和可靠自动化与进度保存的组合。关键点:
- 对于需要授权的任务(账户农场、广告管理)使用带有6-24小时粘性会话的住宅或ISP代理
- 对于无授权解析,静态IP的数据中心是最佳选择——它们更便宜、更快
- 移动代理由于频繁更换IP不适合长时间任务
- 保存浏览器配置文件,并在任务中间不要更改指纹
- 务必记录进度,并在故障时设置自动重启
- 对于关键任务,设置问题通知(Telegram、电子邮件)
如果您计划启动8小时以上的授权任务(账户农场、社交媒体自动化、广告管理),建议尝试 带有粘性会话的住宅代理——它们在整个会话期间提供稳定的IP,并且风险最小。对于无授权的市场解析和价格监控,数据中心代理是更快、更便宜的选择,同时保持连接的稳定性。