javascript - 异步函数中 window.open() 的多次迭代
问题描述
因此,我正在开发一个简单的机器人来向多个 Whatsapp 联系人发送消息。我在 Whatsapp 网页中注入了下面的代码,它完美地适用于一条消息。然后,当我使用 sendMessageToPhoneList 将其发送到电话号码数组时,它适用于第一个消息/迭代,但下一个给我这个错误:未捕获(承诺)类型错误:无法读取 null 的属性“文档”。
function sendMessage(phone, encodedMessage) {
return new Promise(resolve => {
var wppURL, wppPage;
wppURL = "https://web.whatsapp.com/send?phone="+phone+"&text="+encodedMessage;
wppPage = window.open(wppURL);
var send = function() {
var sendButton = wppPage.document.getElementsByClassName("_3M-N-")[0];
if (sendButton) {
sendButton.click();
setTimeout(function() {
wppPage.close();
resolve(true);
}, 10000);
} else {
setTimeout(send, 1000);
}
};
send();
});
}
async function sendMessageToPhoneList(phoneList, encodedMessage) {
for (i=0; i < phoneList.length; i++) {
await sendMessage(phoneList[i], encodedMessage);
}
}
代码有问题吗?有人可以给我一些见解吗?谢谢!
解决方案
问题是 chrome 会再次打开相同的选项卡,所以即使您打开窗口多个具有相同名称的窗口并且 chome 不允许它更改您的代码,以便您有不同的窗口名称,它应该修复它。
例如:
wppURL = "https://web.whatsapp.com/send?phone="+phone+"&text="+encodedMessage;
wppPage = window.open(wppURL, wppURL); // second parameter is for window name
推荐阅读
- c# - 绘制模型时,nearClipPlane 和 farClipPlane 的作用是什么?
- r - bsts 后验分布
- ms-access - 计算不同记录的字段持续时间
- android - 我们如何能够创建抽象的 CountDownTimer 类的对象
- c++ - 如何使用动态内存分配在现有数组中创建和添加新对象
- php - 搜索并用多个随机值替换某个值
- java - 如何将 Internet mime 消息的所有内容复制到 Notes 中的正文项?
- php - 如何在 url 而不是 mysite/product/id => mysite/product/title 中输出 yii2?
- database - BCNF:寻找实际使用超级键而不是候选键的示例
- php - 内存中用于测试的 Symfony4 SQLite 无法正常工作