Python Selenium每次运行生成全新浏览器身份规避注册限制方案问询
修复方案
核心问题排查与调整点
- 代理未与单实例绑定,无实际轮换
你当前所有NewIdentity实例初始化时的代理参数是硬编码的固定值,requestNewProxy获取的新代理没有传递给对应实例,导致所有浏览器实例共用同一个代理。
调整逻辑:每次实例化NewIdentity前先调用requestNewProxy获取新的IP、端口、账号密码,再传入实例初始化参数。
- 代理未与单实例绑定,无实际轮换
- 未配置独立的Chrome用户数据目录
你没有给每个浏览器实例指定独立的临时数据目录,默认会复用Chrome全局默认配置,导致本地存储、IndexedDB、扩展缓存、指纹配置等数据残留,是站点判定同一设备的核心依据。
新增配置项:给每个实例生成随机临时目录,添加启动参数
import tempfile # 每个实例生成独立临时数据目录 temp_user_dir = tempfile.mkdtemp(prefix="chrome_temp_") opts.add_argument(f"--user-data-dir={temp_user_dir}") # 注册流程结束后手动删除临时目录 import shutil self.browser.quit() shutil.rmtree(temp_user_dir, ignore_errors=True)- 未配置独立的Chrome用户数据目录
- 浏览器指纹完全一致
你注释了UA随机化逻辑,且没有修改其他设备指纹参数,站点可通过UA、Canvas指纹、WebGL指纹、时区、语言、屏幕分辨率等特征判定为同一设备:
新增配置:
from fake_useragent import UserAgent import random ua = UserAgent() # 随机UA opts.add_argument(f'user-agent={ua.random}') # 随机语言 opts.add_argument(f'--lang={["zh-CN","en-US","ja-JP","ko-KR"][random.randint(0,3)]}') # 随机时区 opts.add_argument(f'--timezone-offset={random.randint(-720, 720)}') # 随机化Canvas指纹 opts.add_argument("--disable-canvas-aa") opts.add_argument("--disable-2d-canvas-clip-aa") # 禁用WebGL指纹固定参数 opts.add_argument("--disable-webgl-image-chromium")- 浏览器指纹完全一致
- 代理插件版本过旧无法生效
你当前使用的是Manifest V2版本的代理插件,Chrome 110及以上版本已默认禁用V2扩展,会导致代理配置不生效,实际请求走本地IP。需要升级为Manifest V3版本的代理插件配置。
- 代理插件版本过旧无法生效
- 存储清理不彻底
仅调用delete_all_cookies()无法清理本地存储、会话存储等数据,需在访问目标站点前执行清理逻辑:
self.browser.get("chrome://newtab/") self.browser.execute_script("window.localStorage.clear();window.sessionStorage.clear();") self.browser.delete_all_cookies()- 存储清理不彻底
优化后的运行逻辑
不要提前批量生成所有NewIdentity实例,避免代理提前失效,改为循环中逐个创建:
for count in range(len(emailids)): # 每次先获取新代理,调整requestNewProxy函数返回代理的host、port、username、password curhostname, curport, proxy_username, proxy_password = requestNewProxy() # 传入新代理创建实例 obj = NewIdentity(curhostname, curport, proxy_username, proxy_password) print(f"Run Number:{count}") obj.browsers() # 执行注册逻辑 # ... # 注册完成后彻底关闭浏览器,清理临时目录 obj.browser.quit() shutil.rmtree(obj.temp_user_dir, ignore_errors=True) # 加随机间隔避免请求频率过高 time.sleep(random.randint(30, 120))
内容的提问来源于stack exchange,提问作者Jean Pierre Waked
相关产品推荐
相关产品推荐

