下载地址:www.pan38.com/dow/share.p… 提取密码:2383
这个工具实现了淘宝/阿里巴巴商家私信群发功能,包含登录、消息发送、批量处理等核心功能。代码使用了Selenium进行网页自动化操作,通过模拟真实用户行为来发送消息。工具还提供了Excel数据导入和消息模板生成功能,方便批量操作。使用时请确保安装Chrome浏览器和对应版本的ChromeDriver。
import time import random import pandas as pd from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import NoSuchElementException, TimeoutException
class TaobaoMassMessenger: def init(self, username, password, headless=False): self.username = username self.password = password self.driver = None self.setup_driver(headless)
def setup_driver(self, headless):
chrome_options = Options()
if headless:
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
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('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36')
self.driver = webdriver.Chrome(options=chrome_options)
self.wait = WebDriverWait(self.driver, 20)
def login(self):
self.driver.get('https://login.taobao.com/')
# 切换到密码登录
try:
self.wait.until(EC.presence_of_element_located((By.ID, 'fm-login-id'))).send_keys(self.username)
self.wait.until(EC.presence_of_element_located((By.ID, 'fm-login-password'))).send_keys(self.password)
self.wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.fm-button.fm-submit.password-login'))).click()
# 等待登录成功
self.wait.until(EC.url_contains('taobao.com'))
print("登录成功")
return True
except Exception as e:
print(f"登录失败: {str(e)}")
return False
def send_message(self, receiver_id, message, retry=3):
for attempt in range(retry):
try:
# 打开聊天窗口
chat_url = f'https://amos.alicdn.com/msg.aw?v=2&uid={receiver_id}&site=cntaobao&s=1&charset=utf-8'
self.driver.get(chat_url)
# 等待聊天窗口加载
self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.send-message-textarea')))
# 输入消息
textarea = self.driver.find_element(By.CSS_SELECTOR, '.send-message-textarea')
textarea.clear()
textarea.send_keys(message)
# 发送消息
send_btn = self.driver.find_element(By.CSS_SELECTOR, '.send-message-btn')
send_btn.click()
# 验证是否发送成功
time.sleep(2)
if "消息发送成功" in self.driver.page_source:
print(f"消息发送成功给 {receiver_id}")
return True
except Exception as e:
print(f"尝试 {attempt+1} 发送给 {receiver_id} 失败: {str(e)}")
time.sleep(random.uniform(2, 5))
print(f"发送给 {receiver_id} 失败,已达最大重试次数")
return False
def batch_send_messages(self, receiver_list, message, delay_range=(5, 15)):
success_count = 0
for idx, receiver in enumerate(receiver_list):
print(f"正在处理第 {idx+1}/{len(receiver_list)} 个接收者: {receiver}")
if self.send_message(receiver, message):
success_count += 1
# 随机延迟,避免触发反爬
delay = random.uniform(*delay_range)
print(f"等待 {delay:.1f} 秒后继续...")
time.sleep(delay)
print(f"批量发送完成,成功 {success_count}/{len(receiver_list)}")
return success_count
def close(self):
if self.driver:
self.driver.quit()
@staticmethod
def read_receivers_from_excel(file_path, sheet_name=0, column_name='ID'):
try:
df = pd.read_excel(file_path, sheet_name=sheet_name)
return df[column_name].tolist()
except Exception as e:
print(f"读取Excel文件失败: {str(e)}")
return []
@staticmethod
def generate_message_template(product_name, discount, deadline):
return f"""尊敬的客户:
感谢您关注我们的店铺!我们很高兴为您推荐新品【{product_name}】,现在购买可享受{discount}折优惠! 活动截止日期:{deadline},机会难得,赶快下单吧!
有任何问题欢迎随时咨询! 祝您购物愉快!
{random.choice(['【店铺客服】', '【金牌客服】', '【专属客服】'])}"""
if name == 'main': # 使用示例 username = 'your_taobao_username' password = 'your_password'
messenger = TaobaoMassMessenger(username, password)
if messenger.login():
# 从Excel读取接收者列表
receivers = TaobaoMassMessenger.read_receivers_from_excel('customers.xlsx')
# 生成消息内容
message = TaobaoMassMessenger.generate_message_template(
product_name="夏季新款T恤",
discount=8,
deadline="2025-08-31"
)
# 批量发送
messenger.batch_send_messages(receivers[:10], message) # 测试前10个
messenger.close()