You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:WhatsApp群组消息自动化发送报错及定时执行实现

WhatsApp自动群发消息问题修复及定时任务实现

一、解决AttributeError错误

你遇到的AttributeError: 'WebDriver' object has no attribute 'find_elements_by_id'是因为Selenium 4.x版本已废弃find_elements_by_id、find_element_by_xpath这类旧元素定位方法,需要改用基于By类的新写法,同时代码里还有几处其他问题需要修正:

修正后的完整代码

import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
import urllib

# 读取Excel数据
contatos_df = pd.read_excel("Enviar.xlsx")

# 初始化浏览器
navegador = webdriver.Chrome()
navegador.get("https://web.whatsapp.com/")

# 等待WhatsApp Web加载完成(等待侧边栏元素出现)
while len(navegador.find_elements(By.ID, "side")) < 1:
    time.sleep(1)

# 遍历群发消息
for i, mensagem in enumerate(contatos_df['Mensagem']):
    grupo = contatos_df.loc[i, "grupo"]
    # 注意:Excel里如果是群组,需要用群组的识别标识,此处根据场景调整
    texto = urllib.parse.quote(f"Oi {grupo}! {mensagem}")
    # 群发链接可根据实际需求调整参数(若需精准定位群组,建议使用群组邀请链接参数)
    link = f"https://web.whatsapp.com/send?text={texto}"
    navegador.get(link)
    
    # 等待页面加载
    while len(navegador.find_elements(By.ID, "side")) < 1:
        time.sleep(1)
    
    # 定位输入框并发送消息(改用新的定位方式)
    input_box = navegador.find_element(By.XPATH, '//*[@id="main"]/footer/div[1]/div[2]/div/div[2]')
    input_box.send_keys(Keys.ENTER)
    time.sleep(10)

关键修正点

  • 新增导入from selenium.webdriver.common.by import By模块
  • 将find_elements_by_id("side")替换为find_elements(By.ID, "side")
  • 将find_element_by_xpath(...)替换为find_element(By.XPATH, ...)
  • 修复原代码中未定义的numero变量(群组群发无需手机号参数,可通过名称或链接定位)

二、实现每周定时自动运行

方法1:Python schedule库实现代码内定时

适合简单场景,需保持脚本后台运行:

import schedule
import time

def send_whatsapp_messages():
    # 嵌入上述修正后的群发代码
    import pandas as pd
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keys
    import urllib

    contatos_df = pd.read_excel("Enviar.xlsx")
    navegador = webdriver.Chrome()
    navegador.get("https://web.whatsapp.com/")
    
    while len(navegador.find_elements(By.ID, "side")) < 1:
        time.sleep(1)
    
    for i, mensagem in enumerate(contatos_df['Mensagem']):
        grupo = contatos_df.loc[i, "grupo"]
        texto = urllib.parse.quote(f"Oi {grupo}! {mensagem}")
        link = f"https://web.whatsapp.com/send?text={texto}"
        navegador.get(link)
        
        while len(navegador.find_elements(By.ID, "side")) < 1:
            time.sleep(1)
        
        input_box = navegador.find_element(By.XPATH, '//*[@id="main"]/footer/div[1]/div[2]/div/div[2]')
        input_box.send_keys(Keys.ENTER)
        time.sleep(10)
    
    navegador.quit()

# 设置每周一早上9点运行(可修改为指定日期时间)
schedule.every().monday.at("09:00").do(send_whatsapp_messages)

# 保持脚本运行监听定时任务
while True:
    schedule.run_pending()
    time.sleep(60)

方法2:系统级定时任务(推荐)

无需保持脚本后台运行,利用系统自带工具:

  • Windows:打开「任务计划程序」,创建基本任务,设置触发时间为每周指定日期时间,操作选择启动程序,指向你的Python解释器,参数填写脚本完整路径(如python "D:\scripts\whatsapp_send.py")。
  • Linux/macOS:执行crontab -e添加定时规则,例如每周一9点运行:
    0 9 * * 1 /usr/bin/python3 /home/user/scripts/whatsapp_send.py
    
    (注:1代表周一,0-6对应周日到周六,可按需调整)

内容的提问来源于stack exchange,提问作者Adelson Siqueira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 19:46:01