求助: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.py1代表周一,0-6对应周日到周六,可按需调整)
内容的提问来源于stack exchange,提问作者Adelson Siqueira
相关产品推荐
相关产品推荐

