Нужно сделать скриншот расписания на сайте при помощи 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 шт):

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

Если Вам нужен именно скриншот через 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()
→ Ссылка