You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Selenium获取的下拉选项动态生成pyTelegramBotAPI内联键盘?

解决Selenium下拉选项转pyTelegramBotAPI动态内联键盘的问题

我来帮你搞定这个动态生成内联键盘的需求!核心思路是先从Selenium拿到下拉选项,再把这些选项逐个转换成Telegram内联按钮,最后发送带键盘的消息。以下是具体步骤和代码调整:

1. 调整select_aff函数,返回下拉选项列表

首先,我们需要让select_aff能返回获取到的选项(之前的代码只是在内部处理,没有对外返回)。另外,建议把集合换成列表,这样能保留下拉选项原本的顺序,用户体验更好:

def select_aff():
    # 获取<select>元素
    select = Select(browser.find_element_by_xpath(
        '//*[@id="formly_1_vAffiliateNetwork_affiliate_network_id_1"]'))
    # 提取所有非空的选项文本,返回列表
    options = [o.text.strip() for o in select.options if o.text.strip()]
    return options

2. 在消息处理函数中动态生成内联键盘

接下来,在handle_select_affnetwork里调用上面的函数拿到选项,然后用pyTelegramBotAPI的InlineKeyboardMarkup和InlineKeyboardButton来构建键盘:

注意:要先导入telebot的types模块,不然会报错:

from telebot import types

然后修改消息处理函数:

@bot.message_handler(func=lambda message: get_state(message) == OFFER_SELECT_AFFNETWORK)
def handle_select_affnetwork(message):
    if message.text == 'Select':
        # 先发送提示文本
        bot.send_message(message.chat.id, 'Select affiliate network')
        # 获取下拉选项列表
        aff_options = select_aff()
        # 动态生成内联按钮列表
        keyboard = []
        for option in aff_options:
            # 每个按钮对应一个选项,回调数据可以自定义(这里用前缀区分联盟网络的选择)
            button = types.InlineKeyboardButton(option, callback_data=f"aff_select_{option}")
            # 每行一个按钮(如果想每行多个,可以把多个按钮放在同一个列表里,比如[button1, button2])
            keyboard.append([button])
        # 创建内联键盘标记
        reply_markup = types.InlineKeyboardMarkup(keyboard)
        # 发送带内联键盘的消息
        bot.send_message(message.chat.id, "Choose your affiliate network:", reply_markup=reply_markup)

3. 处理用户的键盘点击回调

最后,别忘了添加一个回调处理函数,用来响应用户点击内联按钮的操作,比如用Selenium选择对应的下拉选项:

@bot.callback_query_handler(func=lambda call: call.data.startswith('aff_select_'))
def handle_affiliate_selection(call):
    # 从回调数据中提取选中的联盟网络名称
    selected_aff = call.data.replace('aff_select_', '')
    # 用Selenium选择对应的选项
    select = Select(browser.find_element_by_xpath(
        '//*[@id="formly_1_vAffiliateNetwork_affiliate_network_id_1"]'))
    select.select_by_visible_text(selected_aff)
    # 回复用户操作成功
    bot.answer_callback_query(call.id, f"Successfully selected: {selected_aff}")
    bot.send_message(call.message.chat.id, f"You've selected the affiliate network: {selected_aff}")

这样整个流程就通了:用户发送"Select"后,Bot会拉取网页下拉选项,生成内联键盘,用户点击按钮后,Bot用Selenium完成选择并反馈结果。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 13:02:44