85 votes

Comment faire une capture d'écran partielle avec Selenium WebDriver en python ?

J'ai beaucoup cherché mais je n'ai pas trouvé de solution. Voici ce qu'il en est une question similaire avec une solution possible en java.

Existe-t-il une solution similaire en Python ?

5voto

Gavriel Cohen Points 1378

Capture d'écran par Element :

from PIL import Image
from io import BytesIO

image = self.browser.driver.find_element_by_class_name('example.bla.bla').screenshot_as_png
im = Image.open(BytesIO(image))  # uses PIL library to open image in memory
im.save('example.png')

3voto

Ali Sajjad Points 810

C'est aussi simple que cela :

element = driver.find_element_by_class_name('myclass')
element.screenshot('screenshot.png')

1voto

Fernando Wittmann Points 335

J'ai converti la réponse de @randomphobia en une fonction. J'ai également utilisé la suggestion de @bummis d'utiliser location_once_scrolled_into_view au lieu de location afin de généraliser quelle que soit la taille de la page.

from selenium import webdriver
from PIL import Image
from io import BytesIO

def take_screenshot(element, driver, filename='screenshot.png'):
  location = element.location_once_scrolled_into_view
  size = element.size
  png = driver.get_screenshot_as_png() # saves screenshot of entire page

  im = Image.open(BytesIO(png)) # uses PIL library to open image in memory

  left = location['x']
  top = location['y']
  right = location['x'] + size['width']
  bottom = location['y'] + size['height']

  im = im.crop((left, top, right, bottom)) # defines crop points
  im.save(filename) # saves new cropped image

En voici les grandes lignes : https://gist.github.com/WittmannF/b714d3ceb7b6a5cd50002f11fb5a4929

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X