🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] 前言 selenium截取全图小伙伴们都知道,曾经去面试的时候,面试官问:如何截图某个元素的图?不要全部的,只要某个元素。 ## selenium截图 1. selenium提供了几个截取全屏的方法 * get_screenshot_as_file(self, filename) --这个方法是获取当前window的截图,出现IOError时候返回False,截图成功返回True。 filename参数是保存文件的路径。 ``` driver.get_screenshot_as_file('/Screenshots/foo.png') ``` * get_screenshot_as_base64(self) --这个方法也是获取屏幕截图,保存的是base64的编码格式,在HTML界面输出截图的时候,会用到。 比如,想把截图放到html测试报告里。 ``` driver.get_screenshot_as_base64() ``` * get_screenshot_as_png(self) --这个是获取屏幕截图,保存的是二进制数据,很少用到. ``` driver.get_screenshot_as_png() ``` 2. selenium其实也提供了对元素截图的方法,但是会报错。据说只有Edge浏览器才能用,所以可以放弃。 ![](https://img.kancloud.cn/1d/d4/1dd4c0972e8df5bdb4697bfd47704fd9_891x432.png) <br /> ## location获取元素坐标 1. 以百度的搜索按钮为例,打印搜索按钮所在的位置: ![](https://img.kancloud.cn/58/48/5848b6ccfdb2e1056ba3bb0dab1ed636_525x389.png) 2. 返回结果:{'x': 844, 'y': 188},从返回的结果可以看出,返回的是一个字典类型数据 x代表横坐标,y代表纵坐标.(每个人的电脑窗口大小不一样,得到结果也不一样, 不用纠结) <br /> ## size获取元素大小 1. 获取元素的大小,用element.size就可以获取到了。 ``` element = driver.find_element_by_id("su") print(element.size) # 打印元素大小 ``` 2. 返回结果:{'height': 44, 'width': 108},这个也字典类型,width是宽度,height是高度。 ## 安装pillow 1. cmd打开,输入:pip install pillow ![](https://img.kancloud.cn/a1/52/a1526326277f3392dab0f38f203bb6c3_920x512.png) <br /> ## 案例参考 ``` from selenium import webdriver from PIL import Image driver = webdriver.Chrome() driver.get("http://www.baidu.com") driver.save_screenshot("button.png") element = driver.find_element_by_id("su") print(element.location) # 打印元素坐标 print(element.size) # 打印元素大小 left = element.location['x'] top = element.location['y'] right = element.location['x'] + element.size['width'] bottom = element.location['y'] + element.size['height'] im = Image.open('button.png') im = im.crop((left, top, right, bottom)) im.save('button.png') ```