Как сделать чтобы парсер мог "нажать кнопку"
Я делаю теграмм бота, в нем есть кнопка факты, я нашел сайт с генератором фактов и там есть кнопка - сгенерировать факт, мне надо "нажать кнопку" не открывая браузер, это возможно?
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 шт):
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']))
Я решил свой вопрос: я попробовал код, который просто парсит факты и это сработало, оно каждый раз давало рандомный факт
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