selenium cannot screenshot a web element

前端 未结 2 1392
余生分开走
余生分开走 2021-01-16 02:28

I can screenshot a whole page using Firefox.get_screenshot_as_file(\'2.png\'),but when I screenshot a web element using passage.screenshot(\'1.png\'),it alway raise

相关标签:
2条回答
  • 2021-01-16 02:47

    The screenshot of a web element is not implemented in the Firefox driver. A workaround would be to crop the targeted element from the screenshot:

    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')
    
    0 讨论(0)
  • 2021-01-16 02:55

    You're getting this exception because you cannot take a screenshot of just an element in selenium without some third-party libraries or your own code to handle this. See This stackoverflow post

    Which uses a library called PIL to do it:

    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
    
    0 讨论(0)
提交回复
热议问题