我如何用selenium制作一个python机器人来检查什么时候有新消息从Telegram频道到达?

ttisahbt  于 12个月前  发布在  Python
关注(0)|答案(2)|浏览(132)

我应该先提到我对python和selenium还很陌生,所以我对它们都不太了解。

我想做的是:

  • 每秒钟检查一次我关注的电报频道是否发出了新消息。我在浏览器上打开了电报网站,并使用自定义标志打开,这样我就不需要每次都用电报登录。

到目前为止,我所做的是查看包含所有消息文本的类im_message_text,并获取列表中的最后一个。

源码

注意“strong”标签只是标题存储在文本消息中的位置,这就是我用来比较所有内容的地方:

def getItemsInfo1(self):
    try:
        iteminfo1 = WebDriverWait(self.driver, 4).until(
            EC.presence_of_element_located((By.CLASS_NAME, 'im_message_text')))
        list3 = self.driver.find_elements_by_class_name("im_message_text")
        list33 = list3[-1]
        list4 = list33.find_element_by_tag_name("strong")
        list4txt = list4.text
        return list4txt

    except:
        print("Nothing is found")

字符串
接下来我做的是另一个相同的代码,它在开始处有一个time.sleep(1),给予消息出现的时间,我使用下面的while循环比较2:

while Main.getItemsInfo1() == Main.getItemsInfo2(): 
        print("No new messages. Try number ", count)
        print(Main.getItemsInfo1(), Main.getItemsInfo2())
        count += 1


到目前为止,只要有一条新消息,代码输出就会突出显示这两个方法具有不同的文本,但它仍然没有结束while循环,并继续说没有任何新消息。
有人知道怎么帮忙吗?

u0njafvf

u0njafvf1#

while Main.getItemsInfo1() == Main.getItemsInfo2():  
print("No new messages. Try number ", count)
print(Main.getItemsInfo1(), Main.getItemsInfo2())
count += 1

字符串
当你调用getItemsInfo1()的时候,你是在再次调用这个方法,所以不能保证print语句中的get值和while中的值是一样的,所以可以这样使用:

info1= Main.getItemsInfo1()
info2= Main.getItemsInfo2()
while  info == Info2:  
   print("No new messages. Try number ", count)
   info1= Main.getItemsInfo1()
   info2= Main.getItemsInfo2()
   print(info1,info2)
   count += 1


上面的代码将确保您具有相同的值,因为您将值存储到变量中,然后验证它。

zhte4eai

zhte4eai2#

你甚至不需要使用telegram web或selenuim,让我们让它更容易:‍

from telethon import TelegramClient, events

client = TelegramClient(PHONE_NUMBER, API_ID, API_HASH)

@client.on(events.NewMessage("chanel name"))
def new_message_listener(event):
    new_message = event.message.message
    media_status = event.message.media
    ## DO what you like with new_messsage

字符串
只需记住更改TelegramClient中的变量,您可以从Telegram网站接收API_ID,API_HASH.
它们应该是这样的:

api_id = 1027347
api_hash = "c0e2cfefac982659a52da625b81e2a99"

相关问题