转发阿里国际站的询盘和TM信息到微信
阿里国际站地址
阿里国际站地址:阿里国际站
项目意义
用python脚本监控阿里国际站的未读询盘和TM信息,并转发到微信,可以提醒业务员回复。在晚上睡觉期间实现自动回复,可以提高回复及时率。做好客服,提升店铺竞争力。
实现思路
我们可以把实现思路分为以下几步:
第一步:实现用python脚本调用微信发信息。
第二步:首先在浏览器访问相应的网页,写几个js脚本,实现登录阿里国际站,获取未读询盘和回复新询盘,获取和回复未读TM信息。
第三步:把各个js脚本都单独另存为一个文本,用python脚本打开浏览器,访问网页以及运行相应的js脚本。
第四步:将独立的功能整合起来,实现完整的功能。
运行环境
一开始试了itchat,发现我的微信号被限制登录网页版微信,实现不了。后来找到了python调用微信电脑版发信息的WechatPCAPI项目,就直接拿下来用了。
运行环境要求为:python 3.7.4、微信电脑版 2.7.1.82。
python 3.7.4下载地址:python 3.7.4。
微信电脑版 2.7.1.82下载地址:微信电脑版 2.7.1.82,提取码: nidd。
WechatPCAPI使用方法参考这里:WechatPCAPI。
js脚本操作网页部分
我把登录阿里国际站的js脚本拆成了上下两部分,上面是实现登录功能函数代码,下面是一句带参数传递的调用函数代码,因为有账号、密码变量,所以在python脚本里写调用函数代码。执行该js脚本的时候再把上下两部分合并回来。
login.txt
/*
登录阿里后台
https://passport.alibaba.com/icbu_login.htm
*/
function login(id, password) {
var login_id = document.getElementById("fm-login-id"); //账号输入框
var login_password = document.getElementById("fm-login-password"); //密码输入框
login_id.value = id; //输入账号
login_password.value = password; //输入密码
var login_submit = document.getElementById("fm-login-submit"); //登录按钮
login_submit.click(); //点击登录
return "登录成功"
}
获取未读询盘数据列表:
inquiry_list.txt
/*
获取未读询盘数据列表
https://message.alibaba.com/message/default.htm?spm=a2700.7756200.0.0.5d3c71d2vw5Viy#feedback/all
*/
function inquiry_list() {
inquiry_area = ''; //询盘数据区域
var div = document.getElementsByTagName("div");
for (var i = 0; i < div.length; i++) {
if (div[i].className == "aui-grid-container") {
inquiry_area = div[i];
break;
}
}
var inquiry_div = inquiry_area.getElementsByTagName("div");
unread_inquiry = []; // 未读询盘信息
for (var i = 0; i < inquiry_div.length; i++) {
if (inquiry_div[i].className == "aui2-grid-wraper actions-view-") {
inquiry_json = {}; // 单条询盘信息
var inquiry_url = inquiry_div[i].getElementsByTagName("a")[0];
//console.log(inquiry_url.href);
if (inquiry_url != undefined) {
inquiry_json["url"] = inquiry_url.href; //询盘链接
}
var inquiry_div2 = inquiry_div[i].getElementsByTagName("div");
for (var j = 0; j < inquiry_div2.length; j++) {
if (inquiry_div2[j].className == "util-left m-header-padding spec-inquiry-id util-ellipsis") {
//console.log(inquiry_div2[j].innerText);
inquiry_json["id"] = inquiry_div2[j].innerText; // 询价单号
}
if (inquiry_div2[j].className == "util-left m-header-padding") {
//console.log(inquiry_div2[j].innerText);
inquiry_json["time"] = inquiry_div2[j].innerText // 时间
}
if (inquiry_div2[j].className == "aui2-grid-name u-text-center") {
//console.log(inquiry_div2[j].innerText);
inquiry_json["sender"] = inquiry_div2[j].innerText; // 发起人
}
if (inquiry_div2[j].className == "aui-grid-inner-text aui-grid-owner-name") {
//console.log(inquiry_div2[j].innerText);
inquiry_json["owner"] = inquiry_div2[j].innerText; // 负责人
}
}
var inquiry_tr = inquiry_div[i].getElementsByTagName("tr");
for (var j = 0; j < inquiry_tr.length; j++) {
if (inquiry_tr[j].className.trim() == "has-unread") {
//console.log("unread");
inquiry_json["read"] = "unread"; // 未读
}
}
var inquiry_td = inquiry_div[i].getElementsByTagName("td");
for (var j = 0; j < inquiry_td.length; j++) {
if (inquiry_td[j].className.trim() == "aui2-grid-quo-status-col") {
//console.log(inquiry_td[j].innerText);
inquiry_json["status"] = inquiry_td[j].innerText.trim().replace(/\s+/g, " "); // 状态
}
if (inquiry_td[j].className.trim() == "buyer-list-actions") {
//console.log(inquiry_td[j].innerText);
inquiry_json["operation"] = inquiry_td[j].innerText; // 操作
}
}
var inquiry_p = inquiry_div[i].getElementsByTagName("p");
for (var j = 0; j < inquiry_p.length; j++) {
if (inquiry_p[j].className == "buyer-chat-msg") {
//console.log(inquiry_p[j].innerText);
inquiry_json["chat"] = inquiry_p[j].innerText;
}
}
//console.log(inquiry_json);
if (inquiry_json["read"] != undefined) {
unread_inquiry.push(inquiry_json);
}
}
}
//console.log(unread_inquiry);
return unread_inquiry;
}
return inquiry_list();
回复新询盘:
inq_rep_send.txt
function inquiry_reply_send(mail, whatsapp, skype) { //回复新询盘
var input_holder = document.getElementsByClassName("holder")[0]; //输入开关
//console.log(input_holder.innerText);
input_holder.click();
setTimeout(function() {
var send_confirm = document.getElementById("dialog-footer-2"); //代人回复按钮区域
//console.log(send_confirm.innerHTML);
if (send_confirm != undefined) {
var send_confirm_button = send_confirm.getElementsByClassName("next-btn next-btn-primary next-btn-medium")[0]; //代人回复按钮
//console.log(send_confirm_button.innerText);
send_confirm_button.click();
}
var input_area = document.getElementById("normal-im-send_ifr").contentWindow.document; //输入内容区域
var input = input_area.getElementsByTagName("p")[0]; //输入内容标签
// 自动回复内容
var input_text = "Dear Customer,\n\n" +
"Good day!\n" +
"We're looking forward to your arrival.\n\n" +
"Please feel free to leave a message to tell us more about your requests or contact information.\n" +
"We'll reply you as soon as possible.\n\n" +
"By the way, you can contact me through these ways:\n" +
"Mail: " + mail + "\n";
if(whatsapp != ""){
input_text += "WhatsApp: " + whatsapp + "\n";
}
if(skype != ""){
input_text += "Skype: " + skype + "\n";
}
input_text += "\nThanks & Best regards";
input.innerText = input_text;
setTimeout(function() {
var bold_icon = document.getElementsByClassName("mce-ico mce-i-bold")[0]; //点击加粗字体图表激活发送内容
bold_icon.click();
var send_button = document.getElementsByClassName("send")[0]; //发送按钮
//console.log(send_button.innerText);
send_button.click();
}, 2000)
}, 2000)
}
获取TM信息数据列表:
tm_list.txt
/*
获取TM信息数据列表
https://www.alibaba.com/
*/
function tm_list() {
var tm_iframe = document.getElementById("#weblite-iframe").contentWindow.document; //加载TM信息
//console.log(tm_iframe);
var tm_area = tm_iframe.getElementById("icbu-weblite-list"); //TM信息区域
var unread_count = 0; //未读TM信息条数
if (tm_area.getElementsByClassName("unread-count")[0] != undefined) {
var unread_count = tm_area.getElementsByClassName("unread-count")[0].innerText;
}
//console.log(unread_count);
var tm_list = tm_area.getElementsByClassName("recent-list")[0]; //TM最近信息列表
var per_tm_list = tm_list.getElementsByClassName("recent-list-item recent-list-item-unread"); //单个咨询人TM信息
var all_tm = []; //全部TM信息
for (var i = 0; i < per_tm_list.length; i++) {
per_tm = {}; //单条TM信息
//console.log(per_tm_list[i].outerHTML);
var conversation_id = per_tm_list[i].outerHTML.split("conversationId":"")[1].split(""")[0]; //会话id
//console.log(conversation_id);
per_tm["conversation_id"] = conversation_id;
var unread_num = per_tm_list[i].getElementsByClassName("unread-num")[0]; //未读信息数
//console.log(unread_num.innerText);
per_tm["unread_num"] = unread_num.innerText;
var sender = per_tm_list[i].getElementsByClassName("name")[0]; //咨询人
//console.log(sender.innerText);
per_tm["sender"] = sender.innerText;
var contact_time = per_tm_list[i].getElementsByClassName("contact-time")[0]; //联系时间
//console.log(contact_time.innerText);
per_tm["contact_time"] = contact_time.innerText;
var latest_msg = per_tm_list[i].getElementsByClassName("latest-msg")[0]; //最新信息
if (latest_msg) {
//console.log(latest_msg.innerText);
per_tm["latest_msg"] = latest_msg.innerText;
}
//console.log(per_tm);
all_tm.push(per_tm)
}
//console.log(all_tm);
return all_tm;
}
return tm_list();
展开TM聊天框:
tm_open.txt
function open_tm() { //展开TM聊天框
var tm_iframe = document.getElementById("#weblite-iframe").contentWindow.document; //获取TM信息区域
var open_icon = tm_iframe.getElementsByClassName("next-icon next-icon-arrow-up-filling next-icon-xl fold-up")[0]; //展开TM图标
open_icon.click();
return "展开TM聊天框成功";
}
return open_tm();
展开未读聊天对话框:
tm_open_send.txt
function open_send(tm_id) { //点击展开未读聊天
var tm_iframe = document.getElementById("#weblite-iframe").contentWindow.document; //获取TM信息区域
var recent_list = tm_iframe.getElementsByClassName("recent-list")[0]; //全部TM信息
recent_list_item = recent_list.getElementsByClassName("recent-list-item recent-list-item-unread"); //单个咨询人TM信息;
for (var i = 0; i < recent_list_item.length; i++) {
//console.log(recent_list_item[i].outerHTML);
var conversation_id = recent_list_item[i].outerHTML.split("conversationId":"")[1].split(""")[0];
//console.log(conversation_id);
if (conversation_id == tm_id) {
recent_list_item[i].click();
return "展开新TM对话框成功"
}
}
}
发送TM信息:
tm_send_reply.txt
function send_reply(mail, whatsapp, skype) { //发送TM信息
setTimeout(function() {
var tm_iframe = document.getElementById("#weblite-iframe").contentWindow.document; //获取TM信息区域
var message_box = tm_iframe.getElementsByClassName("message-box")[0]; //TM聊天框
var send_textarea = message_box.getElementsByClassName("send-textarea")[0]; //TM聊天输入框
// 自动回复内容
var send_msg = "Sorry, I'm not online now.\n" +
"I'll reply you as soon as possible. \n" +
"By the way, you can contact me through these ways:\n" +
"Mail: " + mail + "\n";
if(whatsapp != ""){
send_msg += "WhatsApp: " + whatsapp + "\n";
}
if(skype != ""){
send_msg += "Skype: " + skype + "\n";
}
send_msg += "Thank you.";
send_textarea.value = send_msg; //输入回复内容
setTimeout(function() {
var send_button = message_box.getElementsByClassName(
"next-btn next-btn-primary next-btn-medium send-tool-button")[0]; //发送按钮
send_button.click();
}, 2000)
}, 2000)
}
检查是否发送TM信息成功:
tm_check_reply.txt
function check_reply() { //检查是否已经自动回复
var send_flag = 0; //判断是否回复成功
var tm_iframe = document.getElementById("#weblite-iframe").contentWindow.document; //获取TM信息区域
var message_box = tm_iframe.getElementsByClassName("message-box")[0]; //TM聊天框
var send_text = message_box.getElementsByClassName("session-rich-content text")[0]; //最新聊天内容;
//console.log(send_text.innerText);
if (send_text.innerText.search(
"Sorry, I'm not online now.") != -1) {
send_flag = 1;
}
if (send_flag == 1) {
return "发送成功";
} else {
return "发送失败";
}
}
return check_reply();
python脚本部分
这里用到selenium的webdriver的chromedriver控制谷歌浏览器访问网址,并执行自己写的js脚本。chromedriver下载地址: chromedriver。
注意:要下载与安装的谷歌浏览器相同版本的chromedriver,否则程序运行时会出错。
ali_message.py
# -*- coding: utf-8 -*-
from WechatPCAPI import WechatPCAPI
import time
import logging
from queue import Queue
import threading
from time import sleep
from selenium import webdriver
# 加载js脚本
def load_js(ext_js):
with open(ext_js, 'r', encoding='utf-8') as ext_js_file:
js = ext_js_file.read()
print('加载' + ext_js + '成功')
return js
# js上下两部分拼接
def join_js(top_js, bottom_js):
full_js = top_js + bottom_js
# print(full_js)
return full_js
# 获取现在时间
def get_cur_time():
now = time.time()
# print(formal_time(now))
# 现在时间
cur_time = formal_time(now)[11:16]
# print(cur_time)
cur_hour = int(cur_time[:2])
cur_min = int(cur_time[3:])
# print(cur_hour)
# print(cur_min)
cur_time_min = cur_hour * 60 + cur_min
# print(cur_time_min)
# 下一次执行时间
if cur_min >= 30:
next_time_min = (cur_hour + 1) * 60
else:
next_time_min = cur_hour * 60 + 30
# print(next_time_min)
# 睡眠时间
sleep_time_min = next_time_min - cur_time_min
# print(sleep_time_min)
sleep_time = sleep_time_min * 60
# print(sleep_time)
cur_time = {'cur_hour': cur_hour, 'sleep_time': sleep_time}
return cur_time
# 时间戳转标准时间
def formal_time(timestamp):
# 转换成localtime
localtime = time.localtime(timestamp)
# 转换成新的时间格式
standard_time = time.strftime("%Y-%m-%d %H:%M:%S", localtime)
return standard_time
# 阿里账号列表
def account_list():
# 填入各个账号的店铺名、负责人、账号、密码、账号类型(main代表主账号,sub代表子账号)、联系方式(邮箱、whatsapp、skype,邮箱为必填,其他两个没有的填'')
account = [{'store': '店铺名1', 'owner': '负责人1',
'id': '账号1', 'password': '密码1',
'type': 'main',
'contact': {'mail': '邮箱1',
'whatsapp': 'whatsapp联系方式1',
'skype': 'skype联系方式1'}
},
{'store': '店铺名2', 'owner': '负责人2',
'id': '账号2', 'password': '密码2',
'type': 'sub',
'contact': {'mail': '邮箱2',
'whatsapp': 'whatsapp联系方式2',
'skype': 'skype联系方式2'}
},
{'store': '店铺名3', 'owner': '负责人3',
'id': '账号3', 'password': '密码3',
'type': 'sub',
'contact': {'mail': '邮箱3',
'whatsapp': 'whatsapp联系方式3',
'skype': 'skype联系方式3'}
},
{'store': '店铺名4', 'owner': '负责人4',
'id': '账号4', 'password': '密码4',
'type': 'main',
'contact': {'mail': '邮箱4',
'whatsapp': 'whatsapp联系方式4',
'skype': 'skype联系方式4'}
},
{'store': '店铺名5', 'owner': '负责人5',
'id': '账号5', 'password': '密码5',
'type': 'sub',
'contact': {'mail': '邮箱5',
'whatsapp': 'whatsapp联系方式5',
'skype': 'skype联系方式5'}
},
{'store': '店铺名6', 'owner': '负责人6',
'id': '账号6', 'password': '密码6',
'type': 'sub',
'contact': {'mail': '邮箱6',
'whatsapp': 'whatsapp联系方式6',
'skype': 'skype联系方式6'}
},
{'store': '店铺名7', 'owner': '负责人7',
'id': '账号7', 'password': '密码7',
'type': 'sub',
'contact': {'mail': '邮箱7',
'whatsapp': 'whatsapp联系方式7',
'skype': 'skype联系方式7'}
}
]
# print(account)
return account
# 获取单个账号的结果信息
def get_one_messages(account, browser):
# 单个账号的结果信息
result = AliMessage(account, browser).get_account_messages()
global all_send_msg
if result.strip() != '':
all_send_msg += result
# 配置浏览器
def configure_browser(index):
# 谷歌浏览器配置
chrome_options = webdriver.ChromeOptions()
# 设置浏览器用户目录
chrome_options.add_argument('--user-data-dir=C:/ChromeUser/Webdriver/User' + str(index))
browser = webdriver.Chrome(executable_path=chromedriver, options=chrome_options)
# 设置访问超时时间
browser.set_page_load_timeout(30)
return browser
# 打开浏览器
def open_browser():
# 浏览器列表
browser_list = []
for i in range(len(account_list())):
browser = configure_browser(i + 1)
browser_list.append(browser)
# print(browser_list)
return browser_list
# 多线程操作
def threading_operation(browser):
# 账号列表
account = account_list()
# 线程列表
threads = []
for i in range(len(browser)):
thread = threading.Thread(target=get_one_messages, args=(account[i], browser[i],))
threads.append(thread)
# 线程开始
for thread in threads:
thread.start()
# 线程阻塞
for thread in threads:
thread.join()
def on_message(message):
queue_received_message.put(message)
def thread_handle_message(wx_inst):
while 1:
message = queue_received_message.get()
print(str(message).encode('gbk', 'ignore').decode('gbk'))
# 发送微信信息
def send_message():
wx_inst = WechatPCAPI(on_message=on_message, log=logging)
wx_inst.start_wechat(block=True)
while not wx_inst.get_myself():
time.sleep(5)
print('微信登录成功')
print(wx_inst.get_myself())
threading.Thread(target=thread_handle_message, args=(wx_inst,)).start()
# 打开浏览器
browser_list = open_browser()
while 1:
cur_time = get_cur_time()
# 睡眠时间
sleep_time = cur_time['sleep_time']
# 清空转发信息
global all_send_msg
all_send_msg = ''
# 多线程获取各个账号的信息
threading_operation(browser_list)
# 去除末尾换行符
all_send_msg = all_send_msg.strip()
print('---全部转发信息---')
if all_send_msg == '':
print('没有未读询盘和TM信息,不转发到微信')
else:
print(all_send_msg)
print('----------------')
if all_send_msg != '':
all_send_msg = all_send_msg.encode('gbk', 'ignore').decode('gbk')
wx_inst.send_text(to_user='24572759676@chatroom', msg=all_send_msg)
# 睡眠到下一次执行
sleep(sleep_time)
class AliMessage:
def __init__(self, account, browser):
# 店铺名字
self.store = account['store']
# 店铺负责人名字
self.owner = account['owner']
# 账号
self.id = account['id']
# 密码
self.password = account['password']
# 账号类型
self.type = account['type']
# 邮箱
self.mail = account['contact']['mail']
# whatsapp
self.whatsapp = account['contact']['whatsapp']
# skype
self.skype = account['contact']['skype']
# 浏览器
self.browser = browser
# 阿里后台登录网址
self.login_url = 'https://passport.alibaba.com/icbu_login.htm'
# 未读询盘页面网址
self.inquiry_url = 'https://message.alibaba.com/message/default.htm?#feedback/all'
# 获取TM信息页面网址
self.tm_url = 'https://www.alibaba.com/'
# 登录js
self.login_js = login_js
# 未读询盘数据列表js
self.inquiry_list_js = inquiry_list_js
# TM数据列表js
self.tm_list_js = tm_list_js
# 新询盘发送内容js
self.inquiry_reply_send_js = inquiry_reply_send_js
# 检查发送新询盘是否已自动回复js
self.inquiry_reply_check_js = inquiry_reply_check_js
# 展开TM聊天框js
self.tm_open_js = tm_open_js
# 展开新TM对话框js
self.tm_open_send_js = tm_open_send_js
# 新TM发送内容js
self.tm_send_reply_js = tm_send_reply_js
# 检查TM是否自动回复成功js
self.tm_check_reply_js = tm_check_reply_js
# 登录完整js
def load_login_js(self):
bottom_js = 'return login("%s","%s");' % (self.id, self.password)
return join_js(self.login_js, bottom_js)
# 回复询盘完整js
def load_inquiry_reply_send_js(self):
bottom_js = 'return inquiry_reply_send("%s","%s","%s");' % (self.mail, self.whatsapp, self.skype)
return join_js(self.inquiry_reply_send_js, bottom_js)
# 回复TM完整js
def load_tm_send_reply_js(self):
bottom_js = 'return send_reply("%s","%s","%s");' % (self.mail, self.whatsapp, self.skype)
return join_js(self.tm_send_reply_js, bottom_js)
# 浏览器执行脚本
def browser_action(self, target_url, ext_js, run_action):
# 最大失败执行次数
num = 3
while num > 0:
try:
if target_url != '':
self.browser.get(target_url)
sleep(20)
if run_action == 'tm_list':
sleep(30)
elif run_action == "inquiry_reply_send":
self.browser.execute_script(ext_js)
return '新询盘发送内容成功'
elif run_action == "tm_send_reply":
self.browser.execute_script(ext_js)
return '新TM发送内容成功'
return self.browser.execute_script(ext_js)
except Exception as e:
print('运行出错,原因:', e)
num -= 1
if num == 0:
if run_action == 'login':
return '登录失败'
elif run_action == 'inquiry_list':
return '获取未读询盘失败'
elif run_action == 'tm_list':
return '获取TM信息失败'
elif run_action == 'check_send_before':
return '新询盘回复前检测状态失败'
elif run_action == 'inquiry_reply_send':
return '新询盘发送内容失败'
elif run_action == 'check_send_after':
return '新询盘回复后检测状态失败'
elif run_action == 'tm_open':
return '展开TM聊天框失败'
elif run_action == 'tm_open_send':
return '展开新TM对话框失败'
elif run_action == 'tm_send_reply':
return '新TM发送内容失败'
elif run_action == 'tm_check_reply':
return '新TM检测回复状态失败'
else:
return '操作失败'
sleep(10)
if run_action == 'tm_list':
self.browser.get(self.tm_url)
# 单个账号获取信息
def get_account_messages(self):
# 单个账号信息
send_msg = ''
# 登录后台
login = self.browser_action(self.login_url, self.load_login_js(), 'login').replace(u'\xa0', u' ')
# 登录结果
login_msg = '【%s】店【%s】' % (self.store, self.owner) + login
print(login_msg)
if login == '登录失败':
send_msg += '【%s】店【%s】' % (self.store, self.owner) + login + '\n'
sleep(5)
# 获取TM数据列表
tm_list = self.browser_action('', self.tm_list_js, 'tm_list')
# print(tm_list)
# TM数据列表不为空
if type(tm_list) == list:
tm_list = self.tm_text(tm_list)
# TM信息
tm_msg = ''
if tm_list == '':
print('【%s】店【%s】没有未读TM信息' % (self.store, self.owner))
else:
tm_msg += '【%s】店【%s】' % (self.store, self.owner) + tm_list
print(tm_msg)
tm_msg += '\n'
# 判断是否为主账号
if self.type == 'main':
# 获取未读询盘数据列表
inquiry_list = self.browser_action(self.inquiry_url, self.inquiry_list_js, 'inquiry_list')
# print(inquiry_list)
# 未读询盘数据列表不为空
if type(inquiry_list) == list:
inquiry_list = self.inquiry_text(inquiry_list)
if inquiry_list == '':
send_msg += tm_msg
print('【%s】店没有未读询盘' % self.store)
else:
inquiry_msg = '【%s】店' % self.store + inquiry_list
send_msg += inquiry_msg + '\n' + tm_msg
print(inquiry_msg)
else:
send_msg += tm_msg
sleep(5)
return send_msg
# 将未读TM数据转化为字符串
def tm_text(self, unread_tm):
# 判断TM聊天框是否已经打开
tm_open_flag = 0
# 最终输出的TM信息
unread_tm_str = '有' + str(len(unread_tm)) + '组未读TM信息:\n\n'
for i in range(len(unread_tm)):
# print(unread_tm[i])
unread_tm_str += '一一一第' + str(i + 1) + '组一一一\n'
unread_tm_str += '咨询人:' + unread_tm[i]["sender"] + '\n'
unread_tm_str += '联系时间:' + unread_tm[i]["contact_time"] + '\n'
unread_tm_str += '最新信息:' + unread_tm[i]["latest_msg"] + '\n'
unread_tm_str += '未读条数:' + unread_tm[i]["unread_num"] + '\n\n'
# 当前时间
cur_time = get_cur_time()
# 当前小时
cur_hour = cur_time['cur_hour']
# 执行自动回复时间
if cur_hour <= 8 or cur_hour >= 22:
if tm_open_flag == 0:
open_result = self.browser_action('', self.tm_open_js, 'tm_open')
print(open_result)
sleep(2)
tm_open_flag = 1
run_open_send = 'return open_send("' + unread_tm[i]["conversation_id"] + '");'
cur_tm_open_send_js = self.tm_open_send_js + run_open_send
open_send_result = self.browser_action('', cur_tm_open_send_js, 'tm_open_send')
print(open_send_result)
send_reply_result = self.browser_action('', self.load_tm_send_reply_js(), 'tm_send_reply')
print(send_reply_result)
sleep(7)
check_reply_result = self.browser_action('', self.tm_check_reply_js, 'tm_check_reply')
print(check_reply_result)
unread_tm_str = unread_tm_str[:-1] + '自动回复:' + check_reply_result + '\n\n'
if len(unread_tm) == 0:
return ''
else:
return unread_tm_str[:-1].replace(u'\xa0', u' ')
# 将未读询盘数据转化为字符串
def inquiry_text(self, unread_inquiry):
# 最终输出的未读询盘信息
unread_inquiry_str = '有' + str(len(unread_inquiry)) + '条未读询盘:\n\n'
for i in range(len(unread_inquiry)):
# print(unread_inquiry[i])
unread_inquiry_str += '一一一第' + str(i + 1) + '条一一一\n'
unread_inquiry_str += unread_inquiry[i]['id'] + '\n'
unread_inquiry_str += unread_inquiry[i]['time'] + '\n'
unread_inquiry_str += '发起人:' + unread_inquiry[i]['sender'] + '\n'
unread_inquiry_str += '负责人:' + unread_inquiry[i]['owner'] + '\n'
unread_inquiry_str += '状态:' + unread_inquiry[i]['status'] + '\n'
unread_inquiry_str += '内容:' + unread_inquiry[i]['chat'] + '\n\n'
# 当前时间
cur_time = get_cur_time()
# 当前小时
cur_hour = cur_time['cur_hour']
# 执行自动回复时间
if cur_hour <= 8 or cur_hour >= 22:
if unread_inquiry[i]['status'].find("新询盘") != -1:
before_check_result = self.browser_action(unread_inquiry[i]['url'],
self.inquiry_reply_check_js, 'check_send_before')
if before_check_result == '发送成功':
print(before_check_result)
unread_inquiry_str = unread_inquiry_str[:-1] + '自动回复:' + before_check_result + '\n\n'
else:
send_result = self.browser_action('', self.load_inquiry_reply_send_js(), 'inquiry_reply_send')
print(send_result)
sleep(7)
after_check_result = self.browser_action('', self.inquiry_reply_check_js, 'check_send_after')
print(after_check_result)
unread_inquiry_str = unread_inquiry_str[:-1] + '自动回复:' + after_check_result + '\n\n'
if len(unread_inquiry) == 0:
return ''
else:
return unread_inquiry_str[:-1].replace(u'\xa0', u' ')
if __name__ == '__main__':
# 引入chromedriver.exe
chromedriver = "C:/Program Files/Google/Chrome/Application/chromedriver.exe"
# 登录js
login_js = load_js('login.txt')
# 未读询盘数据列表js
inquiry_list_js = load_js('inquiry_list.txt')
# TM数据列表js
tm_list_js = load_js('tm_list.txt')
# 新询盘发送内容js
inquiry_reply_send_js = load_js('inq_rep_send.txt')
# 检查发送新询盘是否已自动回复js
inquiry_reply_check_js = load_js('inq_rep_che.txt')
# 展开TM聊天框js
tm_open_js = load_js('tm_open.txt')
# 展开新TM对话框js
tm_open_send_js = load_js('tm_open_send.txt')
# 新TM发送内容js
tm_send_reply_js = load_js('tm_send_reply.txt')
# 检查TM是否自动回复成功js
tm_check_reply_js = load_js('tm_check_reply.txt')
# 微信配置
logging.basicConfig(level=logging.INFO)
queue_received_message = Queue()
# 全部转发信息
all_send_msg = ''
# 运行程序
send_message()
下图所示脚本位置中的店铺名、负责人、账号、密码、账号类型、联系方式、转发到的群,需要在对应的位置改动填入,测试时可以先把转发到的群改为filehelper(文件助手)。
另外,不能删除项目文件夹下的OpenWechatMulti.exe、WechatPCHelper.dll、WechatPCAPI.pyd,程序调用微信需要用到。如果运行不成功,请关闭防火墙后再试。
运行截图
下载地址
百度网盘链接: 阿里国际站后台监控
提取码: dku4