1. 项目背景与核心需求
最近在开发一个基于Chrome 140浏览器的Telegram账号自动化工具时,遇到了不少实际挑战。这个项目的核心目标是通过浏览器自动化技术实现Telegram账号的批量管理、消息自动收发等常见操作。选择Chrome 140版本作为基础环境,主要是考虑到其稳定的DevTools Protocol支持和较新的WebDriver兼容性。
Telegram作为一款全球流行的即时通讯工具,其客户端提供了丰富的API接口,但官方对自动化操作有一定限制。通过浏览器自动化方式可以绕过部分限制,实现更灵活的账号管理功能。这个系列教程的第三部分将重点讲解脚本的运行机制和实际部署方案。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与工具链配置
2.1 Chrome浏览器环境搭建
首先需要确保安装的是Chrome 140版本。可以通过以下命令检查当前Chrome版本:
bash复制google-chrome --version
如果版本不符,建议从官方渠道下载指定版本。对于Windows系统,可以使用Chrome Enterprise Bundle进行版本控制;Linux系统则可以通过apt或yum指定安装版本。
注意:Chrome 140对某些扩展的支持可能存在问题,建议在测试环境中先验证所有依赖功能。
2.2 WebDriver配置
ChromeDriver是与浏览器自动化交互的关键组件。需要下载与Chrome 140匹配的Driver版本:
bash复制# 下载对应版本的ChromeDriver
wget https://chromedriver.storage.googleapis.com/140.0.0/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
chmod +x chromedriver
sudo mv chromedriver /usr/local/bin/
验证安装是否成功:
bash复制chromedriver --version
2.3 Python环境准备
推荐使用Python 3.8+环境,并安装以下必要库:
bash复制pip install selenium webdriver-manager python-telegram-bot
对于需要处理验证码的场景,可以额外安装:
bash复制pip install pillow pytesseract
3. 核心脚本设计与实现
3.1 基础自动化框架
使用Selenium作为核心自动化工具,基础脚本结构如下:
python复制from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def init_driver():
chrome_options = Options()
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--window-size=1920,1080")
# 无头模式配置(根据需求开启)
# chrome_options.add_argument("--headless=new")
driver = webdriver.Chrome(options=chrome_options)
return driver
def login_telegram(driver, phone_number):
driver.get("https://web.telegram.org/")
wait = WebDriverWait(driver, 30)
# 等待登录界面加载
phone_input = wait.until(
EC.presence_of_element_located((By.CSS_SELECTOR, "input[type='tel']"))
)
phone_input.send_keys(phone_number)
# 后续登录步骤...
3.2 多账号管理机制
实现多账号切换的核心是管理不同的浏览器profile:
python复制from selenium.webdriver.chrome.options import Options
def create_profile_dir(profile_name):
import os
profile_path = f"/tmp/chrome_profiles/{profile_name}"
os.makedirs(profile_path, exist_ok=True)
return profile_path
def get_driver_with_profile(profile_name):
chrome_options = Options()
profile_path = create_profile_dir(profile_name)
chrome_options.add_argument(f"--user-data-dir={profile_path}")
return webdriver.Chrome(options=chrome_options)
3.3 消息收发自动化
实现消息自动收发需要考虑元素定位策略和网络延迟:
python复制def send_message(driver, contact_name, message):
wait = WebDriverWait(driver, 20)
# 搜索联系人
search_box = wait.until(
EC.presence_of_element_located((By.CSS_SELECTOR, "input[placeholder='Search']"))
)
search_box.clear()
search_box.send_keys(contact_name)
# 选择联系人
contact = wait.until(
EC.presence_of_element_located((By.XPATH, f"//div[contains(text(),'{contact_name}')]"))
)
contact.click()
# 输入消息
message_box = wait.until(
EC.presence_of_element_located((By.CSS_SELECTOR, "div.input-message-input"))
)
message_box.send_keys(message)
# 发送按钮
send_button = driver.find_element(By.CSS_SELECTOR, "button.btn-send")
send_button.click()
4. 高级功能实现
4.1 验证码处理方案
Telegram可能会触发验证码机制,需要准备自动化处理方案:
python复制from PIL import Image
import pytesseract
def handle_captcha(driver):
# 截取验证码图片
captcha_element = driver.find_element(By.CSS_SELECTOR, "img.captcha-image")
captcha_element.screenshot("captcha.png")
# 使用OCR识别
image = Image.open("captcha.png")
captcha_text = pytesseract.image_to_string(image)
# 输入验证码
captcha_input = driver.find_element(By.CSS_SELECTOR, "input.captcha-input")
captcha_input.send_keys(captcha_text)
# 提交验证
submit_button = driver.find_element(By.CSS_SELECTOR, "button.captcha-submit")
submit_button.click()
return captcha_text
4.2 代理配置与管理
为避免账号被封禁,建议使用代理IP:
python复制chrome_options = Options()
chrome_options.add_argument("--proxy-server=http://proxy_ip:proxy_port")
# 如果需要认证
chrome_options.add_extension('proxy_auth_plugin.zip')
4.3 异常处理与重试机制
健壮的自动化脚本需要完善的异常处理:
python复制from selenium.common.exceptions import TimeoutException, NoSuchElementException
import time
def safe_click(driver, selector, max_retries=3):
for attempt in range(max_retries):
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CSS_SELECTOR, selector))
)
element.click()
return True
except (TimeoutException, NoSuchElementException) as e:
if attempt == max_retries - 1:
raise
time.sleep(2)
return False
5. 实战部署方案
5.1 多进程执行框架
使用Python的multiprocessing实现并行执行:
python复制from multiprocessing import Pool
def worker(account_info):
try:
driver = init_driver()
# 执行账号操作流程...
finally:
driver.quit()
if __name__ == '__main__':
accounts = [...] # 账号列表
with Pool(processes=4) as pool: # 根据CPU核心数调整
pool.map(worker, accounts)
5.2 日志记录与监控
完善的日志系统对自动化运维至关重要:
python复制import logging
from logging.handlers import RotatingFileHandler
def setup_logger(name):
logger = logging.getLogger(name)
logger.setLevel(logging.INFO)
handler = RotatingFileHandler(
f'{name}.log', maxBytes=5*1024*1024, backupCount=3
)
formatter = logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
handler.setFormatter(formatter)
logger.addHandler(handler)
return logger
5.3 Docker容器化部署
使用Docker可以简化环境依赖问题:
dockerfile复制FROM python:3.9-slim
RUN apt-get update && apt-get install -y \
wget \
unzip \
google-chrome-stable \
tesseract-ocr \
&& rm -rf /var/lib/apt/lists/*
RUN wget https://chromedriver.storage.googleapis.com/140.0.0/chromedriver_linux64.zip \
&& unzip chromedriver_linux64.zip \
&& mv chromedriver /usr/local/bin/ \
&& chmod +x /usr/local/bin/chromedriver
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "main.py"]
6. 常见问题与解决方案
6.1 元素定位失败处理
Telegram Web界面经常更新,元素定位策略需要足够健壮:
- 优先使用相对稳定的CSS属性定位,避免使用绝对XPath
- 实现多定位策略回退机制
- 定期更新元素选择器
python复制def robust_find(driver, selectors):
for selector in selectors:
try:
return driver.find_element(By.CSS_SELECTOR, selector)
except NoSuchElementException:
continue
raise NoSuchElementException(f"All selectors failed: {selectors}")
6.2 账号安全与风控规避
为避免触发Telegram的风控机制:
- 控制操作频率,添加随机延迟
- 模拟人类操作模式(随机滚动、鼠标移动)
- 使用高质量代理IP
- 避免新账号立即进行大量操作
python复制import random
import time
from selenium.webdriver.common.action_chains import ActionChains
def human_like_delay():
time.sleep(random.uniform(0.5, 2.5))
def human_like_scroll(driver):
actions = ActionChains(driver)
for _ in range(random.randint(1, 3)):
actions.scroll_by_amount(
random.randint(100, 300),
random.randint(100, 300)
).perform()
human_like_delay()
6.3 性能优化技巧
大规模运行时需要考虑的性能优化点:
- 复用浏览器实例减少启动开销
- 实现智能等待替代固定sleep
- 优化选择器性能
- 合理控制并行度
python复制# 使用显式等待替代固定延迟
def wait_for_element(driver, selector, timeout=30):
return WebDriverWait(driver, timeout).until(
EC.presence_of_element_located((By.CSS_SELECTOR, selector))
)
# 轻量级元素存在检查
def is_element_present(driver, selector):
try:
driver.find_element(By.CSS_SELECTOR, selector)
return True
except NoSuchElementException:
return False
7. 进阶开发方向
7.1 与官方API结合使用
混合使用浏览器自动化和官方API可以提高可靠性:
python复制from telegram import Bot
def send_message_via_api(token, chat_id, message):
bot = Bot(token=token)
bot.send_message(chat_id=chat_id, text=message)
def get_updates_via_api(token):
bot = Bot(token=token)
return bot.get_updates()
7.2 浏览器指纹管理
高级反检测技术可以降低被识别为自动化的风险:
python复制chrome_options.add_argument("--disable-blink-features=AutomationControlled")
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option("useAutomationExtension", False)
# 修改WebDriver属性
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})
7.3 自动化测试集成
将自动化脚本集成到CI/CD流程中:
yaml复制# .github/workflows/test.yml
name: Telegram Automation Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
services:
chrome:
image: selenium/standalone-chrome:140
ports:
- 4444:4444
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run tests
run: |
python -m pytest tests/
env:
TELEGRAM_TEST_PHONE: ${{ secrets.TELEGRAM_TEST_PHONE }}
8. 安全与合规注意事项
- 严格遵守Telegram的服务条款,避免滥用自动化功能
- 不要用于发送垃圾信息或进行其他违规操作
- 妥善保管账号信息,避免泄露
- 控制自动化操作频率,避免对服务端造成过大压力
- 建议仅用于个人账号管理或获得官方许可的业务场景
在实际项目中,我通常会设置严格的速率限制和监控机制,确保自动化操作不会对Telegram服务造成影响。同时建议定期检查脚本是否符合平台最新的政策要求。
