Парсинг сайта после нажатия кнопки (Python)
На сайте есть калькулятор, хочу удаленно вносить нужные значения и получать данные из итоговой таблицы. Но при отправке запроса таблица пуста. Я так понимаю в данном случаем надо использовать selenium, но не понимаю как это сделать, чтобы после брать html код страницы.
https://dogovor-urist.ru/calculator/peni_po_stavke/#loanAmount=10000&dateStart=01.06.2020&dateFinish=09.06.2020&ratePart=1/360&rateType=3
import requests from bs4 import BeautifulSoup
count = 10000
start = '01.06.2020'
end = '09.06.2020'
url = f'/#loanAmount={count}&dateStart={start}&dateFinish={end}&ratePart=1/360&rateType=1'
source = 'https://dogovor-urist.ru/calculator/peni_po_stavke'
request = source + url
html = requests.request(url)
soup = BeautifulSoup(html.content, 'html.parser')
news = soup.find('div', class_='resultAppearing').find('table', class_='judge-table jt-2')
print(news)
Ответы (1 шт):
Указанный калькулятор заполняет вывод динамически, при загрузке и выполнении JavaScript. Просто requests модулем такое заполнение не достать.
С помощью selenium будет выглядеть следующим образом. На выходе будет таблица с заполненными данными.
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup
source = 'https://dogovor-urist.ru/calculator/peni_po_stavke'
count = 10000
start = '01.06.2020'
end = '09.06.2020'
url = f'{source}/#loanAmount={count}&dateStart={start}&dateFinish={end}&ratePart=1/360&rateType=1'
browser = webdriver.Chrome(ChromeDriverManager().install())
browser.get(url)
soup = BeautifulSoup(browser.page_source, 'html.parser')
print(soup.find('div', class_='resultAppearing').find('table', class_='judge-table jt-2'))
browser.quit()
Для работы потребуется
pip install selenium
pip install webdriver_manager
pip install bs4
Я не знаком с selenium. Попытался скрыть окно браузера при работе скрипта. Но в таком случае он просто зависает на строке browser.get(url). Не знаю с чем это связано.
options = webdriver.ChromeOptions()
options.headless = True
browser = webdriver.Chrome(ChromeDriverManager().install(), options=options)
Некоторые ответы предлагают спрятать окно за видимой областью или использовать PhantomJS
browser.set_window_position(-3000, 0)