bot whatsapp-列表索引超出范围错误

时间:2020-11-02 12:04:03

标签: python python-3.x bots whatsapp

我正在尝试学习如何做WhatsApp机器人。所以我从互联网上获取某人的代码并尝试对其进行更改,以使其适合我的WhatsApp,问题是当我运行它时,他找不到未读消息,并始终按我在聊天列表中进行的第二次聊天。 错误行:列表索引超出范围 这是代码,希望您能为我提供帮助:) 源代码:https://blog.usejournal.com/build-a-basic-news-fetching-whatsapp-bot-in-python-under-60-lines-of-code-2d992faf7f79

from logging import root

from selenium import webdriver
from bs4 import BeautifulSoup
import requests
import time

from urllib3.util import url

browser = webdriver.Firefox(executable_path='realPathIsHere')
browser.get('https://web.whatsapp.com')

def getNews():
    text_box = browser.find_element_by_class_name("_3uMse")
    response = "Let me fetch and send top 5 latest news:\n"
    text_box.send_keys(response)
    soup = BeautifulSoup(requests.get(url).content, "html5lib")
    articles = soup.find_all('article',
                             class_="MQsxIb xTewfe R7GTQ keNKEd j7vNaf Cc0Z5d YKEnGe EyNMab t6ttFe Fm1jeb EjqUne")
    news = [i.find_all('a', class_="ipQwMb Q7tWef")[0].text for i in articles[:5]]
    links = [root + i.find('a')['href'][1:] for i in articles[:5]]
    links = [requests.get("http://thelink.la/api-shorten.php?url=" + link).content.decode() for link in links]
    for i in range(5):
        text_box.send_keys(news[i] + "==>" + links[i] + "\n")

bot_users = {}  # A dictionary that stores all the users that sent activate bot
while True:
    unread = browser.find_elements_by_class_name("ZKn2B")
    name, message = '', ''
    if len(unread) > 0:
        ele = unread[-1]
        action = webdriver.common.action_chains.ActionChains(browser)
        action.move_to_element_with_offset(ele, 0, -20)  # move a bit to the left from the green dot
        # Clicking couple of times because sometimes whatsapp web responds after two clicks
    try:
        action.click()
        action.perform()
        action.click()
        action.perform()
    except Exception as e:
        pass
    try:
            name = browser.find_element_by_class_name("Pv-sE").text # Contact name
            message = browser.find_elements_by_class_name("vW7d1")[-1]
            if 'activate bot' in message.text.lower():
                if name not in bot_users:
                    bot_users[name] = True
                    text_box = browser.find_element_by_class_name("_3uMse")
                    response = "Hi " + name + ". Tal's Bot here :). Now I am activated for you\n"
                    text_box.send_keys(response)
                if name in bot_users:
                    if 'show' in message.text.lower() and 'news' in message.text.lower():
                        getNews()
                if 'deactivate' in message.text.lower():
                    if name in bot_users:
                        text_box = browser.find_element_by_class_name("_3uMse")
                        response = "Bye " + name + ".\n"
                        text_box.send_keys(response)
                        del bot_users[name]
    except Exception as e:
        print(e)
        pass
sleep(2)  # A 2 second pause so that the program doesn't run too fast

1 个答案:

答案 0 :(得分:0)

我不知道为什么,但是现在可以了:)