zoukankan      html  css  js  c++  java
  • selenium+python自动化82-只截某个元素的图

    前言

    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浏览器才能用,所以可以放弃。

    location获取元素坐标

    1.以百度的搜索按钮为例,打印搜索按钮所在的位置:

    # coding:utf-8
    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get('http://www.baidu.com/')
    
    driver.save_screenshot('button.png')
    element = driver.find_element_by_id("su")
    print(element.location)                # 打印元素坐标
    
    

    2.返回结果:{'y': 233.0, 'x': 737.0},从返回的结果可以看出,返回的是一个字典类型数据
    x代表横坐标,y代表纵坐标.(每个人的电脑窗口大小不一样,得到结果也不一样, 不用纠结)

    size获取元素大小

    1.获取元素的大小,用element.size就可以获取到了。

    element = driver.find_element_by_id("su")
    
    print(element.size)                    # 打印元素大小
    
    

    2.返回结果:{'width': 100, 'height': 36},这个也字典类型,width是宽度,height是高度。

    安装pillow

    1.cmd打开,输入:pip install pillow

    案例参考

    # coding:utf-8
    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')
    

    seleniumQQ群:646645429

  • 相关阅读:
    Vue 单向数据流&双向数据绑定原理
    Arguments对象
    类数组对象(array-like objects)
    ...theArgs剩余参数
    vue 深度选择器/deep/报错(标红)
    修改mandMobile下拉菜单样式
    PC端input maxlength 失效问题
    el-input 正则限制输入为非负整数
    Mac鼠标左右键都是右键
    Vue双向数据绑定简易实现
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/7748693.html
Copyright © 2011-2022 走看看