selenium no puede capturar un elemento web

introduzca la descripción de la imagen aquí

Puedo capturar una página completa con Firefox.get_screenshot_as_file (‘2.png’), pero cuando captura una pantalla de un elemento web mediante passage.screenshot (‘1.png’), siempre se genera esta excepción:

selenium.common.exceptions.WebDriverException: Message: Unrecognized command: GET /session/284283fa-53fc-4b33-b329-e6e888dbdcb0/screenshot/{35834cf1-c9c7-4129-99b1-24f30c6b56e6} 

Está recibiendo esta excepción porque no puede tomar una captura de pantalla de solo un elemento en selenium sin algunas bibliotecas de terceros o su propio código para manejar esto. Ver este post stackoverflow

Que utiliza una biblioteca llamada PIL para hacerlo:

 from selenium import webdriver from PIL import Image fox = webdriver.Firefox() fox.get('https://stackoverflow.com/') # now that we have the preliminary stuff out of the way time to get that image :D element = fox.find_element_by_id('hlogo') # find part of the page you want image of location = element.location size = element.size fox.save_screenshot('screenshot.png') # saves screenshot of entire page fox.quit() im = Image.open('screenshot.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('screenshot.png') # saves new cropped image 

La captura de pantalla de un elemento web no se implementa en el controlador de Firefox. Una solución alternativa sería recortar el elemento objective de la captura de pantalla:

 import StringIO from selenium import webdriver from PIL import Image driver = webdriver.Firefox() driver.get('http://stackoverflow.com') # get the logo element element = driver.find_element_by_id('hlogo') # crop to the logo from the screenshot rect = element.rect points = [rect['x'], rect['y'], rect['x'] + rect['width'], rect['y'] + rect['height']] with Image.open(StringIO.StringIO(driver.get_screenshot_as_png())) as img : with img.crop(points) as imgsub : imgsub.save("c:\\temp\\logo.png", 'PNG')