Python读取CSV实现WhatsApp自动群发时字符串拼接报错排查
问题描述
尝试使用GitHub上的python-bulk-whatsapp-message-automation-excel库实现WhatsApp自动群发时,遇到字符串拼接错误。
用到的leads.csv数据:
LeadNumber,Message 91_98888888647,None 91_98888888647,Message Sent by Whatsapp Bot 1 91_98888888647,Message 2 91_98888888647,Testing 3 91_98888888647,Message 4 91_98888888647,Message Sent by Whatsapp Bot
实现代码:
import pyautogui as pg import webbrowser as web import time import pandas as pd data = pd.read_csv("leads.csv") data_dict = data.to_dict('list') leads = data_dict['LeadNumber'] messages = data_dict['Message'] combo = zip(leads,messages) first = True for lead, message in combo: time.sleep(4) web.open("https://web.whatsapp.com/send?phone="+lead+"&text="+message) if first: time.sleep(6) first=False width, height = pg.size() pg.click(width/2,height/2) time.sleep(8) pg.press('enter') time.sleep(8) pg.hotkey('ctrl', 'w')
报错信息:
C:\Users\ursab\PycharmProjects\WaBlast\venv\Scripts\python.exe C:/Users/ursab/PycharmProjects/WaBlast/main.py Traceback (most recent call last): File "C:\Users\ursab\PycharmProjects\WaBlast\main.py", line 14, in <module> web.open("https://web.whatsapp.com/send?phone="+lead+"&text="+message) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~ TypeError: can only concatenate str (not "int") to str Process finished with exit code 1
疑惑点:CSV中LeadNumber列在Excel里是字符串类型,是否需要进行类型转换?
解决建议
- 强制指定LeadNumber列的字符串类型
pandas读取CSV时会自动推断数据类型,即使Excel里显示为字符串,CSV中的91_xxxx格式可能被解析为整数(下划线被识别为千位分隔符),导致类型不匹配。读取时显式指定类型:
data = pd.read_csv("leads.csv", dtype={"LeadNumber": str})
- 处理Message列的None值
CSV中第一条消息为None,属于NoneType无法直接和字符串拼接,需转换为字符串或默认值:
# 循环内处理 for lead, message in combo: message = message if message is not None else "" # 替换为空字符串 # 或者直接转字符串:message = str(message)
也可以在读取CSV时直接填充空值:
data = pd.read_csv("leads.csv", dtype={"LeadNumber": str}).fillna({"Message": ""})
- 改用f-string拼接URL并处理URL编码
直接拼接字符串容易出现类型问题,且消息中的空格等特殊字符会导致WhatsApp链接失效,建议使用f-string结合URL编码:
import urllib.parse # 导入URL编码模块 for lead, message in combo: message = message if message is not None else "" # 对消息内容进行URL编码 encoded_message = urllib.parse.quote(message) # 用f-string拼接URL url = f"https://web.whatsapp.com/send?phone={lead}&text={encoded_message}" web.open(url)
- 完整修正后的代码
import pyautogui as pg import webbrowser as web import time import pandas as pd import urllib.parse # 读取CSV并指定类型、填充空值 data = pd.read_csv("leads.csv", dtype={"LeadNumber": str}).fillna({"Message": ""}) data_dict = data.to_dict('list') leads = data_dict['LeadNumber'] messages = data_dict['Message'] combo = zip(leads, messages) first = True for lead, message in combo: time.sleep(4) # 编码消息并生成URL encoded_message = urllib.parse.quote(message) url = f"https://web.whatsapp.com/send?phone={lead}&text={encoded_message}" web.open(url) if first: time.sleep(6) first = False width, height = pg.size() pg.click(width/2, height/2) time.sleep(8) pg.press('enter') time.sleep(8) pg.hotkey('ctrl', 'w')
内容的提问来源于stack exchange,提问作者Chris Hutagalung
相关产品推荐
相关产品推荐

