Как сделать чтобы парсер мог "нажать кнопку"

Я делаю теграмм бота, в нем есть кнопка факты, я нашел сайт с генератором фактов и там есть кнопка - сгенерировать факт, мне надо "нажать кнопку" не открывая браузер, это возможно?

 def get_fact(url, headers):
    r = requests.get(url, headers=headers)
    soup = BeautifulSoup(r.text, "html.parser")
    button = soup.find_all("button", class_="fact")

    fact = soup.find_all("tr", class_="td")
    return fact

Я сам глупость написал, но просто чтоб вы поняли


Ответы (2 шт):

Автор решения: RottenRat

BeautifulSoup библиотека для красивого парсинга. Нужно использовать библиотеки, использующие драйвер браузера

Или как предложил человек по источнику:

Можно посмотреть через инспектор браузера (обычно на F12 вызывается) какой запрос отправляется при клике на ту кнопку и повторить ее через requests, urlopen или другую удобную вам библиотеку.

Вот пример авторизации через подсмотренный запрос:

import requests
session = requests.session()

rs = session.post('http://newlms.magtu.ru/login/index.php', data={'username': LOGIN, 'password': PASSWORD})
print(rs)

# Если логин / пароль правильный, случится переход на главную страницу
success = rs.url == 'http://newlms.magtu.ru/'
print(success)

if success:
    from bs4 import BeautifulSoup
    root = BeautifulSoup(rs.content, 'lxml')

    print('Меню:')
    for a in root.select('a.menu-action'):
        print('    {} -> {}'.format(a.text, a['href']))
→ Ссылка
Автор решения: Leonid

Я решил свой вопрос: я попробовал код, который просто парсит факты и это сработало, оно каждый раз давало рандомный факт

def get_fact(url, headers):
    r = requests.get(url, headers=headers)
    soup = BeautifulSoup(r.text, "html.parser")
    # button = soup.find_all("button", class_="fact")
    fact = soup.find_all("table", class_="text")
    clear_facts = [x.text for x in fact]
                    
    return clear_facts
→ Ссылка