>我正在尝试实现一个WhatsApp机器人,它使用chromedriver
并打开whatsapp网络,并向联系人发送消息。这些是程序的步骤:
- 从 Excel 文件中读取联系人 设置要发送
- 消息以及要发送的消息的时间
- 搜索该名称并发送消息
以下是我无法解决的问题:
- 如果最近的聊天中没有该名称,则无法从WhatsApp联系人列表中搜索该名称并发送
- 我还想知道如何发送图像和视频
由于代码很长,以下是它的链接: https://github.com/harshitsidhwa/WhatsApp-bot-selenium
Python 向联系人发送消息:
def send_message(target):
global message,wait, browser
try:
x_arg = '//span[contains(@title,' + target + ')]'
group_title = wait.until(EC.presence_of_element_located((By.XPATH, x_arg)))
group_title.click()
input_box = browser.find_element_by_xpath('//*[@id="main"]/footer/div[1]/div[2]/div/div[2]')
input_box.send_keys(message + Keys.ENTER)
time.sleep(1)
except NoSuchElementException:
return
这里的变量目标是您要向其发送消息的联系人姓名。 可变消息包含要发送给该联系人的文本消息。变量浏览器是 Web 驱动程序变量。
我已经在WhatsApp自动化上工作过,如果有任何帮助,请参阅链接:https://github.com/shauryauppal/PyWhatsapp
你说了两个问题:
您无法通过联系人列表或存档的联系人列表访问联系人姓名。唯一的方法是最近的聊天联系人。对于其他联系人,您必须访问所有联系人列表,选择目标人员,然后发送消息。(即将实施(。
图像,文件和视频的发送可以通过PyAutoIt实现。 参考我的存储库,我已经实现了。
步骤1: 自动.exe安装链接
步骤2:
点安装PyAutoIt
请参阅我的代码或此链接以获取指导。
用于搜索联系人、发送消息和/或文件的基本示例 Java 代码。如果需要,您可以实现显式等待。
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
List<String> targets = new ArrayList<>();
for (String target:targets) {
driver.findElement(By.xpath("//button[.//span[@data-icon='search']]/..//input")).clear();
driver.findElement(By.xpath("//button[.//span[@data-icon='search']]/..//input")).sendKeys(target);
try {
driver.findElement(By.cssSelector("span[title='"+target+"']")).click();
} catch (WebDriverException e) {
System.out.println("Not found");
continue;
}
driver.findElement(By.cssSelector("div[contenteditable='true']")).sendKeys("MassageToSend");
driver.findElement(By.cssSelector("span[data-icon='send']")).click();
//To send attachments
//click to add
driver.findElement(By.cssSelector("span[data-icon='clip']")).click();
//add file to send by file path
driver.findElement(By.cssSelector("input[type='file']")).sendKeys("FilePath");
//click to send
driver.findElement(By.cssSelector("span[data-icon='send-light']")).click();
}
在python中(可能包含语法错误(:
if msgToSend[count][0]==curHour and msgToSend[count][1]==curMin and msgToSend[count][2]==curSec:
# utility variables to tract count of success and fails
success = 0
sNo = 1
failList = []
# Iterate over selected contacts
for target in targets:
print(sNo, ". Target is: " + target)
sNo+=1
inputSearchBox = driver.find_element_by_id('//button[.//span[@data-icon="search"]]/..//input')
inputSearchBox.clear()
inputSearchBox.send_keys(target[1:len(target) - 1])
try:
wait5.until(EC.presence_of_element_located((By.CSSSELECTOR, 'span[title="'+ target +'"]')))
except:
print("Cannot find Target: " + target)
failList.append(target)
continue
driver.find_element_by_css_selector('div[contenteditable="true"]').sendKeys("Hello, " + target + "."+ Keys.SHIFT + Keys.ENTER + msgToSend[count][3] + Keys.SPACE)
driver.find_element_by_css_selector('span[data-icon="send"]').click()
# To send attachments
# click to add
driver.find_element_by_css_selector('span[data-icon="clip"]').click()
# add file to send by file path
driver.find_element_by_css_selector('input[type="file"]').sendKeys("FilePath")
# click to send
driver.find_element_by_css_selector('span[data-icon="send-light"]').click()