Вы можете обрезать сохраненный скриншот, используя подушку pip install pillow
def crop_image(img, img_limit):
img_width, img_height = img.size
crop_dim = (0, 0, img_width, img_limit) # left top right bottom
cropped_img = img.crop(crop_dim)
return cropped_img
после выполнения save_screenshot(driver, "path/to/img")
выполните следующее:
from PIL import Image
img_limit = 30000 # your image size limit
img = Image.open("path/to/img")
img = crop_image(img, img_limit)
img.save("path/to/img")
если вы не хотите сохранять изображение перед тем, как манипулировать им, вы можете использовать get_screenshot_as_png
, который будет возвращать двоичные данные вместо его сохранения:
from PIL import Image
from io import BytesIO
img_limit = 30000 # your image size limit
img_binary = driver.get_screenshot_as_png()
img = Image.open(BytesIO(img_binary))
img = crop_image(img, img_limit)
img.save("path/to/save")
обязательно выполните del img
и del img_binary
, когда вы закончите, чтобы удалить двоичные данные из памяти
чтобы сделать один скриншот всей страницы, сделайте следующее:
from selenium import webdriver
DRIVER_PATH = "path/to/chrome/driver"
URL = "site.url"
options = webdriver.ChromeOptions()
options.add_argument("headless")
driver = webdriver.Chrome(executable_path = DRIVER_PATH, chrome_options = options)
# setting a long window height to take one full screenshot
driver.set_window_size(1920, 90000) # width , height
driver.get(URL)
driver.maximize_window()
img_binary = driver.get_screenshot_as_png()
PS: если вы используете этот метод для создания скриншота, вам не понадобится pillow
. просто используйте set_window_size
, чтобы установить высоту и ширину окна, которое вы хотите, что даст вам тот же размер на скриншоте