telegram bot как получить ответ по скрипту?
всем привет. тренируюсь в написании ботов, проблема в текущем, что не могу получить ответ от бота после ввода ГАН, скрипт рабочий, в отдельном файле отрабатывает без проблем, но в телеге тишина, подскажите как получить ответ примерно в таком формате -
Дата Операция с грузом Дата/время исполнения операции Примечания
18.04.21 Принят на груз.терминал 18.04.21 14:16 Рейс: СУ-1461 По заявке №: 476154 Наименование груза: ОБОРУДОВАНИЕ Мест: 3 Вес: 11
18.04.21 Размещен на складе 18.04.21 14:16 -
18.04.21 Груз отправлен 18.04.21 18:28 Наименование груза: ОБОРУДОВАНИЕ Тип груза: Обычный Мест: 3 Вес: 11 Рейс: СУ-1461 Дата/время вылета: 18.04.21 18:22
@dp.message_handler(commands=["start"])
async def start_command(message: types.Message):
await message.reply("Привет! Напиши мне номер ГАН в формате 555-12345678 и получишь его статус!")
@dp.message_handler(commands=[])
async def get_status(message: types.Message):
try:
browser.get('http://miragegw.ovbport.ru:7777/pls/apex/f?p=723:1:0:::::')
block_gan = browser.find_element_by_id('P1_NOMER').send_keys(message)
button_search = browser.find_element_by_id('B5691949657452399').click()
tabs = browser.window_handles
browser.switch_to.window(tabs[0])
url_new = browser.current_url
way = browser.find_element_by_xpath('/html/body/form/div/table/tbody/tr/td[1]/section[2]/table')
status = browser.find_element_by_css_selector('#report_R5690543311452393 > tbody.uReportBody > tr > td > table')
await message.reply(status)
except:
await message.reply("Проверь ГАН!")
if __name__ == '__main__':
executor.start_polling(dp)
Ответы (1 шт):
Использовать selenium в ботах под мессенджеры или соцсети это плохая идея из-за его ненадёжности и большого потребления памяти, лучше такой функционал реализовывать на уровне запросов. Данную фичу можно реализовать через aiohttp, это будет быстрее и надежнее.
Сами запросы можно отследить с помощью инструментов разработчика в браузере или с помощью снифферов-отладчиков (fiddler, charles и тп) при взаимодействии с сайтом через браузер.
При переходе по ссылке необходимо спарсить все необходимые поля из ответа (через regex, bs4, lxml) и все найденные значения передать через POST запрос.
Код будет выглядеть примерно так, (в коде ниже только схема запросов, осталось парсер значений полей дописать!)
async def main():
async with aiohttp.ClientSession() as session:
async with session.get("http://miragegw.ovbport.ru:7777/pls/apex/f?p=723:1:0:::::") as resp:
resp = await resp.text()
# здесь необходимо спарсить значения полей с html страницы для следующего post запроса и поместить в словарь
#...
data = {"p_flow_id": 0, "p_flow_step_id": 1, #...
}
async with session.post("http://miragegw.ovbport.ru:7777/pls/apex/wwv_flow.accept", data=data) as resp:
resp = await resp.text()
# далее вытащить данные из ответа
#...