Нужно сделать скриншот расписания на сайте при помощи selenium
Есть задача сделать скриншот расписания занятий на сайте, пыталась сделать через размер, но кол-во пар не всегда совпадает c размерами заданных по умолчанию, тем более не всегда влезает в окно скриншота все предметы. Пробовала с driver.find_element_by_class_name но он там скринит только первый элемент, а при driver.find_elements_by_class_name возвращает список, поэтому нельзя сделать скрин. Вот сайт: http://almetpt.ru/2020/site/schedulegroups/0/1/2020-03-17 Подскажите, как можно сделать скрин для каждой группы отдельно)
Ответы (1 шт):
Если Вам нужен именно скриншот через selenium то можно так:
from selenium import webdriver
if __name__ == '__main__':
driver = webdriver.Firefox()
driver.get('http://almetpt.ru/2020/site/schedulegroups/0/1/2020-03-17')
# driver.save_screenshot("screenshot.png")
element = driver.find_element_by_class_name('card-columns')
element.screenshot("screenshot_full.png")
driver.close()
Закоментированная строка будет возвращать только видимую часть экрана
UPD: на коментарий:
from selenium import webdriver
from selenium.webdriver.common.by import By
if __name__ == '__main__':
driver = webdriver.Firefox()
driver.get('http://almetpt.ru/2020/site/schedulegroups/0/1/2020-03-17')
# driver.save_screenshot("screenshot.png")
element = driver.find_elements(By.CLASS_NAME, 'd-inline-block')
for elem in element:
# title = elem.find_element(By.CLASS_NAME, 'card-header').text
title = elem.find_element(By.CLASS_NAME, 'card-header').get_attribute('data-id')
elem.screenshot(f'./{title}.png')
driver.close()
Дополнил вариантом, который, как мне кажется, для бота, будет предпочтительней. В нем убрано само окно
webdriver, ну и учтено пожелание на счетdata-idв качестве названий скриншотов.
from selenium import webdriver
from selenium.webdriver import FirefoxOptions
from selenium.webdriver.common.by import By
if __name__ == '__main__':
options = FirefoxOptions()
options.headless = True
driver = webdriver.Firefox(options=options)
driver.get('http://almetpt.ru/2020/site/schedulegroups/0/1/2020-03-17')
element = driver.find_elements(By.CLASS_NAME, 'd-inline-block')
for elem in element:
title = elem.find_element(By.CLASS_NAME, 'card-header').get_attribute('data-id')
elem.screenshot(f'./{title}.png')
driver.close()
