构建电报机器人以自动化 Web 流程
使用 Python、Selenium 和 Telegram
认为在网上填写表格既无聊又乏味?我完全同意你的看法。我写这篇文章是为了记录创建 Telegram Bot 以自动化 Web 流程的过程,并展示我们如何通过使用编程来自动化简单任务来节省时间和精力。让我们开始吧!
动机和想法💡

<img altu003d"image" srcsetu003d"/_next/image?urlu003dhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F824%2F1*5R3s3OLA31grjrX9humZgg.png&wu003d828&qu003d75 1x, /_next/image?urlu003dhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F824%2F1*5R3s3OLA31grjrX9humZgg.png&wu003d1920&qu003d75 2x" srcu003d"/_next/image?url u003dhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F824%2F1*5R3s3OLA31grjrX9humZgg.png&wu003d1920&qu003d75" 解码u003d"async" data-nimgu003d"intrinsic" styleu003d"position:absolute ;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min -width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:contain" classu003d"image" loadingu003d"lazy">
创建者Katerina Limpitsouni
当我偶然发现一些有趣的事情时,我经常发现自己会向我的朋友和家人发送文章。然后,我们有很多东西要分享和讨论,我们经常认为如果我们能突出显示和评论这篇文章会很棒。在谷歌搜索解决方案后,我发现了大约Outline.com,这是一个通过去除杂乱来增强在线文章的可读性并允许读者进行注释的工具。过程很简单:
1.复制你想要的文章的链接(例如https://towardsdatascience.com/an-introduction-to-json-c9acb464f43e)。
-
转到Outline.com并将其粘贴到框中并点击“创建大纲”(“大纲”基本上是 Outline.com 为您的文章创建的内容 - 一个简单、易于阅读且易于查看的版本)
-
在几秒钟内,Outline 会将您重定向到您的“大纲”,其中包含您可以与任何人共享的自定义链接。知道链接的任何人都可以看到您的重点和注释。
然而,我很快意识到每次复制链接都会很乏味,继续Outline.com然后获取另一个链接(大纲的)来分享。因此,我决定自动化这个过程。由于我主要使用 Telegram 来共享这些链接,因此我决定编写一个 Telegram 机器人,它可以自动为我获取大纲链接的过程。
技术栈📚

<img altu003d"image" srcsetu003d"/_next/image?urlu003dhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1*YniKLiyMniipUvxsXsTnxw.png&wu003d828&qu003d75 1x, /_next/image?urlu003dhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1*YniKLiyMniipUvxsXsTnxw.png&wu003d1920&qu003d75 2x" srcu003d"/_next/image?url u003dhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1*YniKLiyMniipUvxsXsTnxw.png&wu003d1920&qu003d75" 解码u003d"async" data-nimgu003d"intrinsic" styleu003d"position:absolute ;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min -width:100%;max-width:100%;min-height:100%;max-height:100%;object-fit:contain" classu003d"image" loadingu003d"lazy">
创建者Katerina Limpitsouni
要构建 Telegram Bot,让我们使用 Python(因为它不那么冗长,易于使用)版本 3.7.x 和对 API有一个很好的包装器。为了使过程自动化,让我们使用Selenium,这是用于此类目的的最广泛使用的开源工具。我们还将使用日志记录(更好地记录我们的程序)和时间(使其休眠)。因此,我们将使用以下 python 库:
-
电报 Python 包装器
-
日志记录(默认情况下应该在 Python 中)
-
Selenium Chrome WebDriver(对于这篇文章,我们在 macOS 上使用 Chrome,但您可以选择任何操作系统和浏览器,因为 Selenium 支持其中的大多数)。
-
时间(默认情况下应该在 Python 中)
流程👨🏻u200d💻

<img altu003d"image" srcsetu003d"/_next/image?urlu003dhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1*Sw36-HQS_Z_2AQsyR_SJTg .png&wu003d828&qu003d75 1x, /_next/image?urlu003dhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1*Sw36-HQS_Z_2AQsyR_SJTg.png&w u003d1920&qu003d75 2x" srcu003d"/_next/image?urlu003dhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1*Sw36-HQS_Z_2AQsyR_SJTg。 png&wu003d1920&qu003d75" 解码u003d"async" data-nimgu003d"intrinsic" styleu003d"position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding :0;边框:无;边距:自动;显示:块;宽度:0;高度:0;最小宽度:100%;最大宽度:100%;最小高度:100%;最大高度:100% ;object-fit:contain" classu003d"image" loadingu003d"lazy">
创建者Katerina Limpitsouni
随着概念和技术堆栈的清晰,让我们开始编写一些代码。以下部分分为子部分。如果您熟悉它,请随时跳过。
设置日志记录
让我们使用 Python 中的日志记录模块来设置日志记录。这是一个重要的步骤,因为它使我们能够更好地调试程序并监控程序的流程。您可以在此处阅读更多信息。
导入日志模块后,我们可以进行设置:
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',level=logging.INFO)
这列出了基础知识。
从 Bot 父亲那里获得授权密钥。
每个电报机器人都需要来自电报的身份验证密钥。它是一个复杂的字母数字字符串,需要对 Bot API 进行身份验证和发送请求。它可以帮助 Telegram 识别机器人的所有者。
在 Telegram 中,前往BotFather — 一个由 Telegram 提供的机器人来处理所有与机器人相关的事情。接下来,我们可以发送 /newbot 命令来创建一个新的机器人。 BotFather 需要用户名和名称。
我们可以复制它并将其存储在安全的地方。您可以在此处阅读有关 BotFath 及其各种功能的更多信息。
输入 Auth-ID,启动更新程序
首先,让我们导入所有必要的库:
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
updater 对象从 Telegram 接收更新并将它们发送给调度程序。你可以在这里阅读更多关于它的信息。它基本上代表 Telegram.Bot 对象并充当它的前端。我们可以通过这种方式设置更新程序并将其连接到调度程序:
updater = Updater(token='TOKEN', use_context=True)
dispatcher = updater.dispatcher
注意:use_contextu003dtrue 是一个特殊的参数,只有版本 12 的库才需要。
设置更新程序、调度程序和启动/停止
建议所有电报机器人都具有全局命令:/start、/help 和 /settings。 /start 特别重要,因为它开始与机器人交互。
让我们定义一个函数来处理 /start 命令(当用户启动机器人时)
def start(update, context):
context.bot.send_message(chat_id=update.message.chat_id, text="I'm a bot, please talk to me!")
现在,我们需要一个 CommandHandler(还记得上面的导入吗?)来处理来自用户的 /start 命令。我们还需要在调度程序中注册它:
dispatcher.add_handler(CommandHandler('start', start))
接下来,让我们添加 /read 命令 — 我们机器人的主要功能。首先,让我们导入必要的:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
让我们定义一个读取函数来处理 /read 命令
def read(update, context):
并设置一个处理程序并将其添加到调度程序:
dispatcher.add_handler(CommandHandler('read', read))
接下来,我们需要使用之前下载的 Selenium 驱动。让我们添加导入必要的项目:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
现在,让我们设置一个浏览器对象。浏览器对象基本上是一个自动化的浏览器,可以通过我们编写的 Python 命令进行控制。您需要指定之前下载的 chrome 驱动程序的目录。
browser = webdriver.Chrome('**directory of chromedriver**')
让我们访问Outline.com:
browser.get('https://www.outline.com')
现在是有趣的部分。 我们如何使它提交用户到大纲网站上的表单的链接? 我们可以使用 Chrome 开发工具检查表单并复制其 ID 以使 selenium 浏览器能够找到它。我们还可以提取链接(/read 命令的唯一参数)并将其传递:
linkbar = browser.find_element_by_id('source')
linkbar.send_keys(context.args)
linkbar.send_keys(Keys.ENTER)
我们将不得不停止程序 10 秒钟,因为 URL 从outline.com变为 outline.com/something — 这就是我们想要的链接。最后,我们使用浏览器的 current_url 属性将获得的链接发回给用户:
time.sleep(10)
context.bot.send_message(chat_id=update.message.chat_id, text=browser.current_url)
最后,我们清理工作簿并将关键信息放入 main 函数中:
def main():
# Create updater and pass in Bot's API token.
updater = Updater(token='your_key_here', use_context=True)
# Get dispatcher to register handlers
dispatcher = updater.dispatcher
# answer commands
dispatcher.add_handler(CommandHandler('start', start))
dispatcher.add_handler(CommandHandler('read', read))
# start the bot
updater.start_polling()
# stop
updater.idle()
if __name__ == '__main__':
main()
这就是我们构建这个电报机器人的方式。这是我们的最终代码的样子:
<a hrefu003d"https://medium.com/media/9ab07641d147d22910c2e8c5fca5531b/href">https://medium.com/media/9ab07641d147d22910c2e8c5fca5531b/href</a>
随意将其用作模板!要开始使用,您可以在此处 fork 我的存储库或从上述要点复制代码!
raivatshah/OutlineBot
玩得开心编码!以下是一些您可能会觉得有用的资源:
<a hrefu003d"https://medium.com/media/4fb30b4e5f4a7f77008f0dc21e5b2bfd/href">https://medium.com/media/4fb30b4e5f4a7f77008f0dc21e5b2bfd/href</a>
-
[python-telegram-bot/python-telegram-bot
-
欢迎来到 Python Telegram Bot 的文档! - Python Telegram Bot 11.1.0 文档
更多推荐

所有评论(0)