如何制作绕过浏览器不安全错误、通过代理登录Gmail的发邮件Bot?
解决Gmail自动化登录的不安全错误与代理配置方案
一、先搞定Selenium的浏览器指纹伪装(解决不安全错误)
Gmail会检测自动化工具特征,直接用默认Selenium参数大概率触发安全验证,你需要修改以下配置:
- 禁用自动化检测标记:添加
--disable-blink-features=AutomationControlled参数,让浏览器不暴露自己被自动化控制 - 替换真实用户代理:不要用Selenium默认UA,换成当前主流浏览器的UA(比如Chrome最新版)
- 复用已验证的用户会话:指定本地Chrome的用户数据目录,这样可以跳过重复登录验证,前提是这个目录下的账号已经通过Gmail的安全验证
- 调整浏览器启动参数:禁用沙箱、扩展,模拟正常窗口大小
示例Python代码:
from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() # 核心:禁用自动化特征检测 chrome_options.add_argument("--disable-blink-features=AutomationControlled") # 设置真实Chrome用户代理 chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36") # 禁用沙箱和扩展,避免异常标记 chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--disable-extensions") # 指定本地Chrome用户数据目录(替换成你的路径) chrome_options.add_argument(r"user-data-dir=C:\Users\YourName\AppData\Local\Google\Chrome\User Data") # 配置代理 chrome_options.add_argument("--proxy-server=http://your-proxy-ip:port") driver = webdriver.Chrome(options=chrome_options) driver.get("https://mail.google.com/")
二、代理的合规性优化
不安全错误也可能来自代理IP本身:
- 别用免费公开代理:这类IP基本都被Gmail标记为风险IP,建议用付费住宅代理(residential proxy),更接近真实用户IP
- 选高匿名代理:确保代理不会泄露真实IP或代理特征,避免被Gmail识别为异常访问
- 匹配IP区域:尽量用和Gmail账号注册地一致的代理IP,减少风控触发概率
三、替代方案:用Gmail API(完全避开浏览器检测)
如果Selenium的检测实在绕不开,官方API是更稳定的选择:
- 在Google Cloud Console创建项目,启用Gmail API,生成OAuth2客户端凭据
- 给目标Gmail账号授权,获取刷新令牌,后续可以用令牌调用API发送邮件
- 请求API时直接配置代理,不用碰浏览器
示例Python代码:
import base64 from email.mime.text import MIMEText import requests from google.oauth2.credentials import Credentials from googleapiclient.discovery import build # 加载OAuth2授权令牌(提前通过授权流程生成) creds = Credentials.from_authorized_user_file('token.json', ['https://www.googleapis.com/auth/gmail.send']) # 配置代理 proxies = { 'http': 'http://your-proxy-ip:port', 'https': 'http://your-proxy-ip:port' } # 构建带代理的Gmail服务 service = build( 'gmail', 'v1', credentials=creds, requestBuilder=lambda **kwargs: requests.Session().request(proxies=proxies, **kwargs) ) # 构造邮件内容 message = MIMEText('这是测试邮件内容') message['to'] = 'recipient@example.com' message['subject'] = '测试邮件' raw_message = base64.urlsafe_b64encode(message.as_bytes()).decode() # 发送邮件 send_result = service.users().messages().send(userId='me', body={'raw': raw_message}).execute() print(f"邮件发送成功,ID: {send_result['id']}")
四、关键注意事项
- 控制操作频率:Gmail有严格的频率限制,短时间内大量登录/发邮件会直接触发风控
- 两步验证处理:如果用Selenium,建议给Gmail账号设置App密码,避免每次登录都要输验证码;用API的话,OAuth2授权更安全
- 模拟真实操作节奏:不要快速点击、极速输入,用
time.sleep()添加合理延迟,比如输入密码时每间隔0.5秒输一个字符
内容的提问来源于stack exchange,提问作者Muneeb Haroon
相关产品推荐
相关产品推荐

