web-dev-qa-db-ja.com

Whatsapp Automated BotがWhatsApp連絡先リストで検索できない

WhatsAppボットを実装しようとしています。これは、chromedriverを使用してwhatsapp Webを開き、連絡先にメッセージを送信します。これらはプログラムのステップです:

  • Excelファイルから連絡先を読み取ります
  • 送信したいメッセージとともに送信したい時間を設定します
  • その名前を検索してメッセージを送信

ここに私が解決できない問題があります:

  1. 最近のチャットで名前が見つからない場合、WhatsApp連絡先リストから名前を検索して送信することはできません
  2. また、画像や動画を送信する方法を知りたい

コードはかなり長いので、ここにリンクを示します。 https://github.com/harshitsidhwa/WhatsApp-bot-Selenium

7
skkrish

連絡先にメッセージを送信する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

ここで、変数targetは、メッセージを送信する連絡先の名前です。変数messageには、その連絡先に送信するテキストメッセージが含まれます。変数browserはWebドライバー変数です。

WhatsAppオートメーションにすでに取り組んでいます。ヘルプが必要な場合は、リンクを参照してください: https://github.com/shauryauppal/PyWhatsapp

あなたは2つの問題を述べました:

  1. 連絡先リストまたはアーカイブされた連絡先リストから連絡先名にアクセスすることはできません。唯一の方法は、最近のチャットの連絡先です。他の連絡先については、すべての連絡先リストにアクセスして対象の人物を選択し、メッセージを送信する必要があります。 (まもなく実装されます)。

  2. 画像、ファイル、動画の送信はPyAutoItで実装できます。私のリポジトリを参照してください、私はすでにそれを実装しました。

手順1: AutoIt.exeインストールリンク

ステップ2:

ピップインストールPyAutoIt

ガイダンスについては、私のコードまたは このリンク を参照してください。

1
shaurya uppal

基本的な例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()
0
Sers