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

ttisahbt  于 2023-11-18  发布在  Python
关注(0)|答案(2)|浏览(210)

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

我想做的是:

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

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

源码

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

  1. def getItemsInfo1(self):
  2. try:
  3. iteminfo1 = WebDriverWait(self.driver, 4).until(
  4. EC.presence_of_element_located((By.CLASS_NAME, 'im_message_text')))
  5. list3 = self.driver.find_elements_by_class_name("im_message_text")
  6. list33 = list3[-1]
  7. list4 = list33.find_element_by_tag_name("strong")
  8. list4txt = list4.text
  9. return list4txt
  10. except:
  11. print("Nothing is found")

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

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


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

u0njafvf

u0njafvf1#

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

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

  1. info1= Main.getItemsInfo1()
  2. info2= Main.getItemsInfo2()
  3. while info == Info2:
  4. print("No new messages. Try number ", count)
  5. info1= Main.getItemsInfo1()
  6. info2= Main.getItemsInfo2()
  7. print(info1,info2)
  8. count += 1


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

展开查看全部
zhte4eai

zhte4eai2#

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

  1. from telethon import TelegramClient, events
  2. client = TelegramClient(PHONE_NUMBER, API_ID, API_HASH)
  3. @client.on(events.NewMessage("chanel name"))
  4. def new_message_listener(event):
  5. new_message = event.message.message
  6. media_status = event.message.media
  7. ## DO what you like with new_messsage

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

  1. api_id = 1027347
  2. api_hash = "c0e2cfefac982659a52da625b81e2a99"

展开查看全部

相关问题